Message ID | 20230623095749.485873-4-yanjun.zhu@intel.com (mailing list archive) |
---|---|
State | Superseded |
Headers | show |
Series | Fix the problem that rxe can not work in net namespace | expand |
> -----Original Message----- > From: Zhu Yanjun <yanjun.zhu@intel.com> > Sent: Friday, 23 June 2023 11:58 > To: zyjzyj2000@gmail.com; jgg@ziepe.ca; leon@kernel.org; linux- > rdma@vger.kernel.org; parav@nvidia.com; lehrer@gmail.com; > rpearsonhpe@gmail.com > Cc: Zhu Yanjun <yanjun.zhu@linux.dev>; Rain River > <rain.1986.08.12@gmail.com> > Subject: [EXTERNAL] [PATCH v6 3/8] RDMA/nldev: Add dellink function pointer > > From: Zhu Yanjun <yanjun.zhu@linux.dev> > > 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@gmail.com> > Signed-off-by: Zhu Yanjun <yanjun.zhu@linux.dev> > --- > 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
在 2023/6/23 18:11, Bernard Metzler 写道: > > >> -----Original Message----- >> From: Zhu Yanjun <yanjun.zhu@intel.com> >> Sent: Friday, 23 June 2023 11:58 >> To: zyjzyj2000@gmail.com; jgg@ziepe.ca; leon@kernel.org; linux- >> rdma@vger.kernel.org; parav@nvidia.com; lehrer@gmail.com; >> rpearsonhpe@gmail.com >> Cc: Zhu Yanjun <yanjun.zhu@linux.dev>; Rain River >> <rain.1986.08.12@gmail.com> >> Subject: [EXTERNAL] [PATCH v6 3/8] RDMA/nldev: Add dellink function pointer >> >> From: Zhu Yanjun <yanjun.zhu@linux.dev> >> >> 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@gmail.com> >> Signed-off-by: Zhu Yanjun <yanjun.zhu@linux.dev> >> --- >> 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 >
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); + 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);