diff options
-rw-r--r-- | include/net/fq_impl.h | 30 |
1 files changed, 19 insertions, 11 deletions
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; |