devlink: restart dump based on devlink instance ids (function)
Use xarray id for cases of sub-objects which are iterated in a function. Reviewed-by: Jiri Pirko <jiri@nvidia.com> Reviewed-by: Jacob Keller <jacob.e.keller@intel.com> Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
parent
a8f947073f
commit
c9666bac53
@ -2547,12 +2547,12 @@ static int devlink_nl_cmd_sb_pool_get_dumpit(struct sk_buff *msg,
|
||||
{
|
||||
struct devlink_nl_dump_state *state = devlink_dump_state(cb);
|
||||
struct devlink *devlink;
|
||||
struct devlink_sb *devlink_sb;
|
||||
unsigned long index;
|
||||
int idx = 0;
|
||||
int err = 0;
|
||||
|
||||
devlinks_xa_for_each_registered_get(sock_net(msg->sk), index, devlink) {
|
||||
devlink_dump_for_each_instance_get(msg, state, devlink) {
|
||||
struct devlink_sb *devlink_sb;
|
||||
int idx = 0;
|
||||
|
||||
if (!devlink->ops->sb_pool_get)
|
||||
goto retry;
|
||||
|
||||
@ -2567,6 +2567,7 @@ static int devlink_nl_cmd_sb_pool_get_dumpit(struct sk_buff *msg,
|
||||
} else if (err) {
|
||||
devl_unlock(devlink);
|
||||
devlink_put(devlink);
|
||||
state->idx = idx;
|
||||
goto out;
|
||||
}
|
||||
}
|
||||
@ -2578,7 +2579,6 @@ out:
|
||||
if (err != -EMSGSIZE)
|
||||
return err;
|
||||
|
||||
state->idx = idx;
|
||||
return msg->len;
|
||||
}
|
||||
|
||||
@ -2762,12 +2762,12 @@ static int devlink_nl_cmd_sb_port_pool_get_dumpit(struct sk_buff *msg,
|
||||
{
|
||||
struct devlink_nl_dump_state *state = devlink_dump_state(cb);
|
||||
struct devlink *devlink;
|
||||
struct devlink_sb *devlink_sb;
|
||||
unsigned long index;
|
||||
int idx = 0;
|
||||
int err = 0;
|
||||
|
||||
devlinks_xa_for_each_registered_get(sock_net(msg->sk), index, devlink) {
|
||||
devlink_dump_for_each_instance_get(msg, state, devlink) {
|
||||
struct devlink_sb *devlink_sb;
|
||||
int idx = 0;
|
||||
|
||||
if (!devlink->ops->sb_port_pool_get)
|
||||
goto retry;
|
||||
|
||||
@ -2782,6 +2782,7 @@ static int devlink_nl_cmd_sb_port_pool_get_dumpit(struct sk_buff *msg,
|
||||
} else if (err) {
|
||||
devl_unlock(devlink);
|
||||
devlink_put(devlink);
|
||||
state->idx = idx;
|
||||
goto out;
|
||||
}
|
||||
}
|
||||
@ -2793,7 +2794,6 @@ out:
|
||||
if (err != -EMSGSIZE)
|
||||
return err;
|
||||
|
||||
state->idx = idx;
|
||||
return msg->len;
|
||||
}
|
||||
|
||||
@ -3005,12 +3005,12 @@ devlink_nl_cmd_sb_tc_pool_bind_get_dumpit(struct sk_buff *msg,
|
||||
{
|
||||
struct devlink_nl_dump_state *state = devlink_dump_state(cb);
|
||||
struct devlink *devlink;
|
||||
struct devlink_sb *devlink_sb;
|
||||
unsigned long index;
|
||||
int idx = 0;
|
||||
int err = 0;
|
||||
|
||||
devlinks_xa_for_each_registered_get(sock_net(msg->sk), index, devlink) {
|
||||
devlink_dump_for_each_instance_get(msg, state, devlink) {
|
||||
struct devlink_sb *devlink_sb;
|
||||
int idx = 0;
|
||||
|
||||
if (!devlink->ops->sb_tc_pool_bind_get)
|
||||
goto retry;
|
||||
|
||||
@ -3025,6 +3025,7 @@ devlink_nl_cmd_sb_tc_pool_bind_get_dumpit(struct sk_buff *msg,
|
||||
} else if (err) {
|
||||
devl_unlock(devlink);
|
||||
devlink_put(devlink);
|
||||
state->idx = idx;
|
||||
goto out;
|
||||
}
|
||||
}
|
||||
@ -3036,7 +3037,6 @@ out:
|
||||
if (err != -EMSGSIZE)
|
||||
return err;
|
||||
|
||||
state->idx = idx;
|
||||
return msg->len;
|
||||
}
|
||||
|
||||
@ -6085,19 +6085,20 @@ static int devlink_nl_cmd_region_get_dumpit(struct sk_buff *msg,
|
||||
{
|
||||
struct devlink_nl_dump_state *state = devlink_dump_state(cb);
|
||||
struct devlink *devlink;
|
||||
unsigned long index;
|
||||
int idx = 0;
|
||||
int err = 0;
|
||||
|
||||
devlinks_xa_for_each_registered_get(sock_net(msg->sk), index, devlink) {
|
||||
devlink_dump_for_each_instance_get(msg, state, devlink) {
|
||||
int idx = 0;
|
||||
|
||||
err = devlink_nl_cmd_region_get_devlink_dumpit(msg, cb, devlink,
|
||||
&idx, state->idx);
|
||||
devlink_put(devlink);
|
||||
if (err)
|
||||
if (err) {
|
||||
state->idx = idx;
|
||||
goto out;
|
||||
}
|
||||
}
|
||||
out:
|
||||
state->idx = idx;
|
||||
return msg->len;
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user