linux-api.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* Re: [PATCH 2/4] net/smc: Add netlink net namespace support
       [not found] ` <20211228130611.19124-3-tonylu@linux.alibaba.com>
@ 2022-01-31  0:24   ` Dmitry V. Levin
  2022-01-31 13:49     ` Karsten Graul
  0 siblings, 1 reply; 5+ messages in thread
From: Dmitry V. Levin @ 2022-01-31  0:24 UTC (permalink / raw)
  To: Tony Lu; +Cc: kgraul, kuba, davem, netdev, linux-s390, linux-rdma, linux-api

On Tue, Dec 28, 2021 at 09:06:10PM +0800, Tony Lu wrote:
> This adds net namespace ID to diag of linkgroup, helps us to distinguish
> different namespaces, and net_cookie is unique in the whole system.
> 
> Signed-off-by: Tony Lu <tonylu@linux.alibaba.com>
> ---
>  include/uapi/linux/smc.h      |  2 ++
>  include/uapi/linux/smc_diag.h | 11 ++++++-----
>  net/smc/smc_core.c            |  3 +++
>  net/smc/smc_diag.c            | 16 +++++++++-------
>  4 files changed, 20 insertions(+), 12 deletions(-)
> 
> diff --git a/include/uapi/linux/smc.h b/include/uapi/linux/smc.h
> index 20f33b27787f..6c2874fd2c00 100644
> --- a/include/uapi/linux/smc.h
> +++ b/include/uapi/linux/smc.h
> @@ -119,6 +119,8 @@ enum {
>  	SMC_NLA_LGR_R_CONNS_NUM,	/* u32 */
>  	SMC_NLA_LGR_R_V2_COMMON,	/* nest */
>  	SMC_NLA_LGR_R_V2,		/* nest */
> +	SMC_NLA_LGR_R_NET_COOKIE,	/* u64 */
> +	SMC_NLA_LGR_R_PAD,		/* flag */
>  	__SMC_NLA_LGR_R_MAX,
>  	SMC_NLA_LGR_R_MAX = __SMC_NLA_LGR_R_MAX - 1
>  };
> diff --git a/include/uapi/linux/smc_diag.h b/include/uapi/linux/smc_diag.h
> index 8cb3a6fef553..c7008d87f1a4 100644
> --- a/include/uapi/linux/smc_diag.h
> +++ b/include/uapi/linux/smc_diag.h
> @@ -84,11 +84,12 @@ struct smc_diag_conninfo {
>  /* SMC_DIAG_LINKINFO */
>  
>  struct smc_diag_linkinfo {
> -	__u8 link_id;			/* link identifier */
> -	__u8 ibname[IB_DEVICE_NAME_MAX]; /* name of the RDMA device */
> -	__u8 ibport;			/* RDMA device port number */
> -	__u8 gid[40];			/* local GID */
> -	__u8 peer_gid[40];		/* peer GID */
> +	__u8		link_id;		    /* link identifier */
> +	__u8		ibname[IB_DEVICE_NAME_MAX]; /* name of the RDMA device */
> +	__u8		ibport;			    /* RDMA device port number */
> +	__u8		gid[40];		    /* local GID */
> +	__u8		peer_gid[40];		    /* peer GID */
> +	__aligned_u64	net_cookie;                 /* RDMA device net namespace */
>  };
>  
>  struct smc_diag_lgrinfo {

I'm sorry but this is an ABI regression.

Since struct smc_diag_lgrinfo contains an object of type "struct smc_diag_linkinfo",
offset of all subsequent members of struct smc_diag_lgrinfo is changed by
this patch.

As result, applications compiled with the old version of struct smc_diag_linkinfo
will receive garbage in struct smc_diag_lgrinfo.role if the kernel implements
this new version of struct smc_diag_linkinfo.


-- 
ldv

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH 2/4] net/smc: Add netlink net namespace support
  2022-01-31  0:24   ` [PATCH 2/4] net/smc: Add netlink net namespace support Dmitry V. Levin
@ 2022-01-31 13:49     ` Karsten Graul
  2022-02-02  3:09       ` [PATCH] Partially revert "net/smc: Add netlink net namespace support" Dmitry V. Levin
  0 siblings, 1 reply; 5+ messages in thread
From: Karsten Graul @ 2022-01-31 13:49 UTC (permalink / raw)
  To: Dmitry V. Levin, Tony Lu
  Cc: kuba, davem, netdev, linux-s390, linux-rdma, linux-api

