]> asedeno.scripts.mit.edu Git - linux.git/commitdiff
RDMA/core: Change system parameters callback from dumpit to doit
authorParav Pandit <parav@mellanox.com>
Mon, 13 May 2019 05:26:57 +0000 (08:26 +0300)
committerJason Gunthorpe <jgg@mellanox.com>
Tue, 14 May 2019 01:16:48 +0000 (22:16 -0300)
.dumpit() callback is used for returning same type of data in the loop,
e.g. loop over ports, resources, devices.

However system parameters are general and standalone for whole
subsystem. It means that getting system parameters should be doit
callback.

Fixes: cb7e0e130503 ("RDMA/core: Add interface to read device namespace sharing mode")
Signed-off-by: Parav Pandit <parav@mellanox.com>
Signed-off-by: Leon Romanovsky <leonro@mellanox.com>
Signed-off-by: Jason Gunthorpe <jgg@mellanox.com>
drivers/infiniband/core/nldev.c
include/uapi/rdma/rdma_netlink.h

index bced945a456d3eba62af3e339e3ebd6d2ce1ff2f..cbd712f5f8b2d46ac18513b63e8df66ebcc61be4 100644 (file)
@@ -1346,32 +1346,35 @@ static int nldev_dellink(struct sk_buff *skb, struct nlmsghdr *nlh,
        return 0;
 }
 
-static int nldev_get_sys_get_dumpit(struct sk_buff *skb,
-                                   struct netlink_callback *cb)
+static int nldev_sys_get_doit(struct sk_buff *skb, struct nlmsghdr *nlh,
+                             struct netlink_ext_ack *extack)
 {
        struct nlattr *tb[RDMA_NLDEV_ATTR_MAX];
-       struct nlmsghdr *nlh;
+       struct sk_buff *msg;
        int err;
 
-       err = nlmsg_parse(cb->nlh, 0, tb, RDMA_NLDEV_ATTR_MAX - 1,
-                         nldev_policy, NULL);
+       err = nlmsg_parse(nlh, 0, tb, RDMA_NLDEV_ATTR_MAX - 1,
+                         nldev_policy, extack);
        if (err)
                return err;
 
-       nlh = nlmsg_put(skb, NETLINK_CB(cb->skb).portid, cb->nlh->nlmsg_seq,
+       msg = nlmsg_new(NLMSG_DEFAULT_SIZE, GFP_KERNEL);
+       if (!msg)
+               return -ENOMEM;
+
+       nlh = nlmsg_put(msg, NETLINK_CB(skb).portid, nlh->nlmsg_seq,
                        RDMA_NL_GET_TYPE(RDMA_NL_NLDEV,
                                         RDMA_NLDEV_CMD_SYS_GET),
                        0, 0);
 
-       err = nla_put_u8(skb, RDMA_NLDEV_SYS_ATTR_NETNS_MODE,
+       err = nla_put_u8(msg, RDMA_NLDEV_SYS_ATTR_NETNS_MODE,
                         (u8)ib_devices_shared_netns);
        if (err) {
-               nlmsg_cancel(skb, nlh);
+               nlmsg_free(msg);
                return err;
        }
-
-       nlmsg_end(skb, nlh);
-       return skb->len;
+       nlmsg_end(msg, nlh);
+       return rdma_nl_unicast(msg, NETLINK_CB(skb).portid);
 }
 
 static int nldev_set_sys_set_doit(struct sk_buff *skb, struct nlmsghdr *nlh,
@@ -1441,7 +1444,7 @@ static const struct rdma_nl_cbs nldev_cb_table[RDMA_NLDEV_NUM_OPS] = {
                .dump = nldev_res_get_pd_dumpit,
        },
        [RDMA_NLDEV_CMD_SYS_GET] = {
-               .dump = nldev_get_sys_get_dumpit,
+               .doit = nldev_sys_get_doit,
        },
        [RDMA_NLDEV_CMD_SYS_SET] = {
                .doit = nldev_set_sys_set_doit,
index 42a8bdc40a14e6d984e570926074019007f8a7a8..41db51367efafb3d2abb5103e59ddc04b3d61e99 100644 (file)
@@ -250,7 +250,7 @@ enum rdma_nldev_command {
 
        RDMA_NLDEV_CMD_PORT_GET, /* can dump */
 
-       RDMA_NLDEV_CMD_SYS_GET, /* can dump */
+       RDMA_NLDEV_CMD_SYS_GET,
        RDMA_NLDEV_CMD_SYS_SET,
 
        /* 8 is free to use */