From: Leon Romanovsky <leo...@mellanox.com>

Reuse standard macros to cancel the netlink message
in case of error.

Signed-off-by: Leon Romanovsky <leo...@mellanox.com>
Reviewed-by: Steve Wise <sw...@opengridcomputing.com>
---
 drivers/infiniband/core/netlink.c | 31 +++++++++----------------------
 1 file changed, 9 insertions(+), 22 deletions(-)

diff --git a/drivers/infiniband/core/netlink.c 
b/drivers/infiniband/core/netlink.c
index f0d482009c69..96057e722123 100644
--- a/drivers/infiniband/core/netlink.c
+++ b/drivers/infiniband/core/netlink.c
@@ -126,36 +126,23 @@ 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);
-       if (!*nlh)
-               goto out_nlmsg_trim;
-       (*nlh)->nlmsg_len = skb_tail_pointer(skb) - prev_tail;
+       *nlh = nlmsg_put(skb, 0, seq, RDMA_NL_GET_TYPE(client, op), len, flags);
+       if (!*nlh) {
+               nlmsg_cancel(skb, *nlh);
+               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);
 
-- 
2.13.1

Reply via email to