devlink: Remove check of always valid devlink pointer
authorLeon Romanovsky <leonro@nvidia.com>
Sat, 14 Aug 2021 09:57:27 +0000 (12:57 +0300)
committerDavid S. Miller <davem@davemloft.net>
Sat, 14 Aug 2021 12:59:10 +0000 (13:59 +0100)
Devlink objects are accessible only after they were registered and
have valid devlink_*->devlink pointers.

Remove that check and simplify respective fill functions as an outcome
of such change.

Signed-off-by: Leon Romanovsky <leonro@nvidia.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/core/devlink.c

index 9e74a95b3322d8798e996f458dd455a0a8ef10e4..c8a8eecad1c5228550db3a02772d1e9ef38713d9 100644 (file)
@@ -832,12 +832,11 @@ static int devlink_port_fn_hw_addr_fill(const struct devlink_ops *ops,
 }
 
 static int devlink_nl_rate_fill(struct sk_buff *msg,
-                               struct devlink *devlink,
                                struct devlink_rate *devlink_rate,
-                               enum devlink_command cmd, u32 portid,
-                               u32 seq, int flags,
-                               struct netlink_ext_ack *extack)
+                               enum devlink_command cmd, u32 portid, u32 seq,
+                               int flags, struct netlink_ext_ack *extack)
 {
+       struct devlink *devlink = devlink_rate->devlink;
        void *hdr;
 
        hdr = genlmsg_put(msg, portid, seq, &devlink_nl_family, flags, cmd);
@@ -959,12 +958,12 @@ out:
        return err;
 }
 
