Patch "net_sched: introduce qdisc_replace() helper" has been added to the 4.4-stable tree
Subsystems (4)
This is a note to let you know that I've just added the patch titled
net_sched: introduce qdisc_replace() helper
to the 4.4-stable tree which can be found at:
http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary
The filename of the patch is:
net_sched-introduce-qdisc_replace-helper.patch
and it can be found in the queue-4.4 subdirectory.
If you, or anyone else, feels it should not be added to the stable tree, please let <[email protected]> know about it.
Quoted 1 line
From foo@baz Mon May 16 11:21:32 PDT 2016
From: WANG Cong <[email protected]>
Date: Thu, 25 Feb 2016 14:55:00 -0800
Subject: net_sched: introduce qdisc_replace() helper
From: WANG Cong <[email protected]>
[ Upstream commit 86a7996cc8a078793670d82ed97d5a99bb4e8496 ]
Remove nearly duplicated code and prepare for the following patch.
--- include/net/sch_generic.h | 17 +++++++++++++++++ net/sched/sch_cbq.c | 7 +------ net/sched/sch_drr.c | 6 +----- net/sched/sch_dsmark.c | 8 +------- net/sched/sch_hfsc.c | 6 +----- net/sched/sch_htb.c | 9 +-------- net/sched/sch_multiq.c | 8 +------- net/sched/sch_netem.c | 10 +--------- net/sched/sch_prio.c | 8 +------- net/sched/sch_qfq.c | 6 +----- net/sched/sch_red.c | 7 +------ net/sched/sch_sfb.c | 7 +------ net/sched/sch_tbf.c | 8 +------- 13 files changed, 29 insertions(+), 78 deletions(-)
include/net/sch_generic.h +17 -0
@@ -698,6 +698,23 @@ static inline void qdisc_reset_queue(str 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) {
net/sched/sch_cbq.c +1 -6
@@ -1624,13 +1624,8 @@ static int cbq_graft(struct Qdisc *sch, 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 ; }
net/sched/sch_drr.c +1 -5
@@ -226,11 +226,7 @@ static int drr_graft_class(struct Qdisc 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 ; }
net/sched/sch_dsmark.c +1 -7
@@ -73,13 +73,7 @@ static int dsmark_graft(struct Qdisc *sc 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 ; }
net/sched/sch_hfsc.c +1 -5
@@ -1215,11 +1215,7 @@ hfsc_graft_class(struct Qdisc *sch, unsi 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 ; }
net/sched/sch_htb.c +1 -8
@@ -1163,14 +1163,7 @@ static int htb_graft(struct Qdisc *sch, 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 ; }
net/sched/sch_multiq.c +1 -7
@@ -303,13 +303,7 @@ static int multiq_graft(struct Qdisc *scif (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 ; }
net/sched/sch_netem.c +1 -9
@@ -1037,15 +1037,7 @@ static int netem_graft(struct Qdisc *sch {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 ; }
net/sched/sch_prio.c +1 -7
@@ -268,13 +268,7 @@ static int prio_graft(struct Qdisc *sch,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 ; }
net/sched/sch_qfq.c +1 -5
@@ -617,11 +617,7 @@ static int qfq_graft_class(struct Qdisc 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 ; }
net/sched/sch_red.c +1 -6
@@ -313,12 +313,7 @@ static int red_graft(struct Qdisc *sch,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 ; }
net/sched/sch_sfb.c +1 -6
@@ -606,12 +606,7 @@ static int sfb_graft(struct Qdisc *sch,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 ; }
net/sched/sch_tbf.c +1 -7
@@ -502,13 +502,7 @@ static int tbf_graft(struct Qdisc *sch,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 ; }
Patches currently in stable-queue which might be from [email protected] are
queue-4.4/sch_htb-update-backlog-as-well.patch queue-4.4/sch_dsmark-update-backlog-as-well.patch queue-4.4/net_sched-update-hierarchical-backlog-too.patch queue-4.4/net_sched-introduce-qdisc_replace-helper.patch