|
@@ -126,36 +126,21 @@ EXPORT_SYMBOL(rdma_nl_unregister);
|
|
|
void *ibnl_put_msg(struct sk_buff *skb, struct nlmsghdr **nlh, int seq,
|
|
|
int len, int client, int op, int flags)
|
|
|
{
|
|
|
- unsigned char *prev_tail;
|
|
|
-
|
|
|
- prev_tail = skb_tail_pointer(skb);
|
|
|
- *nlh = nlmsg_put(skb, 0, seq, RDMA_NL_GET_TYPE(client, op),
|
|
|
- len, flags);
|
|
|
+ *nlh = nlmsg_put(skb, 0, seq, RDMA_NL_GET_TYPE(client, op), len, flags);
|
|
|
if (!*nlh)
|
|
|
- goto out_nlmsg_trim;
|
|
|
- (*nlh)->nlmsg_len = skb_tail_pointer(skb) - prev_tail;
|
|
|
+ return NULL;
|
|
|
return nlmsg_data(*nlh);
|
|
|
-
|
|
|
-out_nlmsg_trim:
|
|
|
- nlmsg_trim(skb, prev_tail);
|
|
|
- return NULL;
|
|
|
}
|
|
|
EXPORT_SYMBOL(ibnl_put_msg);
|
|
|
|
|
|
int ibnl_put_attr(struct sk_buff *skb, struct nlmsghdr *nlh,
|
|
|
int len, void *data, int type)
|
|
|
{
|
|
|
- unsigned char *prev_tail;
|
|
|
-
|
|
|
- prev_tail = skb_tail_pointer(skb);
|
|
|
- if (nla_put(skb, type, len, data))
|
|
|
- goto nla_put_failure;
|
|
|
- nlh->nlmsg_len += skb_tail_pointer(skb) - prev_tail;
|
|
|
+ if (nla_put(skb, type, len, data)) {
|
|
|
+ nlmsg_cancel(skb, nlh);
|
|
|
+ return -EMSGSIZE;
|
|
|
+ }
|
|
|
return 0;
|
|
|
-
|
|
|
-nla_put_failure:
|
|
|
- nlmsg_trim(skb, prev_tail - nlh->nlmsg_len);
|
|
|
- return -EMSGSIZE;
|
|
|
}
|
|
|
EXPORT_SYMBOL(ibnl_put_attr);
|
|
|
|