Commit c9666bac authored by Jakub Kicinski's avatar Jakub Kicinski
Browse files

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
Loading
Loading
Loading
Loading
+21 −20
Original line number Diff line number Diff line
@@ -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;
	int err = 0;

	devlink_dump_for_each_instance_get(msg, state, 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) {
		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 @@ static int devlink_nl_cmd_sb_pool_get_dumpit(struct sk_buff *msg,
	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;
	int err = 0;

	devlink_dump_for_each_instance_get(msg, state, 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) {
		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 @@ static int devlink_nl_cmd_sb_port_pool_get_dumpit(struct sk_buff *msg,
	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;
	int err = 0;

	devlink_dump_for_each_instance_get(msg, state, 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) {
		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 @@ devlink_nl_cmd_sb_tc_pool_bind_get_dumpit(struct sk_buff *msg,
	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;
}