From: Michal Kazior Date: Wed, 27 Apr 2016 10:59:13 +0000 (+0200) Subject: fq: split out backlog update logic X-Git-Url: https://git.karo-electronics.de/?a=commitdiff_plain;h=b43e7199a9061562e28c72192a1d07e00ec4e97f;p=linux-beck.git fq: split out backlog update logic mac80211 (which will be the first user of the fq.h) recently started to support software A-MSDU aggregation. It glues skbuffs together into a single one so the backlog accounting needs to be more fine-grained. To avoid backlog sorting logic duplication split it up for re-use. Signed-off-by: Michal Kazior Signed-off-by: David S. Miller --- diff --git a/include/net/fq_impl.h b/include/net/fq_impl.h index 02eab7c51adb..163f3ed0f05a 100644 --- a/include/net/fq_impl.h +++ b/include/net/fq_impl.h @@ -120,6 +120,24 @@ static struct fq_flow *fq_flow_classify(struct fq *fq, return flow; } +static void fq_recalc_backlog(struct fq *fq, + struct fq_tin *tin, + struct fq_flow *flow) +{ + struct fq_flow *i; + + if (list_empty(&flow->backlogchain)) + list_add_tail(&flow->backlogchain, &fq->backlogs); + + i = flow; + list_for_each_entry_continue_reverse(i, &fq->backlogs, + backlogchain) + if (i->backlog > flow->backlog) + break; + + list_move(&flow->backlogchain, &i->backlogchain); +} + static void fq_tin_enqueue(struct fq *fq, struct fq_tin *tin, struct sk_buff *skb, @@ -127,7 +145,6 @@ static void fq_tin_enqueue(struct fq *fq, fq_flow_get_default_t get_default_func) { struct fq_flow *flow; - struct fq_flow *i; lockdep_assert_held(&fq->lock); @@ -139,16 +156,7 @@ static void fq_tin_enqueue(struct fq *fq, tin->backlog_packets++; fq->backlog++; - if (list_empty(&flow->backlogchain)) - list_add_tail(&flow->backlogchain, &fq->backlogs); - - i = flow; - list_for_each_entry_continue_reverse(i, &fq->backlogs, - backlogchain) - if (i->backlog > flow->backlog) - break; - - list_move(&flow->backlogchain, &i->backlogchain); + fq_recalc_backlog(fq, tin, flow); if (list_empty(&flow->flowchain)) { flow->deficit = fq->quantum;