From 26d92d169efb44f4d07019d45b02238f7b0fdb9d Mon Sep 17 00:00:00 2001 From: Patrick McHardy Date: Mon, 12 Feb 2007 11:09:55 -0800 Subject: [PATCH] --- yaml --- r: 48098 b: refs/heads/master c: d486dd1fb8573fad5b8dab61a7d1406116fd4baf h: refs/heads/master v: v3 --- [refs] | 2 +- trunk/net/netfilter/core.c | 15 ++++++++++----- 2 files changed, 11 insertions(+), 6 deletions(-) diff --git a/[refs] b/[refs] index 5a3967b22c4f..c0baedd7e0c1 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: e4ba13088de7fa384087af398df6629fadb363ba +refs/heads/master: d486dd1fb8573fad5b8dab61a7d1406116fd4baf diff --git a/trunk/net/netfilter/core.c b/trunk/net/netfilter/core.c index a66bd6af44fa..716603f05c02 100644 --- a/trunk/net/netfilter/core.c +++ b/trunk/net/netfilter/core.c @@ -22,29 +22,34 @@ #include #include #include +#include #include #include "nf_internals.h" -static DEFINE_SPINLOCK(afinfo_lock); +static DEFINE_MUTEX(afinfo_mutex); struct nf_afinfo *nf_afinfo[NPROTO] __read_mostly; EXPORT_SYMBOL(nf_afinfo); int nf_register_afinfo(struct nf_afinfo *afinfo) { - spin_lock(&afinfo_lock); + int err; + + err = mutex_lock_interruptible(&afinfo_mutex); + if (err < 0) + return err; rcu_assign_pointer(nf_afinfo[afinfo->family], afinfo); - spin_unlock(&afinfo_lock); + mutex_unlock(&afinfo_mutex); return 0; } EXPORT_SYMBOL_GPL(nf_register_afinfo); void nf_unregister_afinfo(struct nf_afinfo *afinfo) { - spin_lock(&afinfo_lock); + mutex_lock(&afinfo_mutex); rcu_assign_pointer(nf_afinfo[afinfo->family], NULL); - spin_unlock(&afinfo_lock); + mutex_unlock(&afinfo_mutex); synchronize_rcu(); } EXPORT_SYMBOL_GPL(nf_unregister_afinfo);