在 2023/6/23 18:11, Bernard Metzler 写道:
-----Original Message-----
From: Zhu Yanjun <yanjun.zhu@xxxxxxxxx>
Sent: Friday, 23 June 2023 11:58
To: zyjzyj2000@xxxxxxxxx; jgg@xxxxxxxx; leon@xxxxxxxxxx; linux-
rdma@xxxxxxxxxxxxxxx; parav@xxxxxxxxxx; lehrer@xxxxxxxxx;
rpearsonhpe@xxxxxxxxx
Cc: Zhu Yanjun <yanjun.zhu@xxxxxxxxx>; Rain River
<rain.1986.08.12@xxxxxxxxx>
Subject: [EXTERNAL] [PATCH v6 3/8] RDMA/nldev: Add dellink function pointer
From: Zhu Yanjun <yanjun.zhu@xxxxxxxxx>
The newlink function pointer is added. And the sock listening on port 4791
is added in the newlink function. So the dellink function is needed to
remove the sock.
Tested-by: Rain River <rain.1986.08.12@xxxxxxxxx>
Signed-off-by: Zhu Yanjun <yanjun.zhu@xxxxxxxxx>
---
drivers/infiniband/core/nldev.c | 6 ++++++
include/rdma/rdma_netlink.h | 2 ++
2 files changed, 8 insertions(+)
diff --git a/drivers/infiniband/core/nldev.c
b/drivers/infiniband/core/nldev.c
index d5d3e4f0de77..97a62685ed5b 100644
--- a/drivers/infiniband/core/nldev.c
+++ b/drivers/infiniband/core/nldev.c
@@ -1758,6 +1758,12 @@ static int nldev_dellink(struct sk_buff *skb, struct
nlmsghdr *nlh,
return -EINVAL;
}
+ if (device->link_ops) {
+ err = device->link_ops->dellink(device);
That assumes delink() being populated by all drivers
having link_ops in place. It crashes for drivers
like siw.
Good catch. Thanks, I will fix it.
Zhu Yanjun
+ 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 c2a79aeee113..bf9df004061f 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>
enum {
RDMA_NLDEV_ATTR_EMPTY_STRING = 1,
@@ -114,6 +115,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.27.0