Loading include/linux/netfilter/nfnetlink.h +0 −13 Original line number Diff line number Diff line Loading @@ -129,19 +129,6 @@ extern void __nfa_fill(struct sk_buff *skb, int attrtype, ({ if (skb_tailroom(skb) < (int)NFA_SPACE(attrlen)) goto nfattr_failure; \ __nfa_fill(skb, attrtype, attrlen, data); }) extern struct semaphore nfnl_sem; #define nfnl_shlock() down(&nfnl_sem) #define nfnl_shlock_nowait() down_trylock(&nfnl_sem) #define nfnl_shunlock() do { up(&nfnl_sem); \ if(nfnl && nfnl->sk_receive_queue.qlen) \ nfnl->sk_data_ready(nfnl, 0); \ } while(0) extern void nfnl_lock(void); extern void nfnl_unlock(void); extern int nfnetlink_subsys_register(struct nfnetlink_subsystem *n); extern int nfnetlink_subsys_unregister(struct nfnetlink_subsystem *n); Loading include/net/netfilter/nf_conntrack_l3proto.h +1 −4 Original line number Diff line number Diff line Loading @@ -90,10 +90,7 @@ extern struct nf_conntrack_l3proto *nf_ct_l3protos[AF_MAX]; /* Protocol registration. */ extern int nf_conntrack_l3proto_register(struct nf_conntrack_l3proto *proto); extern void nf_conntrack_l3proto_unregister(struct nf_conntrack_l3proto *proto); extern struct nf_conntrack_l3proto * nf_ct_l3proto_find_get(u_int16_t l3proto); extern struct nf_conntrack_l3proto *nf_ct_l3proto_find_get(u_int16_t l3proto); extern void nf_ct_l3proto_put(struct nf_conntrack_l3proto *p); /* Existing built-in protocols */ Loading net/netfilter/nfnetlink.c +24 −11 Original line number Diff line number Diff line Loading @@ -28,6 +28,7 @@ #include <asm/uaccess.h> #include <asm/system.h> #include <net/sock.h> #include <net/netlink.h> #include <linux/init.h> #include <linux/spinlock.h> Loading @@ -51,16 +52,28 @@ static char __initdata nfversion[] = "0.30"; static struct sock *nfnl = NULL; static struct nfnetlink_subsystem *subsys_table[NFNL_SUBSYS_COUNT]; DECLARE_MUTEX(nfnl_sem); static DEFINE_MUTEX(nfnl_mutex); void nfnl_lock(void) static void nfnl_lock(void) { nfnl_shlock(); mutex_lock(&nfnl_mutex); } void nfnl_unlock(void) static int nfnl_trylock(void) { nfnl_shunlock(); return !mutex_trylock(&nfnl_mutex); } static void __nfnl_unlock(void) { mutex_unlock(&nfnl_mutex); } static void nfnl_unlock(void) { mutex_unlock(&nfnl_mutex); if (nfnl->sk_receive_queue.qlen) nfnl->sk_data_ready(nfnl, 0); } int nfnetlink_subsys_register(struct nfnetlink_subsystem *n) Loading Loading @@ -248,11 +261,11 @@ static int nfnetlink_rcv_msg(struct sk_buff *skb, ss = nfnetlink_get_subsys(type); if (!ss) { #ifdef CONFIG_KMOD /* don't call nfnl_shunlock, since it would reenter /* don't call nfnl_unlock, since it would reenter * with further packet processing */ up(&nfnl_sem); __nfnl_unlock(); request_module("nfnetlink-subsys-%d", NFNL_SUBSYS_ID(type)); nfnl_shlock(); nfnl_lock(); ss = nfnetlink_get_subsys(type); if (!ss) #endif Loading Loading @@ -322,7 +335,7 @@ static void nfnetlink_rcv(struct sock *sk, int len) do { struct sk_buff *skb; if (nfnl_shlock_nowait()) if (nfnl_trylock()) return; while ((skb = skb_dequeue(&sk->sk_receive_queue)) != NULL) { Loading @@ -337,9 +350,9 @@ static void nfnetlink_rcv(struct sock *sk, int len) kfree_skb(skb); } /* don't call nfnl_shunlock, since it would reenter /* don't call nfnl_unlock, since it would reenter * with further packet processing */ up(&nfnl_sem); __nfnl_unlock(); } while(nfnl && nfnl->sk_receive_queue.qlen); } Loading Loading
include/linux/netfilter/nfnetlink.h +0 −13 Original line number Diff line number Diff line Loading @@ -129,19 +129,6 @@ extern void __nfa_fill(struct sk_buff *skb, int attrtype, ({ if (skb_tailroom(skb) < (int)NFA_SPACE(attrlen)) goto nfattr_failure; \ __nfa_fill(skb, attrtype, attrlen, data); }) extern struct semaphore nfnl_sem; #define nfnl_shlock() down(&nfnl_sem) #define nfnl_shlock_nowait() down_trylock(&nfnl_sem) #define nfnl_shunlock() do { up(&nfnl_sem); \ if(nfnl && nfnl->sk_receive_queue.qlen) \ nfnl->sk_data_ready(nfnl, 0); \ } while(0) extern void nfnl_lock(void); extern void nfnl_unlock(void); extern int nfnetlink_subsys_register(struct nfnetlink_subsystem *n); extern int nfnetlink_subsys_unregister(struct nfnetlink_subsystem *n); Loading
include/net/netfilter/nf_conntrack_l3proto.h +1 −4 Original line number Diff line number Diff line Loading @@ -90,10 +90,7 @@ extern struct nf_conntrack_l3proto *nf_ct_l3protos[AF_MAX]; /* Protocol registration. */ extern int nf_conntrack_l3proto_register(struct nf_conntrack_l3proto *proto); extern void nf_conntrack_l3proto_unregister(struct nf_conntrack_l3proto *proto); extern struct nf_conntrack_l3proto * nf_ct_l3proto_find_get(u_int16_t l3proto); extern struct nf_conntrack_l3proto *nf_ct_l3proto_find_get(u_int16_t l3proto); extern void nf_ct_l3proto_put(struct nf_conntrack_l3proto *p); /* Existing built-in protocols */ Loading
net/netfilter/nfnetlink.c +24 −11 Original line number Diff line number Diff line Loading @@ -28,6 +28,7 @@ #include <asm/uaccess.h> #include <asm/system.h> #include <net/sock.h> #include <net/netlink.h> #include <linux/init.h> #include <linux/spinlock.h> Loading @@ -51,16 +52,28 @@ static char __initdata nfversion[] = "0.30"; static struct sock *nfnl = NULL; static struct nfnetlink_subsystem *subsys_table[NFNL_SUBSYS_COUNT]; DECLARE_MUTEX(nfnl_sem); static DEFINE_MUTEX(nfnl_mutex); void nfnl_lock(void) static void nfnl_lock(void) { nfnl_shlock(); mutex_lock(&nfnl_mutex); } void nfnl_unlock(void) static int nfnl_trylock(void) { nfnl_shunlock(); return !mutex_trylock(&nfnl_mutex); } static void __nfnl_unlock(void) { mutex_unlock(&nfnl_mutex); } static void nfnl_unlock(void) { mutex_unlock(&nfnl_mutex); if (nfnl->sk_receive_queue.qlen) nfnl->sk_data_ready(nfnl, 0); } int nfnetlink_subsys_register(struct nfnetlink_subsystem *n) Loading Loading @@ -248,11 +261,11 @@ static int nfnetlink_rcv_msg(struct sk_buff *skb, ss = nfnetlink_get_subsys(type); if (!ss) { #ifdef CONFIG_KMOD /* don't call nfnl_shunlock, since it would reenter /* don't call nfnl_unlock, since it would reenter * with further packet processing */ up(&nfnl_sem); __nfnl_unlock(); request_module("nfnetlink-subsys-%d", NFNL_SUBSYS_ID(type)); nfnl_shlock(); nfnl_lock(); ss = nfnetlink_get_subsys(type); if (!ss) #endif Loading Loading @@ -322,7 +335,7 @@ static void nfnetlink_rcv(struct sock *sk, int len) do { struct sk_buff *skb; if (nfnl_shlock_nowait()) if (nfnl_trylock()) return; while ((skb = skb_dequeue(&sk->sk_receive_queue)) != NULL) { Loading @@ -337,9 +350,9 @@ static void nfnetlink_rcv(struct sock *sk, int len) kfree_skb(skb); } /* don't call nfnl_shunlock, since it would reenter /* don't call nfnl_unlock, since it would reenter * with further packet processing */ up(&nfnl_sem); __nfnl_unlock(); } while(nfnl && nfnl->sk_receive_queue.qlen); } Loading