diff options
author | David S. Miller <davem@davemloft.net> | 2011-01-11 15:43:03 -0800 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2011-01-11 15:43:03 -0800 |
commit | 60dbb011df9764294284cc3e70f935eaa462e15e (patch) | |
tree | 7bf7672001c3fc87850895577f22c0f6dc4c1138 /net/netfilter/nf_conntrack_netlink.c | |
parent | 4b0ef1f223be4e092632b4152ceec5627ac10f59 (diff) | |
parent | 2f46e07995734a363608e974a82fd05d5b610750 (diff) | |
download | op-kernel-dev-60dbb011df9764294284cc3e70f935eaa462e15e.zip op-kernel-dev-60dbb011df9764294284cc3e70f935eaa462e15e.tar.gz |
Merge branch 'master' of git://1984.lsi.us.es/net-2.6
Diffstat (limited to 'net/netfilter/nf_conntrack_netlink.c')
-rw-r--r-- | net/netfilter/nf_conntrack_netlink.c | 14 |
1 files changed, 5 insertions, 9 deletions
diff --git a/net/netfilter/nf_conntrack_netlink.c b/net/netfilter/nf_conntrack_netlink.c index 7461402..5cb8d30 100644 --- a/net/netfilter/nf_conntrack_netlink.c +++ b/net/netfilter/nf_conntrack_netlink.c @@ -645,25 +645,23 @@ ctnetlink_dump_table(struct sk_buff *skb, struct netlink_callback *cb) struct nfgenmsg *nfmsg = nlmsg_data(cb->nlh); u_int8_t l3proto = nfmsg->nfgen_family; - rcu_read_lock(); + spin_lock_bh(&nf_conntrack_lock); last = (struct nf_conn *)cb->args[1]; for (; cb->args[0] < net->ct.htable_size; cb->args[0]++) { restart: - hlist_nulls_for_each_entry_rcu(h, n, &net->ct.hash[cb->args[0]], + hlist_nulls_for_each_entry(h, n, &net->ct.hash[cb->args[0]], hnnode) { if (NF_CT_DIRECTION(h) != IP_CT_DIR_ORIGINAL) continue; ct = nf_ct_tuplehash_to_ctrack(h); - if (!atomic_inc_not_zero(&ct->ct_general.use)) - continue; /* Dump entries of a given L3 protocol number. * If it is not specified, ie. l3proto == 0, * then dump everything. */ if (l3proto && nf_ct_l3num(ct) != l3proto) - goto releasect; + continue; if (cb->args[1]) { if (ct != last) - goto releasect; + continue; cb->args[1] = 0; } if (ctnetlink_fill_info(skb, NETLINK_CB(cb->skb).pid, @@ -681,8 +679,6 @@ restart: if (acct) memset(acct, 0, sizeof(struct nf_conn_counter[IP_CT_DIR_MAX])); } -releasect: - nf_ct_put(ct); } if (cb->args[1]) { cb->args[1] = 0; @@ -690,7 +686,7 @@ releasect: } } out: - rcu_read_unlock(); + spin_unlock_bh(&nf_conntrack_lock); if (last) nf_ct_put(last); |