Whamcloud - gitweb
i=liangzhen
[fs/lustre-release.git] / lnet / klnds / viblnd / viblnd_cb.c
index ebd5c2c..3b05751 100644 (file)
@@ -526,7 +526,7 @@ kibnal_kvaddr_to_page (unsigned long vaddr)
                 LASSERT (page != NULL);
                 return page;
         }
-#if CONFIG_HIGHMEM
+#ifdef CONFIG_HIGHMEM
         if (vaddr >= PKMAP_BASE &&
             vaddr < (PKMAP_BASE + LAST_PKMAP * PAGE_SIZE)) {
                 /* No highmem pages only used for bulk (kiov) I/O */
@@ -1679,11 +1679,12 @@ kibnal_eager_recv (lnet_ni_t *ni, void *private, lnet_msg_t *lntmsg,
 
         if (conn->ibc_version == IBNAL_MSG_VERSION_RDMAREPLYNOTRSRVD) {
                 /* Can't block if RDMA completions need normal credits */
-                LCONSOLE_ERROR(0x129, "Dropping message from %s: no buffers "
-                               " free. %s is running an old version of LNET "
-                               "that may deadlock if messages wait for buffers)"
-                               "\n", libcfs_nid2str(conn->ibc_peer->ibp_nid),
-                               libcfs_nid2str(conn->ibc_peer->ibp_nid));
+                LCONSOLE_ERROR_MSG(0x129, "Dropping message from %s: no buffers"
+                                   " free. %s is running an old version of LNET "
+                                   "that may deadlock if messages wait for"
+                                   "buffers) \n", 
+                                   libcfs_nid2str(conn->ibc_peer->ibp_nid),
+                                   libcfs_nid2str(conn->ibc_peer->ibp_nid));
                 return -EDEADLK;
         }
         
@@ -2187,7 +2188,7 @@ kibnal_connreq_done(kib_conn_t *conn, int active, int status)
                         break;
                 }
 
-                kibnal_peer_connect_failed(conn->ibc_peer, active, status);
+                kibnal_peer_connect_failed(peer, active, status);
                 kibnal_conn_disconnected(conn);
                 return;
         }
@@ -2209,8 +2210,7 @@ kibnal_connreq_done(kib_conn_t *conn, int active, int status)
          * peer instance... */
         kibnal_conn_addref(conn);               /* +1 ref for ibc_list */
         list_add(&conn->ibc_list, &peer->ibp_conns);
-        kibnal_close_stale_conns_locked (conn->ibc_peer,
-                                         conn->ibc_incarnation);
+        kibnal_close_stale_conns_locked (peer, conn->ibc_incarnation);
 
         if (!kibnal_peer_active(peer) ||        /* peer has been deleted */
             conn->ibc_comms_error != 0 ||       /* comms error */
@@ -2461,6 +2461,16 @@ kibnal_recv_connreq(cm_cep_handle_t *cep, cm_request_data_t *cmreq)
 
         write_lock_irqsave(g_lock, flags);
 
+        if (kibnal_data.kib_listen_handle == NULL) {
+                write_unlock_irqrestore(g_lock, flags);
+
+                CWARN ("Shutdown has started, rejecting connreq from %s\n",
+                       libcfs_nid2str(rxmsg.ibm_srcnid));
+                kibnal_peer_decref(peer);
+                reason = IBNAL_REJECT_FATAL;
+                goto reject;
+        }
+
         peer2 = kibnal_find_peer_locked(rxmsg.ibm_srcnid);
         if (peer2 != NULL) {
                 /* tie-break connection race in favour of the higher NID */