net: devlink: make the devlink_ops::info_get() callback optional
authorVincent Mailhol <mailhol.vincent@wanadoo.fr>
Tue, 29 Nov 2022 09:51:39 +0000 (18:51 +0900)
committerJakub Kicinski <kuba@kernel.org>
Thu, 1 Dec 2022 05:49:39 +0000 (21:49 -0800)
Some drivers only reported the driver name in their
devlink_ops::info_get() callback. Now that the core provides this
information, the callback became empty. For such drivers, just
removing the callback would prevent the core from executing
devlink_nl_info_fill() meaning that "devlink dev info" would not
return anything.

Make the callback function optional by executing
devlink_nl_info_fill() even if devlink_ops::info_get() is NULL.

N.B.: the drivers with devlink support which previously did not
implement devlink_ops::info_get() will now also be able to report
the driver name.

Signed-off-by: Vincent Mailhol <mailhol.vincent@wanadoo.fr>
Reviewed-by: Jacob Keller <jacob.e.keller@intel.com>
Reviewed-by: Jiri Pirko <jiri@nvidia.com>
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
net/core/devlink.c

index 60eb0f46520f816e1a95a1c3bb878c2ed02b5931..fca3ebee97b042f272c1574d87f75d3b123c0588 100644 (file)
@@ -6847,9 +6847,11 @@ devlink_nl_info_fill(struct sk_buff *msg, struct devlink *devlink,
                goto err_cancel_msg;
 
        req.msg = msg;
-       err = devlink->ops->info_get(devlink, &req, extack);
-       if (err)
-               goto err_cancel_msg;
+       if (devlink->ops->info_get) {
+               err = devlink->ops->info_get(devlink, &req, extack);
+               if (err)
+                       goto err_cancel_msg;
+       }
 
        err = devlink_nl_driver_info_get(dev->driver, &req);
        if (err)
@@ -6870,9 +6872,6 @@ static int devlink_nl_cmd_info_get_doit(struct sk_buff *skb,
        struct sk_buff *msg;
        int err;
 
-       if (!devlink->ops->info_get)
-               return -EOPNOTSUPP;
-
        msg = nlmsg_new(NLMSG_DEFAULT_SIZE, GFP_KERNEL);
        if (!msg)
                return -ENOMEM;
@@ -6898,7 +6897,7 @@ static int devlink_nl_cmd_info_get_dumpit(struct sk_buff *msg,
        int err = 0;
 
        devlinks_xa_for_each_registered_get(sock_net(msg->sk), index, devlink) {
-               if (idx < start || !devlink->ops->info_get)
+               if (idx < start)
                        goto inc;
 
                devl_lock(devlink);