aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/infiniband/core/netlink.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/infiniband/core/netlink.c')
-rw-r--r--drivers/infiniband/core/netlink.c32
1 files changed, 10 insertions, 22 deletions
diff --git a/drivers/infiniband/core/netlink.c b/drivers/infiniband/core/netlink.c
index da06abde9e0..9227f4acd79 100644
--- a/drivers/infiniband/core/netlink.c
+++ b/drivers/infiniband/core/netlink.c
@@ -32,7 +32,6 @@
32 32
33#define pr_fmt(fmt) "%s:%s: " fmt, KBUILD_MODNAME, __func__ 33#define pr_fmt(fmt) "%s:%s: " fmt, KBUILD_MODNAME, __func__
34 34
35#include <linux/export.h>
36#include <net/netlink.h> 35#include <net/netlink.h>
37#include <net/net_namespace.h> 36#include <net/net_namespace.h>
38#include <net/sock.h> 37#include <net/sock.h>
@@ -108,14 +107,12 @@ void *ibnl_put_msg(struct sk_buff *skb, struct nlmsghdr **nlh, int seq,
108 unsigned char *prev_tail; 107 unsigned char *prev_tail;
109 108
110 prev_tail = skb_tail_pointer(skb); 109 prev_tail = skb_tail_pointer(skb);
111 *nlh = nlmsg_put(skb, 0, seq, RDMA_NL_GET_TYPE(client, op), 110 *nlh = NLMSG_NEW(skb, 0, seq, RDMA_NL_GET_TYPE(client, op),
112 len, NLM_F_MULTI); 111 len, NLM_F_MULTI);
113 if (!*nlh)
114 goto out_nlmsg_trim;
115 (*nlh)->nlmsg_len = skb_tail_pointer(skb) - prev_tail; 112 (*nlh)->nlmsg_len = skb_tail_pointer(skb) - prev_tail;
116 return nlmsg_data(*nlh); 113 return NLMSG_DATA(*nlh);
117 114
118out_nlmsg_trim: 115nlmsg_failure:
119 nlmsg_trim(skb, prev_tail); 116 nlmsg_trim(skb, prev_tail);
120 return NULL; 117 return NULL;
121} 118}
@@ -127,8 +124,7 @@ int ibnl_put_attr(struct sk_buff *skb, struct nlmsghdr *nlh,
127 unsigned char *prev_tail; 124 unsigned char *prev_tail;
128 125
129 prev_tail = skb_tail_pointer(skb); 126 prev_tail = skb_tail_pointer(skb);
130 if (nla_put(skb, type, len, data)) 127 NLA_PUT(skb, type, len, data);
131 goto nla_put_failure;
132 nlh->nlmsg_len += skb_tail_pointer(skb) - prev_tail; 128 nlh->nlmsg_len += skb_tail_pointer(skb) - prev_tail;
133 return 0; 129 return 0;
134 130
@@ -150,14 +146,9 @@ static int ibnl_rcv_msg(struct sk_buff *skb, struct nlmsghdr *nlh)
150 if (op < 0 || op >= client->nops || 146 if (op < 0 || op >= client->nops ||
151 !client->cb_table[RDMA_NL_GET_OP(op)].dump) 147 !client->cb_table[RDMA_NL_GET_OP(op)].dump)
152 return -EINVAL; 148 return -EINVAL;
153 149 return netlink_dump_start(nls, skb, nlh,
154 { 150 client->cb_table[op].dump,
155 struct netlink_dump_control c = { 151 NULL, 0);
156 .dump = client->cb_table[op].dump,
157 .module = client->cb_table[op].module,
158 };
159 return netlink_dump_start(nls, skb, nlh, &c);
160 }
161 } 152 }
162 } 153 }
163 154
@@ -174,11 +165,8 @@ static void ibnl_rcv(struct sk_buff *skb)
174 165
175int __init ibnl_init(void) 166int __init ibnl_init(void)
176{ 167{
177 struct netlink_kernel_cfg cfg = { 168 nls = netlink_kernel_create(&init_net, NETLINK_RDMA, 0, ibnl_rcv,
178 .input = ibnl_rcv, 169 NULL, THIS_MODULE);
179 };
180
181 nls = netlink_kernel_create(&init_net, NETLINK_RDMA, &cfg);
182 if (!nls) { 170 if (!nls) {
183 pr_warn("Failed to create netlink socket\n"); 171 pr_warn("Failed to create netlink socket\n");
184 return -ENOMEM; 172 return -ENOMEM;