@@ -3197,7 +3197,7 @@ struct lnet_mt_event_info {
static void
lnet_handle_recovery_reply(struct lnet_mt_event_info *ev_info,
- int status)
+ int status, bool unlink_event)
{
lnet_nid_t nid = ev_info->mt_nid;
@@ -3228,7 +3228,8 @@ struct lnet_mt_event_info {
* carry forward too much information.
* In the peer case, it'll naturally be incremented
*/
- lnet_inc_healthv(&ni->ni_healthv);
+ if (!unlink_event)
+ lnet_inc_healthv(&ni->ni_healthv);
} else {
struct lnet_peer_ni *lpni;
int cpt;
@@ -3273,14 +3274,14 @@ struct lnet_mt_event_info {
libcfs_nid2str(ev_info->mt_nid));
/* fall-through */
case LNET_EVENT_REPLY:
- lnet_handle_recovery_reply(ev_info, event->status);
+ lnet_handle_recovery_reply(ev_info, event->status,
+ event->type == LNET_EVENT_UNLINK);
break;
case LNET_EVENT_SEND:
CDEBUG(D_NET, "%s recovery message sent %s:%d\n",
libcfs_nid2str(ev_info->mt_nid),
(event->status) ? "unsuccessfully" :
"successfully", event->status);
- lnet_handle_recovery_reply(ev_info, event->status);
break;
default:
CERROR("Unexpected event: %d\n", event->type);
@@ -521,6 +521,11 @@
return;
lnet_net_lock(0);
+ /* the mt could've shutdown and cleaned up the queues */
+ if (the_lnet.ln_mt_state != LNET_MT_STATE_RUNNING) {
+ lnet_net_unlock(0);
+ return;
+ }
lnet_handle_remote_failure_locked(lpni);
lnet_net_unlock(0);
}