diff mbox series

[v6,3/8] RDMA/nldev: Add dellink function pointer

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

Commit Message

Zhu Yanjun June 23, 2023, 9:57 a.m. UTC
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(+)

Comments

Bernard Metzler June 23, 2023, 10:11 a.m. UTC | #1
> -----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
Zhu Yanjun June 23, 2023, 1:55 p.m. UTC | #2
在 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 mbox series

Patch

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);