LVS
lvs-devel
Google
 
Web LinuxVirtualServer.org

[PATCH 1/9] ipvs: Fix possible deadlock in sync code

To: wensong@xxxxxxxxxxxx, horms@xxxxxxxxxxxx, ja@xxxxxx
Subject: [PATCH 1/9] ipvs: Fix possible deadlock in sync code
Cc: netdev@xxxxxxxxxxxxxxx, lvs-devel@xxxxxxxxxxxxxxx
From: sven.wegener@xxxxxxxxxxx
Date: Sun, 10 Aug 2008 11:07:31 +0000
From: Sven Wegener <sven.wegener@xxxxxxxxxxx>

Commit 998e7a76804b7a273a0460c2cdd5a51fa9856717 ("ipvs: Use kthread_run()
instead of doing a double-fork via kernel_thread()") introduced a possible
deadlock in the sync code. We need to use the _bh versions for the lock, as the
lock is also accessed from a bottom half.

Signed-off-by: Sven Wegener <sven.wegener@xxxxxxxxxxx>
---
 net/ipv4/ipvs/ip_vs_sync.c |    4 ++--
 1 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/net/ipv4/ipvs/ip_vs_sync.c b/net/ipv4/ipvs/ip_vs_sync.c
index 45e9bd9..a652da2 100644
--- a/net/ipv4/ipvs/ip_vs_sync.c
+++ b/net/ipv4/ipvs/ip_vs_sync.c
@@ -904,9 +904,9 @@ int stop_sync_thread(int state)
                 * progress of stopping the master sync daemon.
                 */
 
-               spin_lock(&ip_vs_sync_lock);
+               spin_lock_bh(&ip_vs_sync_lock);
                ip_vs_sync_state &= ~IP_VS_STATE_MASTER;
-               spin_unlock(&ip_vs_sync_lock);
+               spin_unlock_bh(&ip_vs_sync_lock);
                kthread_stop(sync_master_thread);
                sync_master_thread = NULL;
        } else if (state == IP_VS_STATE_BACKUP) {
-- 
1.5.6.4

--
To unsubscribe from this list: send the line "unsubscribe lvs-devel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

<Prev in Thread] Current Thread [Next in Thread>