From: Li Dongyang Date: Mon, 15 Apr 2019 02:18:40 +0000 (+1000) Subject: LU-11838 lnet: getname dropping addrlen argument X-Git-Tag: 2.12.54~84 X-Git-Url: https://git.whamcloud.com/?a=commitdiff_plain;h=refs%2Fchanges%2F72%2F34672%2F4;p=fs%2Flustre-release.git LU-11838 lnet: getname dropping addrlen argument Since kernel 4.17 ->getname() does not take int *addrlen argument anymore, instead it's returning the length to the caller. Linux-commit: 9b2c45d479d0fb8647c9e83359df69162b5fbe5f Test-Parameters:trivial Signed-off-by: Li Dongyang Change-Id: I4ad5de4a22f3fb23c07a356650ea7925acf07eed Reviewed-on: https://review.whamcloud.com/34672 Tested-by: Jenkins Reviewed-by: Gu Zheng Reviewed-by: Andreas Dilger Tested-by: Maloo Reviewed-by: James Simmons Reviewed-by: Oleg Drokin --- diff --git a/lnet/autoconf/lustre-lnet.m4 b/lnet/autoconf/lustre-lnet.m4 index 1a49733..effa0e1 100644 --- a/lnet/autoconf/lustre-lnet.m4 +++ b/lnet/autoconf/lustre-lnet.m4 @@ -741,6 +741,27 @@ EXTRA_KCFLAGS="$tmp_flags" ]) # LN_CONFIG_SOCK_ACCEPT # +# LN_CONFIG_SOCK_GETNAME +# +# 4.17 commit 9b2c45d479d0fb8647c9e83359df69162b5fbe5f getname() +# does not take the length *int argument and returns the length +# +AC_DEFUN([LN_CONFIG_SOCK_GETNAME], [ +tmp_flags="$EXTRA_KCFLAGS" +EXTRA_KCFLAGS="-Werror" +LB_CHECK_COMPILE([if 'getname' has two args], +kern_sock_getname_2args, [ + #include +],[ + kernel_getsockname(NULL, NULL); +],[ + AC_DEFINE(HAVE_KERN_SOCK_GETNAME_2ARGS, 1, + ['getname' has two args]) +]) +EXTRA_KCFLAGS="$tmp_flags" +]) # LN_CONFIG_SOCK_GETNAME + +# # LN_PROG_LINUX # # LNet linux kernel checks @@ -765,6 +786,8 @@ LN_CONFIG_SK_DATA_READY LN_CONFIG_SOCK_CREATE_KERN # 4.11 LN_CONFIG_SOCK_ACCEPT +# 4.17 +LN_CONFIG_SOCK_GETNAME ]) # LN_PROG_LINUX # diff --git a/lnet/include/lnet/lib-lnet.h b/lnet/include/lnet/lib-lnet.h index 473610c..a829103 100644 --- a/lnet/include/lnet/lib-lnet.h +++ b/lnet/include/lnet/lib-lnet.h @@ -80,6 +80,18 @@ extern struct lnet the_lnet; /* THE network */ #define DEFAULT_PEER_TIMEOUT 180 #define LNET_LND_DEFAULT_TIMEOUT 5 +#ifdef HAVE_KERN_SOCK_GETNAME_2ARGS +#define lnet_kernel_getpeername(sock, addr, addrlen) \ + kernel_getpeername(sock, addr) +#define lnet_kernel_getsockname(sock, addr, addrlen) \ + kernel_getsockname(sock, addr) +#else +#define lnet_kernel_getpeername(sock, addr, addrlen) \ + kernel_getpeername(sock, addr, addrlen) +#define lnet_kernel_getsockname(sock, addr, addrlen) \ + kernel_getsockname(sock, addr, addrlen) +#endif + static inline int lnet_is_route_alive(struct lnet_route *route) { if (!route->lr_gateway->lpni_alive) diff --git a/lnet/lnet/lib-socket.c b/lnet/lnet/lib-socket.c index 0a10a38..8afc4b5 100644 --- a/lnet/lnet/lib-socket.c +++ b/lnet/lnet/lib-socket.c @@ -453,14 +453,18 @@ int lnet_sock_getaddr(struct socket *sock, bool remote, __u32 *ip, int *port) { struct sockaddr_in sin; - int len = sizeof(sin); - int rc; + int rc; +#ifndef HAVE_KERN_SOCK_GETNAME_2ARGS + int len = sizeof(sin); +#endif if (remote) - rc = kernel_getpeername(sock, (struct sockaddr *)&sin, &len); + rc = lnet_kernel_getpeername(sock, + (struct sockaddr *)&sin, &len); else - rc = kernel_getsockname(sock, (struct sockaddr *)&sin, &len); - if (rc != 0) { + rc = lnet_kernel_getsockname(sock, + (struct sockaddr *)&sin, &len); + if (rc < 0) { CERROR("Error %d getting sock %s IP/port\n", rc, remote ? "peer" : "local"); return rc;