From 457dd3fb52a5bbbc5c925a9ef4558bfcca0e1766 Mon Sep 17 00:00:00 2001 From: Nickolai Zeldovich Date: Sun, 20 Jan 2002 08:40:16 +0000 Subject: [PATCH] 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." --- src/rx/rx.c | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) 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); -- 2.39.5