From: maxim Date: Fri, 7 Mar 2008 16:01:07 +0000 (+0000) Subject: b=14956 X-Git-Tag: v1_7_0_51~152 X-Git-Url: https://git.whamcloud.com/?a=commitdiff_plain;h=b6d91f7fc453d20a83de4f2590130eb93da6d2f5;p=fs%2Flustre-release.git b=14956 i=isaac i=liang Sleep on gmni_rx_mutex in interruptible way. Otherwise 'uptime' reports high load while rx thread is sleeping on mutex. --- diff --git a/lnet/klnds/gmlnd/gmlnd_comm.c b/lnet/klnds/gmlnd/gmlnd_comm.c index 0ef2436..5f48cf0 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;