diff options
author | Alex Shi <alex.shi@linaro.org> | 2016-05-20 12:16:40 +0800 |
---|---|---|
committer | Alex Shi <alex.shi@linaro.org> | 2016-05-20 12:16:40 +0800 |
commit | 023861726fc0899139add9dd47905b8de7644257 (patch) | |
tree | 5bf6b578027b3d9910da0d99f01eaf5cfa0a5e02 /include/net/sch_generic.h | |
parent | b3f09bff3f6f291d4ef5d400426278856bf24c27 (diff) | |
parent | 510d0a3f869611dcd001a2b7627fa5dded4579af (diff) |
Merge branch 'linux-linaro-lsk-v4.4' into linux-linaro-lsk-v4.4-androidlsk-v4.4-16.05-android
Diffstat (limited to 'include/net/sch_generic.h')
-rw-r--r-- | include/net/sch_generic.h | 20 |
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) { |