]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
RDMA/nldev: Add dellink function pointer
authorZhu Yanjun <yanjun.zhu@linux.dev>
Fri, 13 Mar 2026 02:30:55 +0000 (19:30 -0700)
committerLeon Romanovsky <leon@kernel.org>
Mon, 30 Mar 2026 17:47:43 +0000 (13:47 -0400)
Add a dellink function pointer to rdma_link_ops to
allow drivers to clean up resources created during
newlink.

Reviewed-by: David Ahern <dsahern@kernel.org>
Signed-off-by: Zhu Yanjun <yanjun.zhu@linux.dev>
Link: https://patch.msgid.link/20260313023058.13020-2-yanjun.zhu@linux.dev
Signed-off-by: Leon Romanovsky <leon@kernel.org>
drivers/infiniband/core/nldev.c
include/rdma/rdma_netlink.h

index cb18699633e83123d87643742b815f5235332c58..96c745d5bac45092c0099b2fd45143ebcd9537ab 100644 (file)
@@ -1839,6 +1839,18 @@ static int nldev_dellink(struct sk_buff *skb, struct nlmsghdr *nlh,
                return -EINVAL;
        }
 
+       /*
+        * This path is triggered by the 'rdma link delete' administrative command.
+        * For Soft-RoCE (RXE), we ensure that transport sockets are closed here.
+        * Note: iWARP driver does not implement .dellink, so this logic is
+        * implicitly scoped to the driver supporting dynamic link deletion like RXE.
+        */
+       if (device->link_ops && device->link_ops->dellink) {
+               err = device->link_ops->dellink(device);
+               if (err)
+                       return err;
+       }
+
        ib_unregister_device_and_put(device);
        return 0;
 }
index 326deaf56d5db455d36bf536cb199ab2627405d2..2fd1358ea57d910cd652b401549c67a721a4f6f0 100644 (file)
@@ -5,6 +5,7 @@
 
 #include <linux/netlink.h>
 #include <uapi/rdma/rdma_netlink.h>
+#include <rdma/ib_verbs.h>
 
 struct ib_device;
 
@@ -126,6 +127,7 @@ struct rdma_link_ops {
        struct list_head list;
        const char *type;
        int (*newlink)(const char *ibdev_name, struct net_device *ndev);
+       int (*dellink)(struct ib_device *dev);
 };
 
 void rdma_link_register(struct rdma_link_ops *ops);