diff --git a/net/netfilter/nf_conntrack_core.c index 8a2cdd172..ff901a2b4 100644 --- a/net/netfilter/nf_conntrack_core.c +++ b/net/netfilter/nf_conntrack_core.c @@ -1552,13 +1552,17 @@ static void gc_worker(struct work_struct *work) break; } + int entry_count = 0; hlist_nulls_for_each_entry_rcu(h, n, &ct_hash[i], hnnode) { struct nf_conntrack_net *cnet; struct net *net; long expires; tmp = nf_ct_tuplehash_to_ctrack(h); + entry_count++; + if (entry_count > 100) break; + cond_resched(); if (expired_count > GC_SCAN_EXPIRED_MAX) { rcu_read_unlock();