On 31/01/2022 01:24, Dmitry V. Levin wrote:
> On Tue, Dec 28, 2021 at 09:06:10PM +0800, Tony Lu wrote:
>> This adds net namespace ID to diag of linkgroup, helps us to distinguish
>> different namespaces, and net_cookie is unique in the whole system.
>>
> 
> I'm sorry but this is an ABI regression.
> 
> Since struct smc_diag_lgrinfo contains an object of type "struct smc_diag_linkinfo",
> offset of all subsequent members of struct smc_diag_lgrinfo is changed by
> this patch.
> 
> As result, applications compiled with the old version of struct smc_diag_linkinfo
> will receive garbage in struct smc_diag_lgrinfo.role if the kernel implements
> this new version of struct smc_diag_linkinfo.
> 

Good catch! This patch adds 2 ways to provide the net_cookie to user space, one is over the new
netlink interface, and the other is using the old smc_diag way. 
Imho to use the new netlink interface is good enough, there is no need to touch the smc_diag ABI.
We already started adding new fields to the netlink interface only, this flexibility is 
the reason why we added this interface initially.

So a patch that removes
	__aligned_u64	net_cookie;
and
	.lnk[0].net_cookie = net->net_cookie,
should solve the issue. 

Thoughts?

^ permalink raw reply	[flat|nested] 5+ messages in thread

* [PATCH] Partially revert "net/smc: Add netlink net namespace support"
  2022-01-31 13:49     ` Karsten Graul
@ 2022-02-02  3:09       ` Dmitry V. Levin
  2022-02-02  7:26         ` Karsten Graul
  2022-02-09  9:43         ` Tony Lu
  0 siblings, 2 replies; 5+ messages in thread
From: Dmitry V. Levin @ 2022-02-02  3:09 UTC (permalink / raw)
  To: Karsten Graul
  Cc: Tony Lu, kuba, davem, netdev, linux-s390, linux-rdma, linux-api

The change of sizeof(struct smc_diag_linkinfo) by commit 79d39fc503b4
("net/smc: Add netlink net namespace support") introduced an ABI
regression: since struct smc_diag_lgrinfo contains an object of
type "struct smc_diag_linkinfo", offset of all subsequent members
of struct smc_diag_lgrinfo was changed by that change.

As result, applications compiled with the old version
of struct smc_diag_linkinfo will receive garbage in
struct smc_diag_lgrinfo.role if the kernel implements
this new version of struct smc_diag_linkinfo.

Fix this regression by reverting the part of commit 79d39fc503b4 that
changes struct smc_diag_linkinfo.  After all, there is SMC_GEN_NETLINK
interface which is good enough, so there is probably no need to touch
the smc_diag ABI in the first place.

Fixes: 79d39fc503b4 ("net/smc: Add netlink net namespace support")
Signed-off-by: Dmitry V. Levin <ldv@altlinux.org>
---
 include/uapi/linux/smc_diag.h | 11 +++++------
 net/smc/smc_diag.c            |  2 --
 2 files changed, 5 insertions(+), 8 deletions(-)

