devlink: remove devlink_dump_for_each_instance_get() helper
authorJiri Pirko <jiri@nvidia.com>
Wed, 18 Jan 2023 15:21:14 +0000 (16:21 +0100)
committerJakub Kicinski <kuba@kernel.org>
Fri, 20 Jan 2023 03:08:38 +0000 (19:08 -0800)
devlink_dump_for_each_instance_get() is currently called from
a single place in netlink.c. As there is no need to use
this helper anywhere else in the future, remove it and
call devlinks_xa_find_get() directly from while loop
in devlink_nl_instance_iter_dump(). Also remove redundant
idx clear on loop end as it is already done
in devlink_nl_instance_iter_dump().

Signed-off-by: Jiri Pirko <jiri@nvidia.com>
Reviewed-by: Jacob Keller <jacob.e.keller@intel.com>
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
net/devlink/devl_internal.h
net/devlink/netlink.c

index 10975e4..75752f8 100644 (file)
@@ -123,17 +123,6 @@ struct devlink_gen_cmd {
                        struct netlink_callback *cb);
 };
 
-/* Iterate over registered devlink instances for devlink dump.
- * devlink_put() needs to be called for each iterated devlink pointer
- * in loop body in order to release the reference.
- * Note: this is NOT a generic iterator, it makes assumptions about the use
- *      of @state and can only be used once per dumpit implementation.
- */
-#define devlink_dump_for_each_instance_get(msg, state, devlink)                \
-       for (; (devlink = devlinks_xa_find_get(sock_net(msg->sk),       \
-                                              &state->instance));      \
-            state->instance++, state->idx = 0)
-
 extern const struct genl_small_ops devlink_nl_ops[56];
 
 struct devlink *
index d4539c1..3f44633 100644 (file)
@@ -207,7 +207,8 @@ int devlink_nl_instance_iter_dump(struct sk_buff *msg,
 
        cmd = devl_gen_cmds[info->op.cmd];
 
-       devlink_dump_for_each_instance_get(msg, state, devlink) {
+       while ((devlink = devlinks_xa_find_get(sock_net(msg->sk),
+                                              &state->instance))) {
                devl_lock(devlink);
 
                if (devl_is_registered(devlink))
@@ -221,6 +222,8 @@ int devlink_nl_instance_iter_dump(struct sk_buff *msg,
                if (err)
                        break;
 
+               state->instance++;
+
                /* restart sub-object walk for the next instance */
                state->idx = 0;
        }