struct netlink_callback *cb)
{
struct devlink_nl_dump_state *state = devlink_dump_state(cb);
- struct devlink_rate *devlink_rate;
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) {
+ struct devlink_rate *devlink_rate;
+ int idx = 0;
+
devl_lock(devlink);
list_for_each_entry(devlink_rate, &devlink->rate_list, list) {
enum devlink_command cmd = DEVLINK_CMD_RATE_NEW;
if (err) {
devl_unlock(devlink);
devlink_put(devlink);
+ state->idx = idx;
goto out;
}
idx++;
if (err != -EMSGSIZE)
return err;
- state->idx = idx;
return msg->len;
}
{
struct devlink_nl_dump_state *state = devlink_dump_state(cb);
struct devlink *devlink;
- struct devlink_port *devlink_port;
- unsigned long index, port_index;
- int idx = 0;
int err;
- devlinks_xa_for_each_registered_get(sock_net(msg->sk), index, devlink) {
+ devlink_dump_for_each_instance_get(msg, state, devlink) {
+ struct devlink_port *devlink_port;
+ unsigned long port_index;
+ int idx = 0;
+
devl_lock(devlink);
xa_for_each(&devlink->ports, port_index, devlink_port) {
if (idx < state->idx) {
if (err) {
devl_unlock(devlink);
devlink_put(devlink);
+ state->idx = idx;
goto out;
}
idx++;
devlink_put(devlink);
}
out:
- state->idx = idx;
return msg->len;
}
struct devlink_nl_dump_state *state = devlink_dump_state(cb);
struct devlink_linecard *linecard;
struct devlink *devlink;
- unsigned long index;
- int idx = 0;
int err;
- devlinks_xa_for_each_registered_get(sock_net(msg->sk), index, devlink) {
+ devlink_dump_for_each_instance_get(msg, state, devlink) {
+ int idx = 0;
+
mutex_lock(&devlink->linecards_lock);
list_for_each_entry(linecard, &devlink->linecard_list, list) {
if (idx < state->idx) {
if (err) {
mutex_unlock(&devlink->linecards_lock);
devlink_put(devlink);
+ state->idx = idx;
goto out;
}
idx++;
devlink_put(devlink);
}
out:
- state->idx = idx;
return msg->len;
}
{
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;
- 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;
+
devl_lock(devlink);
list_for_each_entry(devlink_sb, &devlink->sb_list, list) {
if (idx < state->idx) {
if (err) {
devl_unlock(devlink);
devlink_put(devlink);
+ state->idx = idx;
goto out;
}
idx++;
devlink_put(devlink);
}
out:
- state->idx = idx;
return msg->len;
}
struct netlink_callback *cb)
{
struct devlink_nl_dump_state *state = devlink_dump_state(cb);
- struct devlink_param_item *param_item;
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) {
+ struct devlink_param_item *param_item;
+ int idx = 0;
+
devl_lock(devlink);
list_for_each_entry(param_item, &devlink->param_list, list) {
if (idx < state->idx) {
} else if (err) {
devl_unlock(devlink);
devlink_put(devlink);
+ state->idx = idx;
goto out;
}
idx++;
if (err != -EMSGSIZE)
return err;
- state->idx = idx;
return msg->len;
}
struct netlink_callback *cb)
{
struct devlink_nl_dump_state *state = devlink_dump_state(cb);
- struct devlink_health_reporter *reporter;
- unsigned long index, port_index;
- struct devlink_port *port;
struct devlink *devlink;
- int idx = 0;
int err;
- devlinks_xa_for_each_registered_get(sock_net(msg->sk), index, devlink) {
+ devlink_dump_for_each_instance_get(msg, state, devlink) {
+ struct devlink_health_reporter *reporter;
+ struct devlink_port *port;
+ unsigned long port_index;
+ int idx = 0;
+
mutex_lock(&devlink->reporters_lock);
list_for_each_entry(reporter, &devlink->reporter_list,
list) {
if (err) {
mutex_unlock(&devlink->reporters_lock);
devlink_put(devlink);
+ state->idx = idx;
goto out;
}
idx++;
mutex_unlock(&port->reporters_lock);
devl_unlock(devlink);
devlink_put(devlink);
+ state->idx = idx;
goto out;
}
idx++;
devlink_put(devlink);
}
out:
- state->idx = idx;
return msg->len;
}
struct netlink_callback *cb)
{
struct devlink_nl_dump_state *state = devlink_dump_state(cb);
- struct devlink_trap_item *trap_item;
struct devlink *devlink;
- unsigned long index;
- int idx = 0;
int err;
- devlinks_xa_for_each_registered_get(sock_net(msg->sk), index, devlink) {
+ devlink_dump_for_each_instance_get(msg, state, devlink) {
+ struct devlink_trap_item *trap_item;
+ int idx = 0;
+
devl_lock(devlink);
list_for_each_entry(trap_item, &devlink->trap_list, list) {
if (idx < state->idx) {
if (err) {
devl_unlock(devlink);
devlink_put(devlink);
+ state->idx = idx;
goto out;
}
idx++;
devlink_put(devlink);
}
out:
- state->idx = idx;
return msg->len;
}
{
struct devlink_nl_dump_state *state = devlink_dump_state(cb);
enum devlink_command cmd = DEVLINK_CMD_TRAP_GROUP_NEW;
- struct devlink_trap_group_item *group_item;
u32 portid = NETLINK_CB(cb->skb).portid;
struct devlink *devlink;
- unsigned long index;
- int idx = 0;
int err;
- devlinks_xa_for_each_registered_get(sock_net(msg->sk), index, devlink) {
+ devlink_dump_for_each_instance_get(msg, state, devlink) {
+ struct devlink_trap_group_item *group_item;
+ int idx = 0;
+
devl_lock(devlink);
list_for_each_entry(group_item, &devlink->trap_group_list,
list) {
if (err) {
devl_unlock(devlink);
devlink_put(devlink);
+ state->idx = idx;
goto out;
}
idx++;
devlink_put(devlink);
}
out:
- state->idx = idx;
return msg->len;
}
{
struct devlink_nl_dump_state *state = devlink_dump_state(cb);
enum devlink_command cmd = DEVLINK_CMD_TRAP_POLICER_NEW;
- struct devlink_trap_policer_item *policer_item;
u32 portid = NETLINK_CB(cb->skb).portid;
struct devlink *devlink;
- unsigned long index;
- int idx = 0;
int err;
- devlinks_xa_for_each_registered_get(sock_net(msg->sk), index, devlink) {
+ devlink_dump_for_each_instance_get(msg, state, devlink) {
+ struct devlink_trap_policer_item *policer_item;
+ int idx = 0;
+
devl_lock(devlink);
list_for_each_entry(policer_item, &devlink->trap_policer_list,
list) {
if (err) {
devl_unlock(devlink);
devlink_put(devlink);
+ state->idx = idx;
goto out;
}
idx++;
devlink_put(devlink);
}
out:
- state->idx = idx;
return msg->len;
}