forked from Minki/linux
devlink: Extend the support querying for region snapshot IDs
Extend the support for DEVLINK_CMD_REGION_GET command to also return the IDs of the snapshot currently present on the region. Each reply will include a nested snapshots attribute that can contain multiple snapshot attributes each with an ID. Signed-off-by: Alex Vesker <valex@mellanox.com> Signed-off-by: Jiri Pirko <jiri@mellanox.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
d8db7ea55f
commit
a006d467fb
@ -267,6 +267,9 @@ enum devlink_attr {
|
||||
|
||||
DEVLINK_ATTR_REGION_NAME, /* string */
|
||||
DEVLINK_ATTR_REGION_SIZE, /* u64 */
|
||||
DEVLINK_ATTR_REGION_SNAPSHOTS, /* nested */
|
||||
DEVLINK_ATTR_REGION_SNAPSHOT, /* nested */
|
||||
DEVLINK_ATTR_REGION_SNAPSHOT_ID, /* u32 */
|
||||
|
||||
/* add new attributes above here, update the policy in devlink.c */
|
||||
|
||||
|
@ -3149,6 +3149,55 @@ static void devlink_param_unregister_one(struct devlink *devlink,
|
||||
kfree(param_item);
|
||||
}
|
||||
|
||||
static int devlink_nl_region_snapshot_id_put(struct sk_buff *msg,
|
||||
struct devlink *devlink,
|
||||
struct devlink_snapshot *snapshot)
|
||||
{
|
||||
struct nlattr *snap_attr;
|
||||
int err;
|
||||
|
||||
snap_attr = nla_nest_start(msg, DEVLINK_ATTR_REGION_SNAPSHOT);
|
||||
if (!snap_attr)
|
||||
return -EINVAL;
|
||||
|
||||
err = nla_put_u32(msg, DEVLINK_ATTR_REGION_SNAPSHOT_ID, snapshot->id);
|
||||
if (err)
|
||||
goto nla_put_failure;
|
||||
|
||||
nla_nest_end(msg, snap_attr);
|
||||
return 0;
|
||||
|
||||
nla_put_failure:
|
||||
nla_nest_cancel(msg, snap_attr);
|
||||
return err;
|
||||
}
|
||||
|
||||
static int devlink_nl_region_snapshots_id_put(struct sk_buff *msg,
|
||||
struct devlink *devlink,
|
||||
struct devlink_region *region)
|
||||
{
|
||||
struct devlink_snapshot *snapshot;
|
||||
struct nlattr *snapshots_attr;
|
||||
int err;
|
||||
|
||||
snapshots_attr = nla_nest_start(msg, DEVLINK_ATTR_REGION_SNAPSHOTS);
|
||||
if (!snapshots_attr)
|
||||
return -EINVAL;
|
||||
|
||||
list_for_each_entry(snapshot, ®ion->snapshot_list, list) {
|
||||
err = devlink_nl_region_snapshot_id_put(msg, devlink, snapshot);
|
||||
if (err)
|
||||
goto nla_put_failure;
|
||||
}
|
||||
|
||||
nla_nest_end(msg, snapshots_attr);
|
||||
return 0;
|
||||
|
||||
nla_put_failure:
|
||||
nla_nest_cancel(msg, snapshots_attr);
|
||||
return err;
|
||||
}
|
||||
|
||||
static int devlink_nl_region_fill(struct sk_buff *msg, struct devlink *devlink,
|
||||
enum devlink_command cmd, u32 portid,
|
||||
u32 seq, int flags,
|
||||
@ -3175,6 +3224,10 @@ static int devlink_nl_region_fill(struct sk_buff *msg, struct devlink *devlink,
|
||||
if (err)
|
||||
goto nla_put_failure;
|
||||
|
||||
err = devlink_nl_region_snapshots_id_put(msg, devlink, region);
|
||||
if (err)
|
||||
goto nla_put_failure;
|
||||
|
||||
genlmsg_end(msg, hdr);
|
||||
return 0;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user