1 From: WANG Cong <xiyou.wangcong@gmail.com>
2 Date: Thu, 25 Feb 2016 14:55:00 -0800
3 Subject: [PATCH] net_sched: introduce qdisc_replace() helper
5 Remove nearly duplicated code and prepare for the following patch.
7 Cc: Jamal Hadi Salim <jhs@mojatatu.com>
8 Acked-by: Jamal Hadi Salim <jhs@mojatatu.com>
9 Signed-off-by: Cong Wang <xiyou.wangcong@gmail.com>
10 Signed-off-by: David S. Miller <davem@davemloft.net>
13 --- a/include/net/sch_generic.h
14 +++ b/include/net/sch_generic.h
15 @@ -698,6 +698,23 @@ static inline void qdisc_reset_queue(str
16 sch->qstats.backlog = 0;
19 +static inline struct Qdisc *qdisc_replace(struct Qdisc *sch, struct Qdisc *new,
20 + struct Qdisc **pold)
28 + qdisc_tree_decrease_qlen(old, old->q.qlen);
31 + sch_tree_unlock(sch);
36 static inline unsigned int __qdisc_queue_drop(struct Qdisc *sch,
37 struct sk_buff_head *list)
39 --- a/net/sched/sch_cbq.c
40 +++ b/net/sched/sch_cbq.c
41 @@ -1624,13 +1624,8 @@ static int cbq_graft(struct Qdisc *sch,
42 new->reshape_fail = cbq_reshape_fail;
48 - qdisc_tree_decrease_qlen(*old, (*old)->q.qlen);
50 - sch_tree_unlock(sch);
52 + *old = qdisc_replace(sch, new, &cl->q);
56 --- a/net/sched/sch_drr.c
57 +++ b/net/sched/sch_drr.c
58 @@ -226,11 +226,7 @@ static int drr_graft_class(struct Qdisc
63 - drr_purge_queue(cl);
66 - sch_tree_unlock(sch);
67 + *old = qdisc_replace(sch, new, &cl->qdisc);
71 --- a/net/sched/sch_dsmark.c
72 +++ b/net/sched/sch_dsmark.c
73 @@ -73,13 +73,7 @@ static int dsmark_graft(struct Qdisc *sc
80 - qdisc_tree_decrease_qlen(*old, (*old)->q.qlen);
82 - sch_tree_unlock(sch);
84 + *old = qdisc_replace(sch, new, &p->q);
88 --- a/net/sched/sch_hfsc.c
89 +++ b/net/sched/sch_hfsc.c
90 @@ -1215,11 +1215,7 @@ hfsc_graft_class(struct Qdisc *sch, unsi
95 - hfsc_purge_queue(sch, cl);
98 - sch_tree_unlock(sch);
99 + *old = qdisc_replace(sch, new, &cl->qdisc);
103 --- a/net/sched/sch_htb.c
104 +++ b/net/sched/sch_htb.c
105 @@ -1163,14 +1163,7 @@ static int htb_graft(struct Qdisc *sch,
106 cl->common.classid)) == NULL)
109 - sch_tree_lock(sch);
110 - *old = cl->un.leaf.q;
111 - cl->un.leaf.q = new;
112 - if (*old != NULL) {
113 - qdisc_tree_decrease_qlen(*old, (*old)->q.qlen);
116 - sch_tree_unlock(sch);
117 + *old = qdisc_replace(sch, new, &cl->un.leaf.q);
121 --- a/net/sched/sch_multiq.c
122 +++ b/net/sched/sch_multiq.c
123 @@ -303,13 +303,7 @@ static int multiq_graft(struct Qdisc *sc
127 - sch_tree_lock(sch);
128 - *old = q->queues[band];
129 - q->queues[band] = new;
130 - qdisc_tree_decrease_qlen(*old, (*old)->q.qlen);
132 - sch_tree_unlock(sch);
134 + *old = qdisc_replace(sch, new, &q->queues[band]);
138 --- a/net/sched/sch_netem.c
139 +++ b/net/sched/sch_netem.c
140 @@ -1037,15 +1037,7 @@ static int netem_graft(struct Qdisc *sch
142 struct netem_sched_data *q = qdisc_priv(sch);
144 - sch_tree_lock(sch);
148 - qdisc_tree_decrease_qlen(*old, (*old)->q.qlen);
151 - sch_tree_unlock(sch);
153 + *old = qdisc_replace(sch, new, &q->qdisc);
157 --- a/net/sched/sch_prio.c
158 +++ b/net/sched/sch_prio.c
159 @@ -268,13 +268,7 @@ static int prio_graft(struct Qdisc *sch,
163 - sch_tree_lock(sch);
164 - *old = q->queues[band];
165 - q->queues[band] = new;
166 - qdisc_tree_decrease_qlen(*old, (*old)->q.qlen);
168 - sch_tree_unlock(sch);
170 + *old = qdisc_replace(sch, new, &q->queues[band]);
174 --- a/net/sched/sch_qfq.c
175 +++ b/net/sched/sch_qfq.c
176 @@ -617,11 +617,7 @@ static int qfq_graft_class(struct Qdisc
180 - sch_tree_lock(sch);
181 - qfq_purge_queue(cl);
184 - sch_tree_unlock(sch);
185 + *old = qdisc_replace(sch, new, &cl->qdisc);
189 --- a/net/sched/sch_red.c
190 +++ b/net/sched/sch_red.c
191 @@ -313,12 +313,7 @@ static int red_graft(struct Qdisc *sch,
195 - sch_tree_lock(sch);
198 - qdisc_tree_decrease_qlen(*old, (*old)->q.qlen);
200 - sch_tree_unlock(sch);
201 + *old = qdisc_replace(sch, new, &q->qdisc);
205 --- a/net/sched/sch_sfb.c
206 +++ b/net/sched/sch_sfb.c
207 @@ -606,12 +606,7 @@ static int sfb_graft(struct Qdisc *sch,
211 - sch_tree_lock(sch);
214 - qdisc_tree_decrease_qlen(*old, (*old)->q.qlen);
216 - sch_tree_unlock(sch);
217 + *old = qdisc_replace(sch, new, &q->qdisc);
221 --- a/net/sched/sch_tbf.c
222 +++ b/net/sched/sch_tbf.c
223 @@ -502,13 +502,7 @@ static int tbf_graft(struct Qdisc *sch,
227 - sch_tree_lock(sch);
230 - qdisc_tree_decrease_qlen(*old, (*old)->q.qlen);
232 - sch_tree_unlock(sch);
234 + *old = qdisc_replace(sch, new, &q->qdisc);