On Mon, Dec 12, 2022 at 08:51:19AM -0400, Jason Gunthorpe wrote: > On Mon, Dec 12, 2022 at 11:22:40AM +0200, Kamal Heib wrote: > > Make sure that the requested net_device is not already associated with > > an ib_device before trying to create a new ib_device that will be > > associated with the same net_device, this is needed to avoid creating > > siw and rxe devices that will be associated with the same net_device. > > > > Fixes: 3856ec4b93c9 ("RDMA/core: Add RDMA_NLDEV_CMD_NEWLINK/DELLINK support") > > Signed-off-by: Kamal Heib <kheib@xxxxxxxxxx> > > --- > > drivers/infiniband/core/nldev.c | 7 +++++++ > > 1 file changed, 7 insertions(+) > > > > diff --git a/drivers/infiniband/core/nldev.c b/drivers/infiniband/core/nldev.c > > index a981ac2f0975..376c9e158556 100644 > > --- a/drivers/infiniband/core/nldev.c > > +++ b/drivers/infiniband/core/nldev.c > > @@ -1696,6 +1696,7 @@ static int nldev_newlink(struct sk_buff *skb, struct nlmsghdr *nlh, > > const struct rdma_link_ops *ops; > > char ndev_name[IFNAMSIZ]; > > struct net_device *ndev; > > + struct ib_device *ibdev; > > char type[IFNAMSIZ]; > > int err; > > > > @@ -1718,6 +1719,12 @@ static int nldev_newlink(struct sk_buff *skb, struct nlmsghdr *nlh, > > if (!ndev) > > return -ENODEV; > > > > + ibdev = ib_device_get_by_netdev(ndev, RDMA_DRIVER_UNKNOWN); > > + if (ibdev) { > > + ib_device_put(ibdev); > > + return -EINVAL; > > + } > > This is racy It can be seen as best effort. > > What is wrong with creating two IB devices on top of the same net device? Any place where we need to convert from ndev to ib will return random answer. > > Jason