Skip to content

Commit dd86fec

Browse files
kuba-moodavem330
authored andcommitted
devlink: factor out building a snapshot notification
We'll need to send snapshot info back on the socket which requested a snapshot to be created. Factor out constructing a snapshot description from the broadcast notification code. v3: new patch Signed-off-by: Jakub Kicinski <[email protected]> Reviewed-by: Jiri Pirko <[email protected]> Reviewed-by: Jacob Keller <[email protected]> Signed-off-by: David S. Miller <[email protected]>
1 parent 39d0105 commit dd86fec

File tree

1 file changed

+28
-11
lines changed

1 file changed

+28
-11
lines changed

net/core/devlink.c

Lines changed: 28 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -3716,24 +3716,26 @@ static int devlink_nl_region_fill(struct sk_buff *msg, struct devlink *devlink,
37163716
return err;
37173717
}
37183718

3719-
static void devlink_nl_region_notify(struct devlink_region *region,
3720-
struct devlink_snapshot *snapshot,
3721-
enum devlink_command cmd)
3719+
static struct sk_buff *
3720+
devlink_nl_region_notify_build(struct devlink_region *region,
3721+
struct devlink_snapshot *snapshot,
3722+
enum devlink_command cmd, u32 portid, u32 seq)
37223723
{
37233724
struct devlink *devlink = region->devlink;
37243725
struct sk_buff *msg;
37253726
void *hdr;
37263727
int err;
37273728

3728-
WARN_ON(cmd != DEVLINK_CMD_REGION_NEW && cmd != DEVLINK_CMD_REGION_DEL);
37293729

37303730
msg = nlmsg_new(NLMSG_DEFAULT_SIZE, GFP_KERNEL);
37313731
if (!msg)
3732-
return;
3732+
return ERR_PTR(-ENOMEM);
37333733

3734-
hdr = genlmsg_put(msg, 0, 0, &devlink_nl_family, 0, cmd);
3735-
if (!hdr)
3734+
hdr = genlmsg_put(msg, portid, seq, &devlink_nl_family, 0, cmd);
3735+
if (!hdr) {
3736+
err = -EMSGSIZE;
37363737
goto out_free_msg;
3738+
}
37373739

37383740
err = devlink_nl_put_handle(msg, devlink);
37393741
if (err)
@@ -3757,15 +3759,30 @@ static void devlink_nl_region_notify(struct devlink_region *region,
37573759
}
37583760
genlmsg_end(msg, hdr);
37593761

3760-
genlmsg_multicast_netns(&devlink_nl_family, devlink_net(devlink),
3761-
msg, 0, DEVLINK_MCGRP_CONFIG, GFP_KERNEL);
3762-
3763-
return;
3762+
return msg;
37643763

37653764
out_cancel_msg:
37663765
genlmsg_cancel(msg, hdr);
37673766
out_free_msg:
37683767
nlmsg_free(msg);
3768+
return ERR_PTR(err);
3769+
}
3770+
3771+
static void devlink_nl_region_notify(struct devlink_region *region,
3772+
struct devlink_snapshot *snapshot,
3773+
enum devlink_command cmd)
3774+
{
3775+
struct devlink *devlink = region->devlink;
3776+
struct sk_buff *msg;
3777+
3778+
WARN_ON(cmd != DEVLINK_CMD_REGION_NEW && cmd != DEVLINK_CMD_REGION_DEL);
3779+
3780+
msg = devlink_nl_region_notify_build(region, snapshot, cmd, 0, 0);
3781+
if (IS_ERR(msg))
3782+
return;
3783+
3784+
genlmsg_multicast_netns(&devlink_nl_family, devlink_net(devlink),
3785+
msg, 0, DEVLINK_MCGRP_CONFIG, GFP_KERNEL);
37693786
}
37703787

37713788
/**

0 commit comments

Comments
 (0)