diff --git a/lnet/klnds/gmlnd/gmlnd_comm.c b/lnet/klnds/gmlnd/gmlnd_comm.c index 0ef243669041d8ef773a2a29ea20ef40c011b0f5..5f48cf0057089e24a737e04e18eb9968d927f6cd 100644 --- a/lnet/klnds/gmlnd/gmlnd_comm.c +++ b/lnet/klnds/gmlnd/gmlnd_comm.c @@ -433,9 +433,11 @@ gmnal_rx_thread(void *arg) cfs_daemonize("gmnal_rxd"); - down(&gmni->gmni_rx_mutex); - while (!gmni->gmni_shutdown) { + rc = down_interruptible(&gmni->gmni_rx_mutex); + LASSERT (rc == 0 || rc == -EINTR); + if (rc != 0) + continue; spin_lock(&gmni->gmni_gm_lock); rxevent = gm_blocking_receive_no_spin(gmni->gmni_port); @@ -444,6 +446,7 @@ gmnal_rx_thread(void *arg) switch (GM_RECV_EVENT_TYPE(rxevent)) { default: gm_unknown(gmni->gmni_port, rxevent); + up(&gmni->gmni_rx_mutex); continue; case GM_FAST_RECV_EVENT: @@ -503,12 +506,8 @@ gmnal_rx_thread(void *arg) if (rc < 0) /* parse failure */ gmnal_post_rx(gmni, rx); - - down(&gmni->gmni_rx_mutex); } - up(&gmni->gmni_rx_mutex); - CDEBUG(D_NET, "exiting\n"); atomic_dec(&gmni->gmni_nthreads); return 0;