diff --git a/include/uapi/linux/smc_diag.h b/include/uapi/linux/smc_diag.h
index c7008d87f1a4..8cb3a6fef553 100644
--- a/include/uapi/linux/smc_diag.h
+++ b/include/uapi/linux/smc_diag.h
@@ -84,12 +84,11 @@ struct smc_diag_conninfo {
 /* SMC_DIAG_LINKINFO */
 
 struct smc_diag_linkinfo {
-	__u8		link_id;		    /* link identifier */
-	__u8		ibname[IB_DEVICE_NAME_MAX]; /* name of the RDMA device */
-	__u8		ibport;			    /* RDMA device port number */
-	__u8		gid[40];		    /* local GID */
-	__u8		peer_gid[40];		    /* peer GID */
-	__aligned_u64	net_cookie;                 /* RDMA device net namespace */
+	__u8 link_id;			/* link identifier */
+	__u8 ibname[IB_DEVICE_NAME_MAX]; /* name of the RDMA device */
+	__u8 ibport;			/* RDMA device port number */
+	__u8 gid[40];			/* local GID */
+	__u8 peer_gid[40];		/* peer GID */
 };
 
 struct smc_diag_lgrinfo {
diff --git a/net/smc/smc_diag.c b/net/smc/smc_diag.c
index b8898c787d23..1fca2f90a9c7 100644
--- a/net/smc/smc_diag.c
+++ b/net/smc/smc_diag.c
@@ -146,13 +146,11 @@ static int __smc_diag_dump(struct sock *sk, struct sk_buff *skb,
 	    (req->diag_ext & (1 << (SMC_DIAG_LGRINFO - 1))) &&
 	    !list_empty(&smc->conn.lgr->list)) {
 		struct smc_link *link = smc->conn.lnk;
-		struct net *net = read_pnet(&link->smcibdev->ibdev->coredev.rdma_net);
 
 		struct smc_diag_lgrinfo linfo = {
 			.role = smc->conn.lgr->role,
 			.lnk[0].ibport = link->ibport,
 			.lnk[0].link_id = link->link_id,
-			.lnk[0].net_cookie = net->net_cookie,
 		};
 
 		memcpy(linfo.lnk[0].ibname,
-- 
ldv

^ permalink raw reply related	[flat|nested] 5+ messages in thread

* Re: [PATCH] Partially revert "net/smc: Add netlink net namespace support"
  2022-02-02  3:09       ` [PATCH] Partially revert "net/smc: Add netlink net namespace support" Dmitry V. Levin
@ 2022-02-02  7:26         ` Karsten Graul
  2022-02-09  9:43         ` Tony Lu
  1 sibling, 0 replies; 5+ messages in thread
From: Karsten Graul @ 2022-02-02  7:26 UTC (permalink / raw)
  To: Dmitry V. Levin
  Cc: Tony Lu, kuba, davem, netdev, linux-s390, linux-rdma, linux-api

On 02/02/2022 04:09, Dmitry V. Levin wrote:
> The change of sizeof(struct smc_diag_linkinfo) by commit 79d39fc503b4
> ("net/smc: Add netlink net namespace support") introduced an ABI
> regression: since struct smc_diag_lgrinfo contains an object of
> type "struct smc_diag_linkinfo", offset of all subsequent members
> of struct smc_diag_lgrinfo was changed by that change.
> 
> As result, applications compiled with the old version
> of struct smc_diag_linkinfo will receive garbage in
> struct smc_diag_lgrinfo.role if the kernel implements
> this new version of struct smc_diag_linkinfo.
> 
> Fix this regression by reverting the part of commit 79d39fc503b4 that
> changes struct smc_diag_linkinfo.  After all, there is SMC_GEN_NETLINK
> interface which is good enough, so there is probably no need to touch
> the smc_diag ABI in the first place.

Reviewed-by: Karsten Graul <kgraul@linux.ibm.com>

Thank you Dmitry.

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH] Partially revert "net/smc: Add netlink net namespace support"
  2022-02-02  3:09       ` [PATCH] Partially revert "net/smc: Add netlink net namespace support" Dmitry V. Levin
  2022-02-02  7:26         ` Karsten Graul
@ 2022-02-09  9:43         ` Tony Lu
  1 sibling, 0 replies; 5+ messages in thread
From: Tony Lu @ 2022-02-09  9:43 UTC (permalink / raw)
  To: Dmitry V. Levin
  Cc: Karsten Graul, kuba, davem, netdev, linux-s390, linux-rdma,
	linux-api

On Wed, Feb 02, 2022 at 06:09:04AM +0300, Dmitry V. Levin wrote:
> The change of sizeof(struct smc_diag_linkinfo) by commit 79d39fc503b4
> ("net/smc: Add netlink net namespace support") introduced an ABI
> regression: since struct smc_diag_lgrinfo contains an object of
> type "struct smc_diag_linkinfo", offset of all subsequent members
> of struct smc_diag_lgrinfo was changed by that change.
> 
> As result, applications compiled with the old version
> of struct smc_diag_linkinfo will receive garbage in
> struct smc_diag_lgrinfo.role if the kernel implements
> this new version of struct smc_diag_linkinfo.
> 
> Fix this regression by reverting the part of commit 79d39fc503b4 that
> changes struct smc_diag_linkinfo.  After all, there is SMC_GEN_NETLINK
> interface which is good enough, so there is probably no need to touch
> the smc_diag ABI in the first place.
> 
> Fixes: 79d39fc503b4 ("net/smc: Add netlink net namespace support")
> Signed-off-by: Dmitry V. Levin <ldv@altlinux.org>

Thank you and Karsten.

It was my negligence that caused the ABI incompatibility issue.
I will consider to fix it completely. And we are starting to build
smc-tools and other userspace test for potential ABI modifications.

Best regards,
Tony Lu

^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2022-02-09  9:49 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
     [not found] <20211228130611.19124-1-tonylu@linux.alibaba.com>
     [not found] ` <20211228130611.19124-3-tonylu@linux.alibaba.com>
2022-01-31  0:24   ` [PATCH 2/4] net/smc: Add netlink net namespace support Dmitry V. Levin
2022-01-31 13:49     ` Karsten Graul
2022-02-02  3:09       ` [PATCH] Partially revert "net/smc: Add netlink net namespace support" Dmitry V. Levin
2022-02-02  7:26         ` Karsten Graul
2022-02-09  9:43         ` Tony Lu

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).