From: Al Viro <viro@ZenIV.linux.org.uk>
To: netdev@vger.kernel.org
Cc: Jamal Hadi Salim <jhs@mojatatu.com>,
Cong Wang <xiyou.wangcong@gmail.com>,
Jiri Pirko <jiri@resnulli.us>
Subject: [PATCH net 13/13] net: sched: cls_u32: simplify the hell out u32_delete() emptiness check
Date: Sun, 9 Sep 2018 02:31:32 +0100 [thread overview]
Message-ID: <20180909013132.3222-14-viro@ZenIV.linux.org.uk> (raw)
In-Reply-To: <20180909013132.3222-1-viro@ZenIV.linux.org.uk>
From: Al Viro <viro@zeniv.linux.org.uk>
Now that we have the knode count, we can instantly check if
any hnodes are non-empty. And that kills the check for extra
references to root hnode - those could happen only if there was
a knode to carry such a link.
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
---
net/sched/cls_u32.c | 48 +-----------------------------------------------
1 file changed, 1 insertion(+), 47 deletions(-)
diff --git a/net/sched/cls_u32.c b/net/sched/cls_u32.c
index 86cbe4f5800e..ef786ec24843 100644
--- a/net/sched/cls_u32.c
+++ b/net/sched/cls_u32.c
@@ -628,17 +628,6 @@ static int u32_destroy_hnode(struct tcf_proto *tp, struct tc_u_hnode *ht,
return -ENOENT;
}
-static bool ht_empty(struct tc_u_hnode *ht)
-{
- unsigned int h;
-
- for (h = 0; h <= ht->divisor; h++)
- if (rcu_access_pointer(ht->ht[h]))
- return false;
-
- return true;
-}
-
static void u32_destroy(struct tcf_proto *tp, struct netlink_ext_ack *extack)
{
struct tc_u_common *tp_c = tp->data;
@@ -676,13 +665,9 @@ static int u32_delete(struct tcf_proto *tp, void *arg, bool *last,
struct netlink_ext_ack *extack)
{
struct tc_u_hnode *ht = arg;
- struct tc_u_hnode *root_ht = rtnl_dereference(tp->root);
struct tc_u_common *tp_c = tp->data;
int ret = 0;
- if (ht == NULL)
- goto out;
-
if (TC_U32_KEY(ht->handle)) {
u32_remove_hw_knode(tp, (struct tc_u_knode *)ht, extack);
ret = u32_delete_key(tp, (struct tc_u_knode *)ht);
@@ -702,38 +687,7 @@ static int u32_delete(struct tcf_proto *tp, void *arg, bool *last,
}
out:
- *last = true;
- if (root_ht) {
- if (root_ht->refcnt > 2) {
- *last = false;
- goto ret;
- }
- if (root_ht->refcnt == 2) {
- if (!ht_empty(root_ht)) {
- *last = false;
- goto ret;
- }
- }
- }
-
- if (tp_c->refcnt > 1) {
- *last = false;
- goto ret;
- }
-
- if (tp_c->refcnt == 1) {
- struct tc_u_hnode *ht;
-
- for (ht = rtnl_dereference(tp_c->hlist);
- ht;
- ht = rtnl_dereference(ht->next))
- if (!ht_empty(ht)) {
- *last = false;
- break;
- }
- }
-
-ret:
+ *last = tp_c->refcnt == 1 && tp_c->knodes == 0;
return ret;
}
--
2.11.0
next prev parent reply other threads:[~2018-09-09 6:26 UTC|newest]
Thread overview: 35+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-09-09 1:31 [PATCH net 00/13] cls_u32 cleanups and fixes Al Viro
2018-09-09 1:31 ` [PATCH net 01/13] net: sched: cls_u32: fix hnode refcounting Al Viro
2018-09-09 11:37 ` Jamal Hadi Salim
2018-09-09 11:37 ` Jamal Hadi Salim
2018-09-09 1:31 ` [PATCH net 02/13] net: sched: cls_u32: mark root hnode explicitly Al Viro
2018-09-09 11:39 ` Jamal Hadi Salim
2018-09-09 1:31 ` [PATCH net 03/13] net: sched: cls_u32: disallow linking to root hnode Al Viro
2018-09-09 11:39 ` Jamal Hadi Salim
2018-09-09 1:31 ` [PATCH net 04/13] net: sched: cls_u32: make sure that divisor is a power of 2 Al Viro
2018-09-09 11:41 ` Jamal Hadi Salim
2018-09-09 1:31 ` [PATCH net 05/13] net: sched: cls_u32: get rid of unused argument of u32_destroy_key() Al Viro
2018-09-09 11:41 ` Jamal Hadi Salim
2018-09-09 1:31 ` [PATCH net 06/13] net: sched: cls_u32: get rid of tc_u_knode ->tp Al Viro
2018-09-09 11:43 ` Jamal Hadi Salim
2018-09-09 1:31 ` [PATCH net 07/13] net: sched: cls_u32: get rid of tc_u_common ->rcu Al Viro
2018-09-09 11:45 ` Jamal Hadi Salim
2018-09-09 1:31 ` [PATCH net 08/13] net: sched: cls_u32: clean tc_u_common hashtable Al Viro
2018-09-09 11:47 ` Jamal Hadi Salim
2018-09-09 1:31 ` [PATCH net 09/13] net: sched: cls_u32: pass tc_u_common to u32_set_parms() instead of tc_u_hnode Al Viro
2018-09-09 11:52 ` Jamal Hadi Salim
2018-09-09 1:31 ` [PATCH net 10/13] net: sched: cls_u32: the tp_c argument of u32_set_parms() is always tp->data Al Viro
2018-09-09 12:48 ` Jamal Hadi Salim
2018-09-09 1:31 ` [PATCH net 11/13] net: sched: cls_u32: get rid of hnode ->tp_c and tp_c argument of u32_set_parms() Al Viro
2018-09-09 12:49 ` Jamal Hadi Salim
2018-09-09 1:31 ` [PATCH net 12/13] net: sched: cls_u32: keep track of knodes count in tc_u_common Al Viro
2018-09-09 12:50 ` Jamal Hadi Salim
2018-09-09 1:31 ` Al Viro [this message]
2018-09-09 12:51 ` [PATCH net 13/13] net: sched: cls_u32: simplify the hell out u32_delete() emptiness check Jamal Hadi Salim
2018-09-09 12:58 ` [PATCH net 00/13] cls_u32 cleanups and fixes Jamal Hadi Salim
2018-09-09 14:15 ` Al Viro
2018-09-09 15:48 ` Al Viro
2018-09-10 12:25 ` Offloaded u32 classifier tables WAS (Re: " Jamal Hadi Salim
2018-09-10 12:31 ` Jamal Hadi Salim
2018-09-10 11:30 ` Jamal Hadi Salim
2018-09-12 6:15 ` David Miller
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20180909013132.3222-14-viro@ZenIV.linux.org.uk \
--to=viro@zeniv.linux.org.uk \
--cc=jhs@mojatatu.com \
--cc=jiri@resnulli.us \
--cc=netdev@vger.kernel.org \
--cc=xiyou.wangcong@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.