Skip to content

Commit

Permalink
pkt_sched: remove unnecessary xchg() in packet classifiers
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
Patrick McHardy authored and David S. Miller committed Nov 20, 2008
1 parent b94c8af commit 47a1a1d
Show file tree
Hide file tree
Showing 7 changed files with 12 additions and 18 deletions.
3 changes: 2 additions & 1 deletion net/sched/cls_api.c
Original file line number Diff line number Diff line change
Expand Up @@ -531,7 +531,8 @@ void tcf_exts_change(struct tcf_proto *tp, struct tcf_exts *dst,
if (src->action) {
struct tc_action *act;
tcf_tree_lock(tp);
act = xchg(&dst->action, src->action);
act = dst->action;
dst->action = src->action;
tcf_tree_unlock(tp);
if (act)
tcf_action_destroy(act, TCA_ACT_UNBIND);
Expand Down
2 changes: 1 addition & 1 deletion net/sched/cls_basic.c
Original file line number Diff line number Diff line change
Expand Up @@ -102,7 +102,7 @@ static inline void basic_delete_filter(struct tcf_proto *tp,

static void basic_destroy(struct tcf_proto *tp)
{
struct basic_head *head = (struct basic_head *) xchg(&tp->root, NULL);
struct basic_head *head = tp->root;
struct basic_filter *f, *n;

list_for_each_entry_safe(f, n, &head->flist, link) {
Expand Down
4 changes: 1 addition & 3 deletions net/sched/cls_cgroup.c
Original file line number Diff line number Diff line change
Expand Up @@ -201,9 +201,7 @@ static int cls_cgroup_change(struct tcf_proto *tp, unsigned long base,

static void cls_cgroup_destroy(struct tcf_proto *tp)
{
struct cls_cgroup_head *head;

head = (struct cls_cgroup_head *)xchg(&tp->root, NULL);
struct cls_cgroup_head *head = tp->root;

if (head) {
tcf_exts_destroy(tp, &head->exts);
Expand Down
2 changes: 1 addition & 1 deletion net/sched/cls_fw.c
Original file line number Diff line number Diff line change
Expand Up @@ -148,7 +148,7 @@ fw_delete_filter(struct tcf_proto *tp, struct fw_filter *f)

static void fw_destroy(struct tcf_proto *tp)
{
struct fw_head *head = (struct fw_head*)xchg(&tp->root, NULL);
struct fw_head *head = tp->root;
struct fw_filter *f;
int h;

Expand Down
2 changes: 1 addition & 1 deletion net/sched/cls_route.c
Original file line number Diff line number Diff line change
Expand Up @@ -260,7 +260,7 @@ route4_delete_filter(struct tcf_proto *tp, struct route4_filter *f)

static void route4_destroy(struct tcf_proto *tp)
{
struct route4_head *head = xchg(&tp->root, NULL);
struct route4_head *head = tp->root;
int h1, h2;

if (head == NULL)
Expand Down
6 changes: 0 additions & 6 deletions net/sched/cls_tcindex.c
Original file line number Diff line number Diff line change
Expand Up @@ -13,12 +13,6 @@
#include <net/netlink.h>
#include <net/pkt_cls.h>


/*
* Not quite sure if we need all the xchgs Alexey uses when accessing things.
* Can always add them later ... :)
*/

/*
* Passing parameters to the root seems to be done more awkwardly than really
* necessary. At least, u32 doesn't seem to use such dirty hacks. To be
Expand Down
11 changes: 6 additions & 5 deletions net/sched/cls_u32.c
Original file line number Diff line number Diff line change
Expand Up @@ -387,7 +387,7 @@ static int u32_destroy_hnode(struct tcf_proto *tp, struct tc_u_hnode *ht)
static void u32_destroy(struct tcf_proto *tp)
{
struct tc_u_common *tp_c = tp->data;
struct tc_u_hnode *root_ht = xchg(&tp->root, NULL);
struct tc_u_hnode *root_ht = tp->root;

WARN_ON(root_ht == NULL);

Expand Down Expand Up @@ -479,7 +479,7 @@ static int u32_set_parms(struct tcf_proto *tp, unsigned long base,
err = -EINVAL;
if (tb[TCA_U32_LINK]) {
u32 handle = nla_get_u32(tb[TCA_U32_LINK]);
struct tc_u_hnode *ht_down = NULL;
struct tc_u_hnode *ht_down = NULL, *ht_old;

if (TC_U32_KEY(handle))
goto errout;
Expand All @@ -493,11 +493,12 @@ static int u32_set_parms(struct tcf_proto *tp, unsigned long base,
}

tcf_tree_lock(tp);
ht_down = xchg(&n->ht_down, ht_down);
ht_old = n->ht_down;
n->ht_down = ht_down;
tcf_tree_unlock(tp);

if (ht_down)
ht_down->refcnt--;
if (ht_old)
ht_old->refcnt--;
}
if (tb[TCA_U32_CLASSID]) {
n->res.classid = nla_get_u32(tb[TCA_U32_CLASSID]);
Expand Down

0 comments on commit 47a1a1d

Please sign in to comment.