Whamcloud - gitweb
LU-13783 lnet: remove kernel_setsockopt() from lnet_sock_listen() 07/43207/2
authorJian Yu <yujian@whamcloud.com>
Mon, 5 Apr 2021 08:16:54 +0000 (01:16 -0700)
committerOleg Drokin <green@whamcloud.com>
Thu, 15 Apr 2021 06:30:49 +0000 (06:30 +0000)
Linux 5.8 removes kernel_setsockopt(). In Lustre commit
99d9638d6c0, kernel_setsockopt() was removed from Lustre codes
by using direct access or helper calls. However, the one in
lnet_sock_listen() was not removed. This patch removes it by
using the codes from previously defined kernel_setsockopt()
directly.

Fixes: 99d9638d6c0 ("LU-13783 libcfs: support removal of kernel_setsockopt()")
Signed-off-by: Jian Yu <yujian@whamcloud.com>
Change-Id: I5b74bf113185c0c9af5c81ca6cd346f1be7a4720
Reviewed-on: https://review.whamcloud.com/43207
Tested-by: jenkins <devops@whamcloud.com>
Reviewed-by: James Simmons <jsimmons@infradead.org>
Tested-by: Maloo <maloo@whamcloud.com>
Reviewed-by: Chris Horn <chris.horn@hpe.com>
Reviewed-by: Serguei Smirnov <ssmirnov@whamcloud.com>
Reviewed-by: Oleg Drokin <green@whamcloud.com>
lnet/lnet/lib-socket.c

index f087710..113201c 100644 (file)
@@ -344,6 +344,7 @@ struct socket *
 lnet_sock_listen(int local_port, int backlog, struct net *ns)
 {
        struct socket *sock;
+       mm_segment_t oldfs;
        int val = 0;
        int rc;
 
@@ -360,8 +361,11 @@ lnet_sock_listen(int local_port, int backlog, struct net *ns)
         * This is the default, but it can be overridden so
         * we force it back.
         */
-       kernel_setsockopt(sock, IPPROTO_IPV6, IPV6_V6ONLY,
-                         (char *) &val, sizeof(val));
+       oldfs = get_fs();
+       set_fs(KERNEL_DS);
+       sock->ops->setsockopt(sock, IPPROTO_IPV6, IPV6_V6ONLY,
+                             (char __user __force *) &val, sizeof(val));
+       set_fs(oldfs);
 
        rc = kernel_listen(sock, backlog);
        if (rc == 0)