From: Nicholas Mc Guire <hof...@osadl.org>

The spin_lock()/spin_unlock() is synchronizing on the
nf_conntrack_locks_all_lock which is equivalent to
spin_unlock_wait() but the later should be more efficient.

Signed-off-by: Nicholas Mc Guire <hof...@osadl.org>
Signed-off-by: Pablo Neira Ayuso <pa...@netfilter.org>
---
 net/netfilter/nf_conntrack_core.c | 6 ++----
 1 file changed, 2 insertions(+), 4 deletions(-)

diff --git a/net/netfilter/nf_conntrack_core.c 
b/net/netfilter/nf_conntrack_core.c
index f60b4fd..afde5f5 100644
--- a/net/netfilter/nf_conntrack_core.c
+++ b/net/netfilter/nf_conntrack_core.c
@@ -74,8 +74,7 @@ void nf_conntrack_lock(spinlock_t *lock) __acquires(lock)
        spin_lock(lock);
        while (unlikely(nf_conntrack_locks_all)) {
                spin_unlock(lock);
-               spin_lock(&nf_conntrack_locks_all_lock);
-               spin_unlock(&nf_conntrack_locks_all_lock);
+               spin_unlock_wait(&nf_conntrack_locks_all_lock);
                spin_lock(lock);
        }
 }
@@ -121,8 +120,7 @@ static void nf_conntrack_all_lock(void)
        nf_conntrack_locks_all = true;
 
        for (i = 0; i < CONNTRACK_LOCKS; i++) {
-               spin_lock(&nf_conntrack_locks[i]);
-               spin_unlock(&nf_conntrack_locks[i]);
+               spin_unlock_wait(&nf_conntrack_locks[i]);
        }
 }
 
-- 
2.1.4

Reply via email to