aboutsummaryrefslogtreecommitdiffstats
path: root/net/sched/sch_drr.c
diff options
context:
space:
mode:
authorSasha Levin <sasha.levin@oracle.com>2013-02-27 20:06:00 -0500
committerLinus Torvalds <torvalds@linux-foundation.org>2013-02-27 22:10:24 -0500
commitb67bfe0d42cac56c512dd5da4b1b347a23f4b70a (patch)
tree3d465aea12b97683f26ffa38eba8744469de9997 /net/sched/sch_drr.c
parent1e142b29e210b5dfb2deeb6ce2210b60af16d2a6 (diff)
hlist: drop the node parameter from iterators
I'm not sure why, but the hlist for each entry iterators were conceived list_for_each_entry(pos, head, member) The hlist ones were greedy and wanted an extra parameter: hlist_for_each_entry(tpos, pos, head, member) Why did they need an extra pos parameter? I'm not quite sure. Not only they don't really need it, it also prevents the iterator from looking exactly like the list iterator, which is unfortunate. Besides the semantic patch, there was some manual work required: - Fix up the actual hlist iterators in linux/list.h - Fix up the declaration of other iterators based on the hlist ones. - A very small amount of places were using the 'node' parameter, this was modified to use 'obj->member' instead. - Coccinelle didn't handle the hlist_for_each_entry_safe iterator properly, so those had to be fixed up manually. The semantic patch which is mostly the work of Peter Senna Tschudin is here: @@ iterator name hlist_for_each_entry, hlist_for_each_entry_continue, hlist_for_each_entry_from, hlist_for_each_entry_rcu, hlist_for_each_entry_rcu_bh, hlist_for_each_entry_continue_rcu_bh, for_each_busy_worker, ax25_uid_for_each, ax25_for_each, inet_bind_bucket_for_each, sctp_for_each_hentry, sk_for_each, sk_for_each_rcu, sk_for_each_from, sk_for_each_safe, sk_for_each_bound, hlist_for_each_entry_safe, hlist_for_each_entry_continue_rcu, nr_neigh_for_each, nr_neigh_for_each_safe, nr_node_for_each, nr_node_for_each_safe, for_each_gfn_indirect_valid_sp, for_each_gfn_sp, for_each_host; type T; expression a,c,d,e; identifier b; statement S; @@ -T b; <+... when != b ( hlist_for_each_entry(a, - b, c, d) S | hlist_for_each_entry_continue(a, - b, c) S | hlist_for_each_entry_from(a, - b, c) S | hlist_for_each_entry_rcu(a, - b, c, d) S | hlist_for_each_entry_rcu_bh(a, - b, c, d) S | hlist_for_each_entry_continue_rcu_bh(a, - b, c) S | for_each_busy_worker(a, c, - b, d) S | ax25_uid_for_each(a, - b, c) S | ax25_for_each(a, - b, c) S | inet_bind_bucket_for_each(a, - b, c) S | sctp_for_each_hentry(a, - b, c) S | sk_for_each(a, - b, c) S | sk_for_each_rcu(a, - b, c) S | sk_for_each_from -(a, b) +(a) S + sk_for_each_from(a) S | sk_for_each_safe(a, - b, c, d) S | sk_for_each_bound(a, - b, c) S | hlist_for_each_entry_safe(a, - b, c, d, e) S | hlist_for_each_entry_continue_rcu(a, - b, c) S | nr_neigh_for_each(a, - b, c) S | nr_neigh_for_each_safe(a, - b, c, d) S | nr_node_for_each(a, - b, c) S | nr_node_for_each_safe(a, - b, c, d) S | - for_each_gfn_sp(a, c, d, b) S + for_each_gfn_sp(a, c, d) S | - for_each_gfn_indirect_valid_sp(a, c, d, b) S + for_each_gfn_indirect_valid_sp(a, c, d) S | for_each_host(a, - b, c) S | for_each_host_safe(a, - b, c, d) S | for_each_mesh_entry(a, - b, c, d) S ) ...+> [akpm@linux-foundation.org: drop bogus change from net/ipv4/raw.c] [akpm@linux-foundation.org: drop bogus hunk from net/ipv6/raw.c] [akpm@linux-foundation.org: checkpatch fixes] [akpm@linux-foundation.org: fix warnings] [akpm@linux-foudnation.org: redo intrusive kvm changes] Tested-by: Peter Senna Tschudin <peter.senna@gmail.com> Acked-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com> Signed-off-by: Sasha Levin <sasha.levin@oracle.com> Cc: Wu Fengguang <fengguang.wu@intel.com> Cc: Marcelo Tosatti <mtosatti@redhat.com> Cc: Gleb Natapov <gleb@redhat.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'net/sched/sch_drr.c')
-rw-r--r--net/sched/sch_drr.c10
1 files changed, 4 insertions, 6 deletions
diff --git a/net/sched/sch_drr.c b/net/sched/sch_drr.c
index 71e50c80315f..759b308d1a8d 100644
--- a/net/sched/sch_drr.c
+++ b/net/sched/sch_drr.c
@@ -293,14 +293,13 @@ static void drr_walk(struct Qdisc *sch, struct qdisc_walker *arg)
293{ 293{
294 struct drr_sched *q = qdisc_priv(sch); 294 struct drr_sched *q = qdisc_priv(sch);
295 struct drr_class *cl; 295 struct drr_class *cl;
296 struct hlist_node *n;
297 unsigned int i; 296 unsigned int i;
298 297
299 if (arg->stop) 298 if (arg->stop)
300 return; 299 return;
301 300
302 for (i = 0; i < q->clhash.hashsize; i++) { 301 for (i = 0; i < q->clhash.hashsize; i++) {
303 hlist_for_each_entry(cl, n, &q->clhash.hash[i], common.hnode) { 302 hlist_for_each_entry(cl, &q->clhash.hash[i], common.hnode) {
304 if (arg->count < arg->skip) { 303 if (arg->count < arg->skip) {
305 arg->count++; 304 arg->count++;
306 continue; 305 continue;
@@ -451,11 +450,10 @@ static void drr_reset_qdisc(struct Qdisc *sch)
451{ 450{
452 struct drr_sched *q = qdisc_priv(sch); 451 struct drr_sched *q = qdisc_priv(sch);
453 struct drr_class *cl; 452 struct drr_class *cl;
454 struct hlist_node *n;
455 unsigned int i; 453 unsigned int i;
456 454
457 for (i = 0; i < q->clhash.hashsize; i++) { 455 for (i = 0; i < q->clhash.hashsize; i++) {
458 hlist_for_each_entry(cl, n, &q->clhash.hash[i], common.hnode) { 456 hlist_for_each_entry(cl, &q->clhash.hash[i], common.hnode) {
459 if (cl->qdisc->q.qlen) 457 if (cl->qdisc->q.qlen)
460 list_del(&cl->alist); 458 list_del(&cl->alist);
461 qdisc_reset(cl->qdisc); 459 qdisc_reset(cl->qdisc);
@@ -468,13 +466,13 @@ static void drr_destroy_qdisc(struct Qdisc *sch)
468{ 466{
469 struct drr_sched *q = qdisc_priv(sch); 467 struct drr_sched *q = qdisc_priv(sch);
470 struct drr_class *cl; 468 struct drr_class *cl;
471 struct hlist_node *n, *next; 469 struct hlist_node *next;
472 unsigned int i; 470 unsigned int i;
473 471
474 tcf_destroy_chain(&q->filter_list); 472 tcf_destroy_chain(&q->filter_list);
475 473
476 for (i = 0; i < q->clhash.hashsize; i++) { 474 for (i = 0; i < q->clhash.hashsize; i++) {
477 hlist_for_each_entry_safe(cl, n, next, &q->clhash.hash[i], 475 hlist_for_each_entry_safe(cl, next, &q->clhash.hash[i],
478 common.hnode) 476 common.hnode)
479 drr_destroy_class(sch, cl); 477 drr_destroy_class(sch, cl);
480 } 478 }