提交 821fb387 编写于 作者: S Stefano Brivio 提交者: Yang Yingliang

netfilter: nft_set_rbtree: Introduce and use nft_rbtree_interval_start()

stable inclusion
from linux-4.19.124
commit 358254300b7bea42924ce3187e6520c242d2953a

--------------------------------

[ Upstream commit 6f7c9caf ]

Replace negations of nft_rbtree_interval_end() with a new helper,
nft_rbtree_interval_start(), wherever this helps to visualise the
problem at hand, that is, for all the occurrences except for the
comparison against given flags in __nft_rbtree_get().

This gets especially useful in the next patch.
Signed-off-by: NStefano Brivio <sbrivio@redhat.com>
Signed-off-by: NPablo Neira Ayuso <pablo@netfilter.org>
Signed-off-by: NSasha Levin <sashal@kernel.org>
Signed-off-by: NYang Yingliang <yangyingliang@huawei.com>
Signed-off-by: NLi Aichun <liaichun@huawei.com>
Reviewed-by: Nguodeqing <geffrey.guo@huawei.com>
Signed-off-by: NYang Yingliang <yangyingliang@huawei.com>
上级 62825541
...@@ -36,6 +36,11 @@ static bool nft_rbtree_interval_end(const struct nft_rbtree_elem *rbe) ...@@ -36,6 +36,11 @@ static bool nft_rbtree_interval_end(const struct nft_rbtree_elem *rbe)
(*nft_set_ext_flags(&rbe->ext) & NFT_SET_ELEM_INTERVAL_END); (*nft_set_ext_flags(&rbe->ext) & NFT_SET_ELEM_INTERVAL_END);
} }
static bool nft_rbtree_interval_start(const struct nft_rbtree_elem *rbe)
{
return !nft_rbtree_interval_end(rbe);
}
static bool nft_rbtree_equal(const struct nft_set *set, const void *this, static bool nft_rbtree_equal(const struct nft_set *set, const void *this,
const struct nft_rbtree_elem *interval) const struct nft_rbtree_elem *interval)
{ {
...@@ -67,7 +72,7 @@ static bool __nft_rbtree_lookup(const struct net *net, const struct nft_set *set ...@@ -67,7 +72,7 @@ static bool __nft_rbtree_lookup(const struct net *net, const struct nft_set *set
if (interval && if (interval &&
nft_rbtree_equal(set, this, interval) && nft_rbtree_equal(set, this, interval) &&
nft_rbtree_interval_end(rbe) && nft_rbtree_interval_end(rbe) &&
!nft_rbtree_interval_end(interval)) nft_rbtree_interval_start(interval))
continue; continue;
interval = rbe; interval = rbe;
} else if (d > 0) } else if (d > 0)
...@@ -92,7 +97,7 @@ static bool __nft_rbtree_lookup(const struct net *net, const struct nft_set *set ...@@ -92,7 +97,7 @@ static bool __nft_rbtree_lookup(const struct net *net, const struct nft_set *set
if (set->flags & NFT_SET_INTERVAL && interval != NULL && if (set->flags & NFT_SET_INTERVAL && interval != NULL &&
nft_set_elem_active(&interval->ext, genmask) && nft_set_elem_active(&interval->ext, genmask) &&
!nft_rbtree_interval_end(interval)) { nft_rbtree_interval_start(interval)) {
*ext = &interval->ext; *ext = &interval->ext;
return true; return true;
} }
...@@ -227,9 +232,9 @@ static int __nft_rbtree_insert(const struct net *net, const struct nft_set *set, ...@@ -227,9 +232,9 @@ static int __nft_rbtree_insert(const struct net *net, const struct nft_set *set,
p = &parent->rb_right; p = &parent->rb_right;
else { else {
if (nft_rbtree_interval_end(rbe) && if (nft_rbtree_interval_end(rbe) &&
!nft_rbtree_interval_end(new)) { nft_rbtree_interval_start(new)) {
p = &parent->rb_left; p = &parent->rb_left;
} else if (!nft_rbtree_interval_end(rbe) && } else if (nft_rbtree_interval_start(rbe) &&
nft_rbtree_interval_end(new)) { nft_rbtree_interval_end(new)) {
p = &parent->rb_right; p = &parent->rb_right;
} else if (nft_set_elem_active(&rbe->ext, genmask)) { } else if (nft_set_elem_active(&rbe->ext, genmask)) {
...@@ -320,10 +325,10 @@ static void *nft_rbtree_deactivate(const struct net *net, ...@@ -320,10 +325,10 @@ static void *nft_rbtree_deactivate(const struct net *net,
parent = parent->rb_right; parent = parent->rb_right;
else { else {
if (nft_rbtree_interval_end(rbe) && if (nft_rbtree_interval_end(rbe) &&
!nft_rbtree_interval_end(this)) { nft_rbtree_interval_start(this)) {
parent = parent->rb_left; parent = parent->rb_left;
continue; continue;
} else if (!nft_rbtree_interval_end(rbe) && } else if (nft_rbtree_interval_start(rbe) &&
nft_rbtree_interval_end(this)) { nft_rbtree_interval_end(this)) {
parent = parent->rb_right; parent = parent->rb_right;
continue; continue;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册