|
@@ -209,7 +209,9 @@ fq_find(__be32 id, struct in6_addr *src, struct in6_addr *dst)
|
|
|
arg.dst = dst;
|
|
|
hash = ip6qhashfn(id, src, dst);
|
|
|
|
|
|
+ local_bh_disable();
|
|
|
q = inet_frag_find(&nf_init_frags, &nf_frags, &arg, hash);
|
|
|
+ local_bh_enable();
|
|
|
if (q == NULL)
|
|
|
goto oom;
|
|
|
|
|
@@ -638,10 +640,10 @@ struct sk_buff *nf_ct_frag6_gather(struct sk_buff *skb)
|
|
|
goto ret_orig;
|
|
|
}
|
|
|
|
|
|
- spin_lock(&fq->q.lock);
|
|
|
+ spin_lock_bh(&fq->q.lock);
|
|
|
|
|
|
if (nf_ct_frag6_queue(fq, clone, fhdr, nhoff) < 0) {
|
|
|
- spin_unlock(&fq->q.lock);
|
|
|
+ spin_unlock_bh(&fq->q.lock);
|
|
|
pr_debug("Can't insert skb to queue\n");
|
|
|
fq_put(fq);
|
|
|
goto ret_orig;
|
|
@@ -653,7 +655,7 @@ struct sk_buff *nf_ct_frag6_gather(struct sk_buff *skb)
|
|
|
if (ret_skb == NULL)
|
|
|
pr_debug("Can't reassemble fragmented packets\n");
|
|
|
}
|
|
|
- spin_unlock(&fq->q.lock);
|
|
|
+ spin_unlock_bh(&fq->q.lock);
|
|
|
|
|
|
fq_put(fq);
|
|
|
return ret_skb;
|