aboutsummaryrefslogtreecommitdiffstats
path: root/include/net
diff options
context:
space:
mode:
authorEric Dumazet <eric.dumazet@gmail.com>2010-06-08 22:09:23 -0400
committerDavid S. Miller <davem@davemloft.net>2010-06-11 21:37:08 -0400
commitc7de2cf053420d63bac85133469c965d4b1083e1 (patch)
treeb56f7c96d01e25f79fe1f9b7e5305265e92214d9 /include/net
parentcbd6890c5987cd7115147e1dd2c10d729afabb08 (diff)
pkt_sched: gen_kill_estimator() rcu fixes
gen_kill_estimator() API is incomplete or not well documented, since caller should make sure an RCU grace period is respected before freeing stats_lock. This was partially addressed in commit 5d944c640b4 (gen_estimator: deadlock fix), but same problem exist for all gen_kill_estimator() users, if lock they use is not already RCU protected. A code review shows xt_RATEEST.c, act_api.c, act_police.c have this problem. Other are ok because they use qdisc lock, already RCU protected. Signed-off-by: Eric Dumazet <eric.dumazet@gmail.com> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'include/net')
-rw-r--r--include/net/act_api.h2
-rw-r--r--include/net/netfilter/xt_rateest.h1
2 files changed, 3 insertions, 0 deletions
diff --git a/include/net/act_api.h b/include/net/act_api.h
index c05fd717c588..bab385f13ac3 100644
--- a/include/net/act_api.h
+++ b/include/net/act_api.h
@@ -20,6 +20,7 @@ struct tcf_common {
20 struct gnet_stats_queue tcfc_qstats; 20 struct gnet_stats_queue tcfc_qstats;
21 struct gnet_stats_rate_est tcfc_rate_est; 21 struct gnet_stats_rate_est tcfc_rate_est;
22 spinlock_t tcfc_lock; 22 spinlock_t tcfc_lock;
23 struct rcu_head tcfc_rcu;
23}; 24};
24#define tcf_next common.tcfc_next 25#define tcf_next common.tcfc_next
25#define tcf_index common.tcfc_index 26#define tcf_index common.tcfc_index
@@ -32,6 +33,7 @@ struct tcf_common {
32#define tcf_qstats common.tcfc_qstats 33#define tcf_qstats common.tcfc_qstats
33#define tcf_rate_est common.tcfc_rate_est 34#define tcf_rate_est common.tcfc_rate_est
34#define tcf_lock common.tcfc_lock 35#define tcf_lock common.tcfc_lock
36#define tcf_rcu common.tcfc_rcu
35 37
36struct tcf_police { 38struct tcf_police {
37 struct tcf_common common; 39 struct tcf_common common;
diff --git a/include/net/netfilter/xt_rateest.h b/include/net/netfilter/xt_rateest.h
index ddbf37e19616..5e1427795928 100644
--- a/include/net/netfilter/xt_rateest.h
+++ b/include/net/netfilter/xt_rateest.h
@@ -9,6 +9,7 @@ struct xt_rateest {
9 struct gnet_estimator params; 9 struct gnet_estimator params;
10 struct gnet_stats_rate_est rstats; 10 struct gnet_stats_rate_est rstats;
11 struct gnet_stats_basic_packed bstats; 11 struct gnet_stats_basic_packed bstats;
12 struct rcu_head rcu;
12}; 13};
13 14
14extern struct xt_rateest *xt_rateest_lookup(const char *name); 15extern struct xt_rateest *xt_rateest_lookup(const char *name);