Whamcloud - gitweb
LU-8163 hsm: user_request_mask can't be unset in test 24c
[fs/lustre-release.git] / lnet / lnet / acceptor.c
index 0c735f4..d6448fe 100644 (file)
@@ -27,7 +27,7 @@
  * Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved.
  * Use is subject to license terms.
  *
- * Copyright (c) 2011, 2014, Intel Corporation.
+ * Copyright (c) 2011, 2015, Intel Corporation.
  */
 /*
  * This file is part of Lustre, http://www.lustre.org/
  */
 
 #define DEBUG_SUBSYSTEM S_LNET
+
+#ifdef HAVE_COMPAT_RDMA
+#include <linux/compat-2.6.h>
+#endif
+#include <linux/completion.h>
+#include <net/sock.h>
 #include <lnet/lib-lnet.h>
 
 static int   accept_port    = 988;
@@ -66,14 +72,14 @@ EXPORT_SYMBOL(lnet_acceptor_port);
 
 static char *accept = "secure";
 
-CFS_MODULE_PARM(accept, "s", charp, 0444,
-                "Accept connections (secure|all|none)");
-CFS_MODULE_PARM(accept_port, "i", int, 0444,
-                "Acceptor's port (same on all nodes)");
-CFS_MODULE_PARM(accept_backlog, "i", int, 0444,
-                "Acceptor's listen backlog");
-CFS_MODULE_PARM(accept_timeout, "i", int, 0644,
-                "Acceptor's timeout (seconds)");
+module_param(accept, charp, 0444);
+MODULE_PARM_DESC(accept, "Accept connections (secure|all|none)");
+module_param(accept_port, int, 0444);
+MODULE_PARM_DESC(accept_port, "Acceptor's port (same on all nodes)");
+module_param(accept_backlog, int, 0444);
+MODULE_PARM_DESC(accept_backlog, "Acceptor's listen backlog");
+module_param(accept_timeout, int, 0644);
+MODULE_PARM_DESC(accept_timeout, "Acceptor's timeout (seconds)");
 
 static char *accept_type = NULL;
 
@@ -348,7 +354,7 @@ lnet_acceptor(void *arg)
         __u32          magic;
         __u32          peer_ip;
         int            peer_port;
-        int            secure = (int)((long_ptr_t)arg);
+       int            secure = (int)((uintptr_t)arg);
 
         LASSERT (lnet_acceptor_state.pta_sock == NULL);
 
@@ -381,13 +387,14 @@ lnet_acceptor(void *arg)
         while (!lnet_acceptor_state.pta_shutdown) {
 
                rc = lnet_sock_accept(&newsock, lnet_acceptor_state.pta_sock);
-                if (rc != 0) {
-                        if (rc != -EAGAIN) {
-                                CWARN("Accept error %d: pausing...\n", rc);
-                                cfs_pause(cfs_time_seconds(1));
-                        }
-                        continue;
-                }
+               if (rc != 0) {
+                       if (rc != -EAGAIN) {
+                               CWARN("Accept error %d: pausing...\n", rc);
+                               set_current_state(TASK_UNINTERRUPTIBLE);
+                               schedule_timeout(cfs_time_seconds(1));
+                       }
+                       continue;
+               }
 
                /* maybe we're waken up with lnet_sock_abort_accept() */
                if (lnet_acceptor_state.pta_shutdown) {
@@ -473,20 +480,17 @@ lnet_acceptor_start(void)
 
        init_completion(&lnet_acceptor_state.pta_signal);
        rc = accept2secure(accept_type, &secure);
-       if (rc <= 0) {
-               fini_completion(&lnet_acceptor_state.pta_signal);
+       if (rc <= 0)
                return rc;
-       }
 
        if (lnet_count_acceptor_nis() == 0)  /* not required */
                return 0;
 
-       task = kthread_run(lnet_acceptor, (void *)(ulong_ptr_t)secure,
+       task = kthread_run(lnet_acceptor, (void *)(uintptr_t)secure,
                           "acceptor_%03ld", secure);
        if (IS_ERR(task)) {
                rc2 = PTR_ERR(task);
                CERROR("Can't start acceptor thread: %ld\n", rc2);
-               fini_completion(&lnet_acceptor_state.pta_signal);
 
                return -ESRCH;
        }
@@ -501,7 +505,6 @@ lnet_acceptor_start(void)
        }
 
        LASSERT(lnet_acceptor_state.pta_sock == NULL);
-       fini_completion(&lnet_acceptor_state.pta_signal);
 
        return -ENETDOWN;
 }
@@ -509,14 +512,18 @@ lnet_acceptor_start(void)
 void
 lnet_acceptor_stop(void)
 {
+       struct sock *sk;
+
        if (lnet_acceptor_state.pta_shutdown) /* not running */
                return;
 
        lnet_acceptor_state.pta_shutdown = 1;
-       wake_up_all(sk_sleep(lnet_acceptor_state.pta_sock->sk));
+
+       sk = lnet_acceptor_state.pta_sock->sk;
+
+       /* awake any sleepers using safe method */
+       sk->sk_state_change(sk);
 
        /* block until acceptor signals exit */
        wait_for_completion(&lnet_acceptor_state.pta_signal);
-
-       fini_completion(&lnet_acceptor_state.pta_signal);
 }