mirror of
https://github.com/torvalds/linux.git
synced 2024-11-10 22:21:40 +00:00
net_sched: introduce qdisc_replace() helper
Remove nearly duplicated code and prepare for the following patch. Cc: Jamal Hadi Salim <jhs@mojatatu.com> Acked-by: Jamal Hadi Salim <jhs@mojatatu.com> Signed-off-by: Cong Wang <xiyou.wangcong@gmail.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
f12d33f4d8
commit
86a7996cc8
@ -707,6 +707,23 @@ static inline void qdisc_reset_queue(struct Qdisc *sch)
|
||||
sch->qstats.backlog = 0;
|
||||
}
|
||||
|
||||
static inline struct Qdisc *qdisc_replace(struct Qdisc *sch, struct Qdisc *new,
|
||||
struct Qdisc **pold)
|
||||
{
|
||||
struct Qdisc *old;
|
||||
|
||||
sch_tree_lock(sch);
|
||||
old = *pold;
|
||||
*pold = new;
|
||||
if (old != NULL) {
|
||||
qdisc_tree_decrease_qlen(old, old->q.qlen);
|
||||
qdisc_reset(old);
|
||||
}
|
||||
sch_tree_unlock(sch);
|
||||
|
||||
return old;
|
||||
}
|
||||
|
||||
static inline unsigned int __qdisc_queue_drop(struct Qdisc *sch,
|
||||
struct sk_buff_head *list)
|
||||
{
|
||||
|
@ -1624,13 +1624,8 @@ static int cbq_graft(struct Qdisc *sch, unsigned long arg, struct Qdisc *new,
|
||||
new->reshape_fail = cbq_reshape_fail;
|
||||
#endif
|
||||
}
|
||||
sch_tree_lock(sch);
|
||||
*old = cl->q;
|
||||
cl->q = new;
|
||||
qdisc_tree_decrease_qlen(*old, (*old)->q.qlen);
|
||||
qdisc_reset(*old);
|
||||
sch_tree_unlock(sch);
|
||||
|
||||
*old = qdisc_replace(sch, new, &cl->q);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -226,11 +226,7 @@ static int drr_graft_class(struct Qdisc *sch, unsigned long arg,
|
||||
new = &noop_qdisc;
|
||||
}
|
||||
|
||||
sch_tree_lock(sch);
|
||||
drr_purge_queue(cl);
|
||||
*old = cl->qdisc;
|
||||
cl->qdisc = new;
|
||||
sch_tree_unlock(sch);
|
||||
*old = qdisc_replace(sch, new, &cl->qdisc);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -73,13 +73,7 @@ static int dsmark_graft(struct Qdisc *sch, unsigned long arg,
|
||||
new = &noop_qdisc;
|
||||
}
|
||||
|
||||
sch_tree_lock(sch);
|
||||
*old = p->q;
|
||||
p->q = new;
|
||||
qdisc_tree_decrease_qlen(*old, (*old)->q.qlen);
|
||||
qdisc_reset(*old);
|
||||
sch_tree_unlock(sch);
|
||||
|
||||
*old = qdisc_replace(sch, new, &p->q);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -1215,11 +1215,7 @@ hfsc_graft_class(struct Qdisc *sch, unsigned long arg, struct Qdisc *new,
|
||||
new = &noop_qdisc;
|
||||
}
|
||||
|
||||
sch_tree_lock(sch);
|
||||
hfsc_purge_queue(sch, cl);
|
||||
*old = cl->qdisc;
|
||||
cl->qdisc = new;
|
||||
sch_tree_unlock(sch);
|
||||
*old = qdisc_replace(sch, new, &cl->qdisc);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -1163,14 +1163,7 @@ static int htb_graft(struct Qdisc *sch, unsigned long arg, struct Qdisc *new,
|
||||
cl->common.classid)) == NULL)
|
||||
return -ENOBUFS;
|
||||
|
||||
sch_tree_lock(sch);
|
||||
*old = cl->un.leaf.q;
|
||||
cl->un.leaf.q = new;
|
||||
if (*old != NULL) {
|
||||
qdisc_tree_decrease_qlen(*old, (*old)->q.qlen);
|
||||
qdisc_reset(*old);
|
||||
}
|
||||
sch_tree_unlock(sch);
|
||||
*old = qdisc_replace(sch, new, &cl->un.leaf.q);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -303,13 +303,7 @@ static int multiq_graft(struct Qdisc *sch, unsigned long arg, struct Qdisc *new,
|
||||
if (new == NULL)
|
||||
new = &noop_qdisc;
|
||||
|
||||
sch_tree_lock(sch);
|
||||
*old = q->queues[band];
|
||||
q->queues[band] = new;
|
||||
qdisc_tree_decrease_qlen(*old, (*old)->q.qlen);
|
||||
qdisc_reset(*old);
|
||||
sch_tree_unlock(sch);
|
||||
|
||||
*old = qdisc_replace(sch, new, &q->queues[band]);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -1037,15 +1037,7 @@ static int netem_graft(struct Qdisc *sch, unsigned long arg, struct Qdisc *new,
|
||||
{
|
||||
struct netem_sched_data *q = qdisc_priv(sch);
|
||||
|
||||
sch_tree_lock(sch);
|
||||
*old = q->qdisc;
|
||||
q->qdisc = new;
|
||||
if (*old) {
|
||||
qdisc_tree_decrease_qlen(*old, (*old)->q.qlen);
|
||||
qdisc_reset(*old);
|
||||
}
|
||||
sch_tree_unlock(sch);
|
||||
|
||||
*old = qdisc_replace(sch, new, &q->qdisc);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -268,13 +268,7 @@ static int prio_graft(struct Qdisc *sch, unsigned long arg, struct Qdisc *new,
|
||||
if (new == NULL)
|
||||
new = &noop_qdisc;
|
||||
|
||||
sch_tree_lock(sch);
|
||||
*old = q->queues[band];
|
||||
q->queues[band] = new;
|
||||
qdisc_tree_decrease_qlen(*old, (*old)->q.qlen);
|
||||
qdisc_reset(*old);
|
||||
sch_tree_unlock(sch);
|
||||
|
||||
*old = qdisc_replace(sch, new, &q->queues[band]);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -617,11 +617,7 @@ static int qfq_graft_class(struct Qdisc *sch, unsigned long arg,
|
||||
new = &noop_qdisc;
|
||||
}
|
||||
|
||||
sch_tree_lock(sch);
|
||||
qfq_purge_queue(cl);
|
||||
*old = cl->qdisc;
|
||||
cl->qdisc = new;
|
||||
sch_tree_unlock(sch);
|
||||
*old = qdisc_replace(sch, new, &cl->qdisc);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -313,12 +313,7 @@ static int red_graft(struct Qdisc *sch, unsigned long arg, struct Qdisc *new,
|
||||
if (new == NULL)
|
||||
new = &noop_qdisc;
|
||||
|
||||
sch_tree_lock(sch);
|
||||
*old = q->qdisc;
|
||||
q->qdisc = new;
|
||||
qdisc_tree_decrease_qlen(*old, (*old)->q.qlen);
|
||||
qdisc_reset(*old);
|
||||
sch_tree_unlock(sch);
|
||||
*old = qdisc_replace(sch, new, &q->qdisc);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -606,12 +606,7 @@ static int sfb_graft(struct Qdisc *sch, unsigned long arg, struct Qdisc *new,
|
||||
if (new == NULL)
|
||||
new = &noop_qdisc;
|
||||
|
||||
sch_tree_lock(sch);
|
||||
*old = q->qdisc;
|
||||
q->qdisc = new;
|
||||
qdisc_tree_decrease_qlen(*old, (*old)->q.qlen);
|
||||
qdisc_reset(*old);
|
||||
sch_tree_unlock(sch);
|
||||
*old = qdisc_replace(sch, new, &q->qdisc);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -502,13 +502,7 @@ static int tbf_graft(struct Qdisc *sch, unsigned long arg, struct Qdisc *new,
|
||||
if (new == NULL)
|
||||
new = &noop_qdisc;
|
||||
|
||||
sch_tree_lock(sch);
|
||||
*old = q->qdisc;
|
||||
q->qdisc = new;
|
||||
qdisc_tree_decrease_qlen(*old, (*old)->q.qlen);
|
||||
qdisc_reset(*old);
|
||||
sch_tree_unlock(sch);
|
||||
|
||||
*old = qdisc_replace(sch, new, &q->qdisc);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user