aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--net/netfilter/nft_rbtree.c6
1 files changed, 2 insertions, 4 deletions
diff --git a/net/netfilter/nft_rbtree.c b/net/netfilter/nft_rbtree.c
index 46214f245665..2c75361077f7 100644
--- a/net/netfilter/nft_rbtree.c
+++ b/net/netfilter/nft_rbtree.c
@@ -37,10 +37,11 @@ static bool nft_rbtree_lookup(const struct nft_set *set,
37{ 37{
38 const struct nft_rbtree *priv = nft_set_priv(set); 38 const struct nft_rbtree *priv = nft_set_priv(set);
39 const struct nft_rbtree_elem *rbe, *interval = NULL; 39 const struct nft_rbtree_elem *rbe, *interval = NULL;
40 const struct rb_node *parent = priv->root.rb_node; 40 const struct rb_node *parent;
41 int d; 41 int d;
42 42
43 spin_lock_bh(&nft_rbtree_lock); 43 spin_lock_bh(&nft_rbtree_lock);
44 parent = priv->root.rb_node;
44 while (parent != NULL) { 45 while (parent != NULL) {
45 rbe = rb_entry(parent, struct nft_rbtree_elem, node); 46 rbe = rb_entry(parent, struct nft_rbtree_elem, node);
46 47
@@ -158,7 +159,6 @@ static int nft_rbtree_get(const struct nft_set *set, struct nft_set_elem *elem)
158 struct nft_rbtree_elem *rbe; 159 struct nft_rbtree_elem *rbe;
159 int d; 160 int d;
160 161
161 spin_lock_bh(&nft_rbtree_lock);
162 while (parent != NULL) { 162 while (parent != NULL) {
163 rbe = rb_entry(parent, struct nft_rbtree_elem, node); 163 rbe = rb_entry(parent, struct nft_rbtree_elem, node);
164 164
@@ -173,11 +173,9 @@ static int nft_rbtree_get(const struct nft_set *set, struct nft_set_elem *elem)
173 !(rbe->flags & NFT_SET_ELEM_INTERVAL_END)) 173 !(rbe->flags & NFT_SET_ELEM_INTERVAL_END))
174 nft_data_copy(&elem->data, rbe->data); 174 nft_data_copy(&elem->data, rbe->data);
175 elem->flags = rbe->flags; 175 elem->flags = rbe->flags;
176 spin_unlock_bh(&nft_rbtree_lock);
177 return 0; 176 return 0;
178 } 177 }
179 } 178 }
180 spin_unlock_bh(&nft_rbtree_lock);
181 return -ENOENT; 179 return -ENOENT;
182} 180}
183 181