> -----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. > + 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