diff options
author | Changli Gao <xiaosuo@gmail.com> | 2010-08-02 11:06:19 -0400 |
---|---|---|
committer | Patrick McHardy <kaber@trash.net> | 2010-08-02 11:06:19 -0400 |
commit | ee92d37861a90b8f14fa621ae5abcfb29a89aaa9 (patch) | |
tree | ead832fad372e9802d51914ebd6a8f3ce8edd4ce /net | |
parent | 24b36f0193467fa727b85b4c004016a8dae999b9 (diff) |
netfilter: nf_conntrack_extend: introduce __nf_ct_ext_exist()
some users of nf_ct_ext_exist() know ct->ext isn't NULL. For these users, the
check for ct->ext isn't necessary, the function __nf_ct_ext_exist() can be
used instead.
the type of the return value of nf_ct_ext_exist() is changed to bool.
Signed-off-by: Changli Gao <xiaosuo@gmail.com>
Signed-off-by: Patrick McHardy <kaber@trash.net>
Diffstat (limited to 'net')
-rw-r--r-- | net/netfilter/nf_conntrack_extend.c | 22 |
1 files changed, 12 insertions, 10 deletions
diff --git a/net/netfilter/nf_conntrack_extend.c b/net/netfilter/nf_conntrack_extend.c index fdc8fb4ae10f..7dcf7a404190 100644 --- a/net/netfilter/nf_conntrack_extend.c +++ b/net/netfilter/nf_conntrack_extend.c | |||
@@ -23,9 +23,10 @@ void __nf_ct_ext_destroy(struct nf_conn *ct) | |||
23 | { | 23 | { |
24 | unsigned int i; | 24 | unsigned int i; |
25 | struct nf_ct_ext_type *t; | 25 | struct nf_ct_ext_type *t; |
26 | struct nf_ct_ext *ext = ct->ext; | ||
26 | 27 | ||
27 | for (i = 0; i < NF_CT_EXT_NUM; i++) { | 28 | for (i = 0; i < NF_CT_EXT_NUM; i++) { |
28 | if (!nf_ct_ext_exist(ct, i)) | 29 | if (!__nf_ct_ext_exist(ext, i)) |
29 | continue; | 30 | continue; |
30 | 31 | ||
31 | rcu_read_lock(); | 32 | rcu_read_lock(); |
@@ -73,44 +74,45 @@ static void __nf_ct_ext_free_rcu(struct rcu_head *head) | |||
73 | 74 | ||
74 | void *__nf_ct_ext_add(struct nf_conn *ct, enum nf_ct_ext_id id, gfp_t gfp) | 75 | void *__nf_ct_ext_add(struct nf_conn *ct, enum nf_ct_ext_id id, gfp_t gfp) |
75 | { | 76 | { |
76 | struct nf_ct_ext *new; | 77 | struct nf_ct_ext *old, *new; |
77 | int i, newlen, newoff; | 78 | int i, newlen, newoff; |
78 | struct nf_ct_ext_type *t; | 79 | struct nf_ct_ext_type *t; |
79 | 80 | ||
80 | /* Conntrack must not be confirmed to avoid races on reallocation. */ | 81 | /* Conntrack must not be confirmed to avoid races on reallocation. */ |
81 | NF_CT_ASSERT(!nf_ct_is_confirmed(ct)); | 82 | NF_CT_ASSERT(!nf_ct_is_confirmed(ct)); |
82 | 83 | ||
83 | if (!ct->ext) | 84 | old = ct->ext; |
85 | if (!old) | ||
84 | return nf_ct_ext_create(&ct->ext, id, gfp); | 86 | return nf_ct_ext_create(&ct->ext, id, gfp); |
85 | 87 | ||
86 | if (nf_ct_ext_exist(ct, id)) | 88 | if (__nf_ct_ext_exist(old, id)) |
87 | return NULL; | 89 | return NULL; |
88 | 90 | ||
89 | rcu_read_lock(); | 91 | rcu_read_lock(); |
90 | t = rcu_dereference(nf_ct_ext_types[id]); | 92 | t = rcu_dereference(nf_ct_ext_types[id]); |
91 | BUG_ON(t == NULL); | 93 | BUG_ON(t == NULL); |
92 | 94 | ||
93 | newoff = ALIGN(ct->ext->len, t->align); | 95 | newoff = ALIGN(old->len, t->align); |
94 | newlen = newoff + t->len; | 96 | newlen = newoff + t->len; |
95 | rcu_read_unlock(); | 97 | rcu_read_unlock(); |
96 | 98 | ||
97 | new = __krealloc(ct->ext, newlen, gfp); | 99 | new = __krealloc(old, newlen, gfp); |
98 | if (!new) | 100 | if (!new) |
99 | return NULL; | 101 | return NULL; |
100 | 102 | ||
101 | if (new != ct->ext) { | 103 | if (new != old) { |
102 | for (i = 0; i < NF_CT_EXT_NUM; i++) { | 104 | for (i = 0; i < NF_CT_EXT_NUM; i++) { |
103 | if (!nf_ct_ext_exist(ct, i)) | 105 | if (!__nf_ct_ext_exist(old, i)) |
104 | continue; | 106 | continue; |
105 | 107 | ||
106 | rcu_read_lock(); | 108 | rcu_read_lock(); |
107 | t = rcu_dereference(nf_ct_ext_types[i]); | 109 | t = rcu_dereference(nf_ct_ext_types[i]); |
108 | if (t && t->move) | 110 | if (t && t->move) |
109 | t->move((void *)new + new->offset[i], | 111 | t->move((void *)new + new->offset[i], |
110 | (void *)ct->ext + ct->ext->offset[i]); | 112 | (void *)old + old->offset[i]); |
111 | rcu_read_unlock(); | 113 | rcu_read_unlock(); |
112 | } | 114 | } |
113 | call_rcu(&ct->ext->rcu, __nf_ct_ext_free_rcu); | 115 | call_rcu(&old->rcu, __nf_ct_ext_free_rcu); |
114 | ct->ext = new; | 116 | ct->ext = new; |
115 | } | 117 | } |
116 | 118 | ||