Whamcloud - gitweb
LU-9549 lnet: prevent assert on ln_state
[fs/lustre-release.git] / lnet / lnet / lib-move.c
index 988c549..b05df55 100644 (file)
@@ -594,7 +594,7 @@ lnet_ni_recv(struct lnet_ni *ni, void *private, struct lnet_msg *msg,
                                             niov, iov, kiov, offset, mlen,
                                             rlen);
        if (rc < 0)
-               lnet_finalize(ni, msg, rc);
+               lnet_finalize(msg, rc);
 }
 
 static void
@@ -648,7 +648,7 @@ lnet_ni_send(struct lnet_ni *ni, struct lnet_msg *msg)
 
        rc = (ni->ni_net->net_lnd->lnd_send)(ni, priv, msg);
        if (rc < 0)
-               lnet_finalize(ni, msg, rc);
+               lnet_finalize(msg, rc);
 }
 
 static int
@@ -829,7 +829,7 @@ lnet_post_send_locked(struct lnet_msg *msg, int do_send)
                CNETERR("Dropping message for %s: peer not alive\n",
                        libcfs_id2str(msg->msg_target));
                if (do_send)
-                       lnet_finalize(ni, msg, -EHOSTUNREACH);
+                       lnet_finalize(msg, -EHOSTUNREACH);
 
                lnet_net_lock(cpt);
                return -EHOSTUNREACH;
@@ -843,7 +843,7 @@ lnet_post_send_locked(struct lnet_msg *msg, int do_send)
                        "called on the MD/ME.\n",
                        libcfs_id2str(msg->msg_target));
                if (do_send)
-                       lnet_finalize(ni, msg, -ECANCELED);
+                       lnet_finalize(msg, -ECANCELED);
 
                lnet_net_lock(cpt);
                return -ECANCELED;
@@ -1107,7 +1107,7 @@ lnet_drop_routed_msgs_locked(struct list_head *list, int cpt)
                lnet_ni_recv(msg->msg_rxni, msg->msg_private, NULL,
                             0, 0, 0, msg->msg_hdr.payload_length);
                list_del_init(&msg->msg_list);
-               lnet_finalize(NULL, msg, -ECANCELED);
+               lnet_finalize(msg, -ECANCELED);
        }
 
        lnet_net_lock(cpt);
@@ -1423,7 +1423,7 @@ again:
 
        seq = lnet_get_dlc_seq_locked();
 
-       if (the_lnet.ln_shutdown) {
+       if (the_lnet.ln_state != LNET_STATE_RUNNING) {
                lnet_net_unlock(cpt);
                return -ESHUTDOWN;
        }
@@ -1555,20 +1555,6 @@ again:
                }
        }
 
-       if (best_ni == the_lnet.ln_loni) {
-               /* No send credit hassles with LOLND */
-               lnet_ni_addref_locked(best_ni, cpt);
-               msg->msg_hdr.dest_nid = cpu_to_le64(best_ni->ni_nid);
-               if (!msg->msg_routing)
-                       msg->msg_hdr.src_nid = cpu_to_le64(best_ni->ni_nid);
-               msg->msg_target.nid = best_ni->ni_nid;
-               lnet_msg_commit(msg, cpt);
-               msg->msg_txni = best_ni;
-               lnet_net_unlock(cpt);
-
-               return LNET_CREDIT_OK;
-       }
-
        /*
         * if we already found a best_ni because src_nid is specified and
         * best_lpni because we are replying to a message then just send
@@ -1810,6 +1796,21 @@ pick_peer:
 
 
 send:
+       /* Shortcut for loopback. */
+       if (best_ni == the_lnet.ln_loni) {
+               /* No send credit hassles with LOLND */
+               lnet_ni_addref_locked(best_ni, cpt);
+               msg->msg_hdr.dest_nid = cpu_to_le64(best_ni->ni_nid);
+               if (!msg->msg_routing)
+                       msg->msg_hdr.src_nid = cpu_to_le64(best_ni->ni_nid);
+               msg->msg_target.nid = best_ni->ni_nid;
+               lnet_msg_commit(msg, cpt);
+               msg->msg_txni = best_ni;
+               lnet_net_unlock(cpt);
+
+               return LNET_CREDIT_OK;
+       }
+
        routing = routing || routing2;
 
        /*
@@ -2092,7 +2093,7 @@ lnet_parse_get(struct lnet_ni *ni, struct lnet_msg *msg, int rdma_get)
                       libcfs_nid2str(ni->ni_nid),
                       libcfs_id2str(info.mi_id), rc);
 
-               lnet_finalize(ni, msg, rc);
+               lnet_finalize(msg, rc);
        }
 
        return 0;
@@ -2523,8 +2524,6 @@ lnet_parse(struct lnet_ni *ni, struct lnet_hdr *hdr, lnet_nid_t from_nid,
                msg->msg_hdr.dest_pid   = dest_pid;
                msg->msg_hdr.payload_length = payload_length;
        }
-       /* Multi-Rail: Primary NID of source. */
-       msg->msg_initiator = lnet_peer_primary_nid(src_nid);
 
        lnet_net_lock(cpt);
        lpni = lnet_nid2peerni_locked(from_nid, cpt);
