diff options
author | Patrick McHardy <kaber@trash.net> | 2008-11-19 03:03:09 -0500 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2008-11-20 07:14:28 -0500 |
commit | 47a1a1d4be2910b13a8e90f75c17e253c39531ff (patch) | |
tree | c900f283bd96f0b26236152ada24f9a113f65e2b /net/sched/cls_u32.c | |
parent | b94c8afcba3ae6584653b98e315446ea83be6ea5 (diff) |
pkt_sched: remove unnecessary xchg() in packet classifiers
The use of xchg() hasn't been necessary since 2.2.something when proper
locking was added to packet schedulers. In the case of classifiers they
mostly weren't even necessary before that since they're mainly used
to assign a NULL pointer to the filter root in the ->destroy path;
the root is destroyed immediately after that.
Signed-off-by: Patrick McHardy <kaber@trash.net>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/sched/cls_u32.c')
-rw-r--r-- | net/sched/cls_u32.c | 11 |
1 files changed, 6 insertions, 5 deletions
diff --git a/net/sched/cls_u32.c b/net/sched/cls_u32.c index 246f9065ce34..05d178008cbc 100644 --- a/net/sched/cls_u32.c +++ b/net/sched/cls_u32.c | |||
@@ -387,7 +387,7 @@ static int u32_destroy_hnode(struct tcf_proto *tp, struct tc_u_hnode *ht) | |||
387 | static void u32_destroy(struct tcf_proto *tp) | 387 | static void u32_destroy(struct tcf_proto *tp) |
388 | { | 388 | { |
389 | struct tc_u_common *tp_c = tp->data; | 389 | struct tc_u_common *tp_c = tp->data; |
390 | struct tc_u_hnode *root_ht = xchg(&tp->root, NULL); | 390 | struct tc_u_hnode *root_ht = tp->root; |
391 | 391 | ||
392 | WARN_ON(root_ht == NULL); | 392 | WARN_ON(root_ht == NULL); |
393 | 393 | ||
@@ -479,7 +479,7 @@ static int u32_set_parms(struct tcf_proto *tp, unsigned long base, | |||
479 | err = -EINVAL; | 479 | err = -EINVAL; |
480 | if (tb[TCA_U32_LINK]) { | 480 | if (tb[TCA_U32_LINK]) { |
481 | u32 handle = nla_get_u32(tb[TCA_U32_LINK]); | 481 | u32 handle = nla_get_u32(tb[TCA_U32_LINK]); |
482 | struct tc_u_hnode *ht_down = NULL; | 482 | struct tc_u_hnode *ht_down = NULL, *ht_old; |
483 | 483 | ||
484 | if (TC_U32_KEY(handle)) | 484 | if (TC_U32_KEY(handle)) |
485 | goto errout; | 485 | goto errout; |
@@ -493,11 +493,12 @@ static int u32_set_parms(struct tcf_proto *tp, unsigned long base, | |||
493 | } | 493 | } |
494 | 494 | ||
495 | tcf_tree_lock(tp); | 495 | tcf_tree_lock(tp); |
496 | ht_down = xchg(&n->ht_down, ht_down); | 496 | ht_old = n->ht_down; |
497 | n->ht_down = ht_down; | ||
497 | tcf_tree_unlock(tp); | 498 | tcf_tree_unlock(tp); |
498 | 499 | ||
499 | if (ht_down) | 500 | if (ht_old) |
500 | ht_down->refcnt--; | 501 | ht_old->refcnt--; |
501 | } | 502 | } |
502 | if (tb[TCA_U32_CLASSID]) { | 503 | if (tb[TCA_U32_CLASSID]) { |
503 | n->res.classid = nla_get_u32(tb[TCA_U32_CLASSID]); | 504 | n->res.classid = nla_get_u32(tb[TCA_U32_CLASSID]); |