On 3/11/26 10:09 PM, Zhu Yanjun wrote:
在 2026/3/11 20:59, Zhu Yanjun 写道:
在 2026/3/11 19:04, David Ahern 写道:
On 3/11/26 4:01 PM, Yanjun.Zhu wrote:
Got it. The commit log explains how the netdev_notifier mechanism is
netdev notifiers are the NETDEV_UNREGISTER and friends. This dellink
handler is not related to that; this is an IB stack thing when the rxe
link is removed.
used to clean up the related resources.
In the source code, additional comments have been added to explain how
the dellink operation for rxe is triggered. For iWARP, this change
should not make any difference because iWARP does not implement the
dellink function.
The commit is shown below. Please take a look and share your comments.
If you agree, I will send out the latest commits out very soon.
From c05038dcdf69c5985837736a8926ba76d9f3e8e4 Mon Sep 17 00:00:00
2001
From: Zhu Yanjun <[email protected]>
Date: Fri, 23 Sep 2022 16:52:45 +0000
Subject: [PATCH 1/1] RDMA/nldev: Add dellink function pointer
The newlink function pointer was previously added to support
dynamic RDMA link creation. In the RXE driver, this path creates
a transport socket listening on port 4791. Consequently, a dellink
function pointer is required to ensure these sockets are properly
closed when a user administratively removes a link via rdma link
delete <dev>.
Furthermore, RXE does not rely solely on this nldev path for resource
management. It also monitors the underlying net_device state via a
registered netdev_notifier. The rxe_net_event callback serves as a
fallback mechanism to ensure that transport sockets are forcibly
closed
and all resources are released even if dellink is not explicitly
called
(e.g., if the parent NIC interface is removed or the driver is
forcefully
unloaded).
IMHO, this explanation belongs in the patch that implements dellink
for rxe.
This patch adds the handler to allow link implementations to cleanup
any
resources created by newklink as needed.
Thanks for the feedback. I agree that the detailed explanation of
RXE's resource management (like sockets and notifiers) is more
appropriate for the subsequent patch that implements the RXE dellink
handler.
I will update the commit message for this patch to focus solely on
the addition of the dellink infrastructure in the RDMA core, and move
the RXE-specific details to the next patch in the series.
Hi,
I would like to use the following as the commit log. It seems simple
and direct.
"
Add a dellink function pointer to rdma_link_ops to allow drivers to
clean up resources created during newlink.
"
Hi,
The final commit is as below. I will send the latest commit out very soon.
From 8fda79a3b0c3f6df6ba0fc70040ce09e4028a2a3 Mon Sep 17 00:00:00 2001
From: Zhu Yanjun <[email protected]>
Date: Fri, 23 Sep 2022 16:52:45 +0000
Subject: [PATCH 1/1] RDMA/nldev: Add dellink function pointer
Add a dellink function pointer to rdma_link_ops to
allow drivers to clean up resources created during
newlink.
Reviewed-by: David Ahern <[email protected]>
Signed-off-by: Zhu Yanjun <[email protected]>
---
drivers/infiniband/core/nldev.c | 12 ++++++++++++
include/rdma/rdma_netlink.h | 2 ++
2 files changed, 14 insertions(+)
diff --git a/drivers/infiniband/core/nldev.c
b/drivers/infiniband/core/nldev.c
index 2220a2dfab24..dbf2eea078e9 100644
--- a/drivers/infiniband/core/nldev.c
+++ b/drivers/infiniband/core/nldev.c
@@ -1824,6 +1824,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;
}
diff --git a/include/rdma/rdma_netlink.h b/include/rdma/rdma_netlink.h
index 326deaf56d5d..2fd1358ea57d 100644
--- a/include/rdma/rdma_netlink.h
+++ b/include/rdma/rdma_netlink.h
@@ -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);
--
2.53.0
Zhu Yanjun
Thanks,
Zhu Yanjun
Zhu Yanjun