Whamcloud - gitweb
LU-10391 lnet: simplify use of lnet_count_acceptor_nets()
[fs/lustre-release.git] / lnet / lnet / acceptor.c
index 75e9f27..09d016f 100644 (file)
@@ -144,15 +144,14 @@ lnet_connect_console_error (int rc, lnet_nid_t peer_nid,
 }
 EXPORT_SYMBOL(lnet_connect_console_error);
 
-int
-lnet_connect(struct socket **sockp, lnet_nid_t peer_nid,
-           __u32 local_ip, __u32 peer_ip, int peer_port, struct net *ns)
+struct socket *
+lnet_connect(lnet_nid_t peer_nid, __u32 local_ip, __u32 peer_ip,
+            int peer_port, struct net *ns)
 {
        struct lnet_acceptor_connreq cr;
        struct socket           *sock;
        int                     rc;
        int                     port;
-       int                     fatal;
 
        BUILD_BUG_ON(sizeof(cr) > 16); /* not too big to be on the stack */
 
@@ -161,13 +160,13 @@ lnet_connect(struct socket **sockp, lnet_nid_t peer_nid,
             --port) {
                /* Iterate through reserved ports. */
 
-               rc = lnet_sock_connect(&sock, &fatal,
-                                        local_ip, port,
+               sock = lnet_sock_connect(local_ip, port,
                                         peer_ip, peer_port, ns);
-               if (rc != 0) {
-                       if (fatal)
-                               goto failed;
-                       continue;
+               if (IS_ERR(sock)) {
+                       rc = PTR_ERR(sock);
+                       if (rc == -EADDRINUSE || rc == -EADDRNOTAVAIL)
+                               continue;
+                       goto failed;
                }
 
                BUILD_BUG_ON(LNET_PROTO_ACCEPTOR_VERSION != 1);
@@ -189,8 +188,7 @@ lnet_connect(struct socket **sockp, lnet_nid_t peer_nid,
                if (rc != 0)
                        goto failed_sock;
 
-               *sockp = sock;
-               return 0;
+               return sock;
        }
 
        rc = -EADDRINUSE;
@@ -200,7 +198,7 @@ failed_sock:
        sock_release(sock);
 failed:
        lnet_connect_console_error(rc, peer_nid, peer_ip, peer_port);
-       return rc;
+       return ERR_PTR(rc);
 }
 EXPORT_SYMBOL(lnet_connect);
 
@@ -357,10 +355,11 @@ lnet_acceptor(void *arg)
 
        LASSERT(lnet_acceptor_state.pta_sock == NULL);
 
-       rc = lnet_sock_listen(&lnet_acceptor_state.pta_sock,
-                             0, accept_port, accept_backlog,
-                             lnet_acceptor_state.pta_ns);
-       if (rc != 0) {
+       lnet_acceptor_state.pta_sock =
+               lnet_sock_listen(0, accept_port, accept_backlog,
+                                lnet_acceptor_state.pta_ns);
+       if (IS_ERR(lnet_acceptor_state.pta_sock)) {
+               rc = PTR_ERR(lnet_acceptor_state.pta_sock);
                if (rc == -EADDRINUSE)
                        LCONSOLE_ERROR_MSG(0x122, "Can't start acceptor on port"
                                           " %d: port already in use\n",
@@ -372,6 +371,7 @@ lnet_acceptor(void *arg)
 
                lnet_acceptor_state.pta_sock = NULL;
        } else {
+               rc = 0;
                LCONSOLE(0, "Accept %s, port %d\n", accept_type, accept_port);
                init_waitqueue_head(&lnet_acceptor_state.pta_waitq);
                lnet_acceptor_state.pta_odata =
@@ -527,6 +527,10 @@ lnet_acceptor_stop(void)
        if (lnet_acceptor_state.pta_shutdown) /* not running */
                return;
 
+       /* If still required, return immediately */
+       if (the_lnet.ln_refcount && lnet_count_acceptor_nets() > 0)
+               return;
+
        lnet_acceptor_state.pta_shutdown = 1;
        wake_up(&lnet_acceptor_state.pta_waitq);