summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--net/sched/sch_drr.c8
1 files changed, 5 insertions, 3 deletions
diff --git a/net/sched/sch_drr.c b/net/sched/sch_drr.c
index 37e6ab99bbea..e7a7e87b141a 100644
--- a/net/sched/sch_drr.c
+++ b/net/sched/sch_drr.c
@@ -373,11 +373,13 @@ static struct sk_buff *drr_dequeue(struct Qdisc *sch)
struct sk_buff *skb;
unsigned int len;
- while (!list_empty(&q->active)) {
+ if (list_empty(&q->active))
+ goto out;
+ while (1) {
cl = list_first_entry(&q->active, struct drr_class, alist);
skb = cl->qdisc->ops->peek(cl->qdisc);
if (skb == NULL)
- goto skip;
+ goto out;
len = qdisc_pkt_len(skb);
if (len <= cl->deficit) {
@@ -390,9 +392,9 @@ static struct sk_buff *drr_dequeue(struct Qdisc *sch)
}
cl->deficit += cl->quantum;
-skip:
list_move_tail(&cl->alist, &q->active);
}
+out:
return NULL;
}