-static int devlink_nl_port_fill(struct sk_buff *msg, struct devlink *devlink,
+static int devlink_nl_port_fill(struct sk_buff *msg,
                                struct devlink_port *devlink_port,
-                               enum devlink_command cmd, u32 portid,
-                               u32 seq, int flags,
-                               struct netlink_ext_ack *extack)
+                               enum devlink_command cmd, u32 portid, u32 seq,
+                               int flags, struct netlink_ext_ack *extack)
 {
+       struct devlink *devlink = devlink_port->devlink;
        void *hdr;
 
        hdr = genlmsg_put(msg, portid, seq, &devlink_nl_family, flags, cmd);
@@ -1025,53 +1024,47 @@ nla_put_failure:
 static void devlink_port_notify(struct devlink_port *devlink_port,
                                enum devlink_command cmd)
 {
-       struct devlink *devlink = devlink_port->devlink;
        struct sk_buff *msg;
        int err;
 
-       if (!devlink_port->devlink)
-               return;
-
        WARN_ON(cmd != DEVLINK_CMD_PORT_NEW && cmd != DEVLINK_CMD_PORT_DEL);
 
        msg = nlmsg_new(NLMSG_DEFAULT_SIZE, GFP_KERNEL);
        if (!msg)
                return;
 
-       err = devlink_nl_port_fill(msg, devlink, devlink_port, cmd, 0, 0, 0,
-                                  NULL);
+       err = devlink_nl_port_fill(msg, devlink_port, cmd, 0, 0, 0, NULL);
        if (err) {
                nlmsg_free(msg);
                return;
        }
 
-       genlmsg_multicast_netns(&devlink_nl_family, devlink_net(devlink),
-                               msg, 0, DEVLINK_MCGRP_CONFIG, GFP_KERNEL);
+       genlmsg_multicast_netns(&devlink_nl_family,
+                               devlink_net(devlink_port->devlink), msg, 0,
+                               DEVLINK_MCGRP_CONFIG, GFP_KERNEL);
 }
 
 static void devlink_rate_notify(struct devlink_rate *devlink_rate,
                                enum devlink_command cmd)
 {
-       struct devlink *devlink = devlink_rate->devlink;
        struct sk_buff *msg;
        int err;
 
-       WARN_ON(cmd != DEVLINK_CMD_RATE_NEW &&
-               cmd != DEVLINK_CMD_RATE_DEL);
+       WARN_ON(cmd != DEVLINK_CMD_RATE_NEW && cmd != DEVLINK_CMD_RATE_DEL);
 
        msg = nlmsg_new(NLMSG_DEFAULT_SIZE, GFP_KERNEL);
        if (!msg)
                return;
 
-       err = devlink_nl_rate_fill(msg, devlink, devlink_rate,
-                                  cmd, 0, 0, 0, NULL);
+       err = devlink_nl_rate_fill(msg, devlink_rate, cmd, 0, 0, 0, NULL);
        if (err) {
                nlmsg_free(msg);
                return;
        }
 
-       genlmsg_multicast_netns(&devlink_nl_family, devlink_net(devlink),
-                               msg, 0, DEVLINK_MCGRP_CONFIG, GFP_KERNEL);
+       genlmsg_multicast_netns(&devlink_nl_family,
+                               devlink_net(devlink_rate->devlink), msg, 0,
+                               DEVLINK_MCGRP_CONFIG, GFP_KERNEL);
 }
 
 static int devlink_nl_cmd_rate_get_dumpit(struct sk_buff *msg,
@@ -1096,9 +1089,7 @@ static int devlink_nl_cmd_rate_get_dumpit(struct sk_buff *msg,
                                idx++;
                                continue;
                        }
-                       err = devlink_nl_rate_fill(msg, devlink,
-                                                  devlink_rate,
-                                                  cmd, id,
+                       err = devlink_nl_rate_fill(msg, devlink_rate, cmd, id,
                                                   cb->nlh->nlmsg_seq,
                                                   NLM_F_MULTI, NULL);
                        if (err) {
@@ -1122,7 +1113,6 @@ static int devlink_nl_cmd_rate_get_doit(struct sk_buff *skb,
                                        struct genl_info *info)
 {
        struct devlink_rate *devlink_rate = info->user_ptr[1];
-       struct devlink *devlink = devlink_rate->devlink;
        struct sk_buff *msg;
        int err;
 
@@ -1130,8 +1120,7 @@ static int devlink_nl_cmd_rate_get_doit(struct sk_buff *skb,
        if (!msg)
                return -ENOMEM;
 
-       err = devlink_nl_rate_fill(msg, devlink, devlink_rate,
-                                  DEVLINK_CMD_RATE_NEW,
+       err = devlink_nl_rate_fill(msg, devlink_rate, DEVLINK_CMD_RATE_NEW,
                                   info->snd_portid, info->snd_seq, 0,
                                   info->extack);
        if (err) {
@@ -1208,7 +1197,6 @@ static int devlink_nl_cmd_port_get_doit(struct sk_buff *skb,
                                        struct genl_info *info)
 {
        struct devlink_port *devlink_port = info->user_ptr[1];
-       struct devlink *devlink = devlink_port->devlink;
        struct sk_buff *msg;
        int err;
 
@@ -1216,8 +1204,7 @@ static int devlink_nl_cmd_port_get_doit(struct sk_buff *skb,
        if (!msg)
                return -ENOMEM;
 
-       err = devlink_nl_port_fill(msg, devlink, devlink_port,
-                                  DEVLINK_CMD_PORT_NEW,
+       err = devlink_nl_port_fill(msg, devlink_port, DEVLINK_CMD_PORT_NEW,
                                   info->snd_portid, info->snd_seq, 0,
                                   info->extack);
        if (err) {
@@ -1247,12 +1234,11 @@ static int devlink_nl_cmd_port_get_dumpit(struct sk_buff *msg,
                                idx++;
                                continue;
                        }
-                       err = devlink_nl_port_fill(msg, devlink, devlink_port,
+                       err = devlink_nl_port_fill(msg, devlink_port,
                                                   DEVLINK_CMD_NEW,
                                                   NETLINK_CB(cb->skb).portid,
                                                   cb->nlh->nlmsg_seq,
-                                                  NLM_F_MULTI,
-                                                  cb->extack);
+                                                  NLM_F_MULTI, cb->extack);
                        if (err) {
                                mutex_unlock(&devlink->lock);
                                goto out;
@@ -1488,9 +1474,8 @@ static int devlink_port_new_notifiy(struct devlink *devlink,
                goto out;
        }
 
-       err = devlink_nl_port_fill(msg, devlink, devlink_port,
-                                  DEVLINK_CMD_NEW, info->snd_portid,
-                                  info->snd_seq, 0, NULL);
+       err = devlink_nl_port_fill(msg, devlink_port, DEVLINK_CMD_NEW,
+                                  info->snd_portid, info->snd_seq, 0, NULL);
        if (err)
                goto out;
 
@@ -5071,7 +5056,6 @@ static void devlink_nl_region_notify(struct devlink_region *region,
                                     struct devlink_snapshot *snapshot,
                                     enum devlink_command cmd)
 {
-       struct devlink *devlink = region->devlink;
        struct sk_buff *msg;
 
        WARN_ON(cmd != DEVLINK_CMD_REGION_NEW && cmd != DEVLINK_CMD_REGION_DEL);
@@ -5080,8 +5064,9 @@ static void devlink_nl_region_notify(struct devlink_region *region,
        if (IS_ERR(msg))
                return;
 
-       genlmsg_multicast_netns(&devlink_nl_family, devlink_net(devlink),
-                               msg, 0, DEVLINK_MCGRP_CONFIG, GFP_KERNEL);
+       genlmsg_multicast_netns(&devlink_nl_family,
+                               devlink_net(region->devlink), msg, 0,
+                               DEVLINK_MCGRP_CONFIG, GFP_KERNEL);
 }
 
 /**
@@ -6765,11 +6750,11 @@ EXPORT_SYMBOL_GPL(devlink_port_health_reporter_destroy);
 
 static int
 devlink_nl_health_reporter_fill(struct sk_buff *msg,
-                               struct devlink *devlink,
                                struct devlink_health_reporter *reporter,
                                enum devlink_command cmd, u32 portid,
                                u32 seq, int flags)
 {
+       struct devlink *devlink = reporter->devlink;
        struct nlattr *reporter_attr;
        void *hdr;
 
@@ -6846,8 +6831,7 @@ static void devlink_recover_notify(struct devlink_health_reporter *reporter,
        if (!msg)
                return;
 
-       err = devlink_nl_health_reporter_fill(msg, reporter->devlink,
-                                             reporter, cmd, 0, 0, 0);
+       err = devlink_nl_health_reporter_fill(msg, reporter, cmd, 0, 0, 0);
        if (err) {
                nlmsg_free(msg);
                return;
@@ -7080,7 +7064,7 @@ static int devlink_nl_cmd_health_reporter_get_doit(struct sk_buff *skb,
                goto out;
        }
 
-       err = devlink_nl_health_reporter_fill(msg, devlink, reporter,
+       err = devlink_nl_health_reporter_fill(msg, reporter,
                                              DEVLINK_CMD_HEALTH_REPORTER_GET,
                                              info->snd_portid, info->snd_seq,
                                              0);
@@ -7117,12 +7101,10 @@ devlink_nl_cmd_health_reporter_get_dumpit(struct sk_buff *msg,
                                idx++;
                                continue;
                        }
-                       err = devlink_nl_health_reporter_fill(msg, devlink,
-                                                             reporter,
-                                                             DEVLINK_CMD_HEALTH_REPORTER_GET,
-                                                             NETLINK_CB(cb->skb).portid,
-                                                             cb->nlh->nlmsg_seq,
-                                                             NLM_F_MULTI);
+                       err = devlink_nl_health_reporter_fill(
+                               msg, reporter, DEVLINK_CMD_HEALTH_REPORTER_GET,
+                               NETLINK_CB(cb->skb).portid, cb->nlh->nlmsg_seq,
+                               NLM_F_MULTI);
                        if (err) {
                                mutex_unlock(&devlink->reporters_lock);
                                goto out;
@@ -7143,11 +7125,11 @@ devlink_nl_cmd_health_reporter_get_dumpit(struct sk_buff *msg,
                                        idx++;
                                        continue;
                                }
-                               err = devlink_nl_health_reporter_fill(msg, devlink, reporter,
-                                                                     DEVLINK_CMD_HEALTH_REPORTER_GET,
-                                                                     NETLINK_CB(cb->skb).portid,
-                                                                     cb->nlh->nlmsg_seq,
-                                                                     NLM_F_MULTI);
+                               err = devlink_nl_health_reporter_fill(
+                                       msg, reporter,
+                                       DEVLINK_CMD_HEALTH_REPORTER_GET,
+                                       NETLINK_CB(cb->skb).portid,
+                                       cb->nlh->nlmsg_seq, NLM_F_MULTI);
                                if (err) {
                                        mutex_unlock(&port->reporters_lock);
                                        mutex_unlock(&devlink->lock);