aboutsummaryrefslogtreecommitdiff
path: root/include/net/sch_generic.h
diff options
context:
space:
mode:
authorAlex Shi <alex.shi@linaro.org>2016-05-20 12:16:37 +0800
committerAlex Shi <alex.shi@linaro.org>2016-05-20 12:16:37 +0800
commit510d0a3f869611dcd001a2b7627fa5dded4579af (patch)
treeba06ce27af2f3aa194a268e3f26f0665c21357a9 /include/net/sch_generic.h
parente37ddf27108a992e191b27df9bd532cb9157dc89 (diff)
parent544ec5b08d007f184ab97abdbed87e613c8c0b83 (diff)
Merge tag 'v4.4.11' into linux-linaro-lsk-v4.4lsk-v4.4-16.05
This is the 4.4.11 stable release
Diffstat (limited to 'include/net/sch_generic.h')
-rw-r--r--include/net/sch_generic.h20
1 files changed, 19 insertions, 1 deletions
diff --git a/include/net/sch_generic.h b/include/net/sch_generic.h
index b2a8e6338576..86df0835f6b5 100644
--- a/include/net/sch_generic.h
+++ b/include/net/sch_generic.h
@@ -396,7 +396,8 @@ struct Qdisc *dev_graft_qdisc(struct netdev_queue *dev_queue,
struct Qdisc *qdisc);
void qdisc_reset(struct Qdisc *qdisc);
void qdisc_destroy(struct Qdisc *qdisc);
-void qdisc_tree_decrease_qlen(struct Qdisc *qdisc, unsigned int n);
+void qdisc_tree_reduce_backlog(struct Qdisc *qdisc, unsigned int n,
+ unsigned int len);
struct Qdisc *qdisc_alloc(struct netdev_queue *dev_queue,
const struct Qdisc_ops *ops);
struct Qdisc *qdisc_create_dflt(struct netdev_queue *dev_queue,
@@ -698,6 +699,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_reduce_backlog(old, old->q.qlen, old->qstats.backlog);
+ qdisc_reset(old);
+ }
+ sch_tree_unlock(sch);
+
+ return old;
+}
+
static inline unsigned int __qdisc_queue_drop(struct Qdisc *sch,
struct sk_buff_head *list)
{