From: Nickolai Zeldovich Date: Sun, 20 Jan 2002 08:40:16 +0000 (+0000) Subject: STABLE12-rx-avoid-unnecessary-wakeups-20020120 X-Git-Tag: openafs-stable-1_2_3~44 X-Git-Url: https://git.michaelhowe.org/gitweb/?a=commitdiff_plain;h=457dd3fb52a5bbbc5c925a9ef4558bfcca0e1766;p=packages%2Fo%2Fopenafs.git STABLE12-rx-avoid-unnecessary-wakeups-20020120 "This fixes a livelock condition introduced in my earlier resource starvation patch; apparently I had erred too far on the side of "wake up just in case". The livelock bug is exhibited when running 10 fsstress processes at once; if many processes are waiting for a new Rx call, they get stuck in an uninterruptible kernel loop waking each other up." --- diff --git a/src/rx/rx.c b/src/rx/rx.c index ea98ff2a1..998b63adf 100644 --- a/src/rx/rx.c +++ b/src/rx/rx.c @@ -1053,17 +1053,16 @@ struct rx_call *rx_NewCall(conn) osi_rxSleep(conn); #endif conn->makeCallWaiters--; - - /* - * Wake up anyone else who might be giving us a chance to - * run (see code above that avoids resource starvation). - */ + } + /* + * Wake up anyone else who might be giving us a chance to + * run (see code above that avoids resource starvation). + */ #ifdef RX_ENABLE_LOCKS - CV_BROADCAST(&conn->conn_call_cv); + CV_BROADCAST(&conn->conn_call_cv); #else - osi_rxWakeup(conn); + osi_rxWakeup(conn); #endif - } CALL_HOLD(call, RX_CALL_REFCOUNT_BEGIN);