@@ -2543,6 +2542,8 @@ lnet_parse(struct lnet_ni *ni, struct lnet_hdr *hdr, lnet_nid_t from_nid,
        msg->msg_rxpeer = lpni;
        msg->msg_rxni = ni;
        lnet_ni_addref_locked(ni, cpt);
+       /* Multi-Rail: Primary NID of source. */
+       msg->msg_initiator = lnet_peer_primary_nid_locked(src_nid);
 
        if (lnet_isrouter(msg->msg_rxpeer)) {
                lnet_peer_set_alive(msg->msg_rxpeer);
@@ -2589,7 +2590,7 @@ lnet_parse(struct lnet_ni *ni, struct lnet_hdr *hdr, lnet_nid_t from_nid,
 
  free_drop:
        LASSERT(msg->msg_md == NULL);
-       lnet_finalize(ni, msg, rc);
+       lnet_finalize(msg, rc);
 
  drop:
        lnet_drop_message(ni, cpt, private, payload_length);
@@ -2634,7 +2635,7 @@ lnet_drop_delayed_msg_list(struct list_head *head, char *reason)
                 * but we still should give error code so lnet_msg_decommit()
                 * can skip counters operations and other checks.
                 */
-               lnet_finalize(msg->msg_rxni, msg, -ENOENT);
+               lnet_finalize(msg, -ENOENT);
        }
 }
 
@@ -2792,7 +2793,7 @@ LNetPut(lnet_nid_t self, struct lnet_handle_md mdh, enum lnet_ack_req ack,
        if (rc != 0) {
                CNETERR("Error sending PUT to %s: %d\n",
                        libcfs_id2str(target), rc);
-               lnet_finalize(NULL, msg, rc);
+               lnet_finalize(msg, rc);
        }
 
        /* completion will be signalled by an event */
@@ -2844,8 +2845,7 @@ lnet_create_reply_msg(struct lnet_ni *ni, struct lnet_msg *getmsg)
               libcfs_nid2str(ni->ni_nid), libcfs_id2str(peer_id), getmd);
 
        /* setup information for lnet_build_msg_event */
-       msg->msg_initiator = lnet_peer_primary_nid(peer_id.nid);
-       /* Cheaper: msg->msg_initiator = getmsg->msg_txpeer->lp_nid; */
+       msg->msg_initiator = getmsg->msg_txpeer->lpni_peer_net->lpn_peer->lp_primary_nid;
        msg->msg_from = peer_id.nid;
        msg->msg_type = LNET_MSG_GET; /* flag this msg as an "optimized" GET */
        msg->msg_hdr.src_nid = peer_id.nid;
@@ -2988,7 +2988,7 @@ LNetGet(lnet_nid_t self, struct lnet_handle_md mdh,
        if (rc < 0) {
                CNETERR("Error sending GET to %s: %d\n",
                        libcfs_id2str(target), rc);
-               lnet_finalize(NULL, msg, rc);
+               lnet_finalize(msg, rc);
        }
 
        /* completion will be signalled by an event */