Commit c9666bac authored by Jakub Kicinski's avatar Jakub Kicinski

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: default avatarJiri Pirko <jiri@nvidia.com>
Reviewed-by: default avatarJacob Keller <jacob.e.keller@intel.com>
Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
parent a8f94707
...@@ -2547,12 +2547,12 @@ static int devlink_nl_cmd_sb_pool_get_dumpit(struct sk_buff *msg, ...@@ -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_nl_dump_state *state = devlink_dump_state(cb);
struct devlink *devlink; struct devlink *devlink;
struct devlink_sb *devlink_sb;
unsigned long index;
int idx = 0;
int err = 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) if (!devlink->ops->sb_pool_get)
goto retry; goto retry;
...@@ -2567,6 +2567,7 @@ static int devlink_nl_cmd_sb_pool_get_dumpit(struct sk_buff *msg, ...@@ -2567,6 +2567,7 @@ static int devlink_nl_cmd_sb_pool_get_dumpit(struct sk_buff *msg,
} else if (err) { } else if (err) {
devl_unlock(devlink); devl_unlock(devlink);
devlink_put(devlink); devlink_put(devlink);
state->idx = idx;
goto out; goto out;
} }
} }
...@@ -2578,7 +2579,6 @@ static int devlink_nl_cmd_sb_pool_get_dumpit(struct sk_buff *msg, ...@@ -2578,7 +2579,6 @@ static int devlink_nl_cmd_sb_pool_get_dumpit(struct sk_buff *msg,
if (err != -EMSGSIZE) if (err != -EMSGSIZE)
return err; return err;
state->idx = idx;
return msg->len; return msg->len;
} }
...@@ -2762,12 +2762,12 @@ static int devlink_nl_cmd_sb_port_pool_get_dumpit(struct sk_buff *msg, ...@@ -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_nl_dump_state *state = devlink_dump_state(cb);
struct devlink *devlink; struct devlink *devlink;
struct devlink_sb *devlink_sb;
unsigned long index;
int idx = 0;
int err = 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) if (!devlink->ops->sb_port_pool_get)
goto retry; goto retry;
...@@ -2782,6 +2782,7 @@ static int devlink_nl_cmd_sb_port_pool_get_dumpit(struct sk_buff *msg, ...@@ -2782,6 +2782,7 @@ static int devlink_nl_cmd_sb_port_pool_get_dumpit(struct sk_buff *msg,
} else if (err) { } else if (err) {
devl_unlock(devlink); devl_unlock(devlink);
devlink_put(devlink); devlink_put(devlink);
state->idx = idx;
goto out; goto out;
} }
} }
...@@ -2793,7 +2794,6 @@ static int devlink_nl_cmd_sb_port_pool_get_dumpit(struct sk_buff *msg, ...@@ -2793,7 +2794,6 @@ static int devlink_nl_cmd_sb_port_pool_get_dumpit(struct sk_buff *msg,
if (err != -EMSGSIZE) if (err != -EMSGSIZE)
return err; return err;
state->idx = idx;
return msg->len; return msg->len;
} }
...@@ -3005,12 +3005,12 @@ devlink_nl_cmd_sb_tc_pool_bind_get_dumpit(struct sk_buff *msg, ...@@ -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_nl_dump_state *state = devlink_dump_state(cb);
struct devlink *devlink; struct devlink *devlink;
struct devlink_sb *devlink_sb;
unsigned long index;
int idx = 0;
int err = 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) if (!devlink->ops->sb_tc_pool_bind_get)
goto retry; goto retry;
...@@ -3025,6 +3025,7 @@ devlink_nl_cmd_sb_tc_pool_bind_get_dumpit(struct sk_buff *msg, ...@@ -3025,6 +3025,7 @@ devlink_nl_cmd_sb_tc_pool_bind_get_dumpit(struct sk_buff *msg,
} else if (err) { } else if (err) {
devl_unlock(devlink); devl_unlock(devlink);
devlink_put(devlink); devlink_put(devlink);
state->idx = idx;
goto out; goto out;
} }
} }
...@@ -3036,7 +3037,6 @@ devlink_nl_cmd_sb_tc_pool_bind_get_dumpit(struct sk_buff *msg, ...@@ -3036,7 +3037,6 @@ devlink_nl_cmd_sb_tc_pool_bind_get_dumpit(struct sk_buff *msg,
if (err != -EMSGSIZE) if (err != -EMSGSIZE)
return err; return err;
state->idx = idx;
return msg->len; return msg->len;
} }
...@@ -6085,19 +6085,20 @@ static int devlink_nl_cmd_region_get_dumpit(struct sk_buff *msg, ...@@ -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_nl_dump_state *state = devlink_dump_state(cb);
struct devlink *devlink; struct devlink *devlink;
unsigned long index;
int idx = 0;
int err = 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, err = devlink_nl_cmd_region_get_devlink_dumpit(msg, cb, devlink,
&idx, state->idx); &idx, state->idx);
devlink_put(devlink); devlink_put(devlink);
if (err) if (err) {
state->idx = idx;
goto out; goto out;
}
} }
out: out:
state->idx = idx;
return msg->len; return msg->len;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment