[INET]: inet_frag_evictor() must run with BH disabled
authorDavid S. Miller <davem@davemloft.net>
Sat, 29 Mar 2008 00:30:18 +0000 (17:30 -0700)
committerDavid S. Miller <davem@davemloft.net>
Sat, 29 Mar 2008 00:30:18 +0000 (17:30 -0700)
Based upon a lockdep trace from Dave Jones.

Signed-off-by: David S. Miller <davem@davemloft.net>
net/ipv4/inet_fragment.c
net/ipv6/netfilter/nf_conntrack_reasm.c

index 724d69aed031974234501ff024852b7a55ea1810..a0a3c78cb5e0dc7ff600bb9897d85d7619153612 100644 (file)
@@ -86,7 +86,10 @@ EXPORT_SYMBOL(inet_frags_fini);
 void inet_frags_exit_net(struct netns_frags *nf, struct inet_frags *f)
 {
        nf->low_thresh = 0;
+
+       local_bh_disable();
        inet_frag_evictor(nf, f);
+       local_bh_enable();
 }
 EXPORT_SYMBOL(inet_frags_exit_net);
 
index 2a0d698b24d5b3404305c1ebacb7306080bd0a52..24c0d03095bf8620894d4d2748b9953bc66f90a7 100644 (file)
@@ -171,7 +171,9 @@ static __inline__ void fq_kill(struct nf_ct_frag6_queue *fq)
 
 static void nf_ct_frag6_evictor(void)
 {
+       local_bh_disable();
        inet_frag_evictor(&nf_init_frags, &nf_frags);
+       local_bh_enable();
 }
 
 static void nf_ct_frag6_expire(unsigned long data)