diff options
-rw-r--r-- | net/sched/sch_taprio.c | 14 |
1 files changed, 8 insertions, 6 deletions
diff --git a/net/sched/sch_taprio.c b/net/sched/sch_taprio.c index 09563c245473..f827caa73862 100644 --- a/net/sched/sch_taprio.c +++ b/net/sched/sch_taprio.c | |||
@@ -136,8 +136,8 @@ static struct sk_buff *taprio_dequeue(struct Qdisc *sch) | |||
136 | { | 136 | { |
137 | struct taprio_sched *q = qdisc_priv(sch); | 137 | struct taprio_sched *q = qdisc_priv(sch); |
138 | struct net_device *dev = qdisc_dev(sch); | 138 | struct net_device *dev = qdisc_dev(sch); |
139 | struct sk_buff *skb = NULL; | ||
139 | struct sched_entry *entry; | 140 | struct sched_entry *entry; |
140 | struct sk_buff *skb; | ||
141 | u32 gate_mask; | 141 | u32 gate_mask; |
142 | int i; | 142 | int i; |
143 | 143 | ||
@@ -154,10 +154,9 @@ static struct sk_buff *taprio_dequeue(struct Qdisc *sch) | |||
154 | * "AdminGateSates" | 154 | * "AdminGateSates" |
155 | */ | 155 | */ |
156 | gate_mask = entry ? entry->gate_mask : TAPRIO_ALL_GATES_OPEN; | 156 | gate_mask = entry ? entry->gate_mask : TAPRIO_ALL_GATES_OPEN; |
157 | rcu_read_unlock(); | ||
158 | 157 | ||
159 | if (!gate_mask) | 158 | if (!gate_mask) |
160 | return NULL; | 159 | goto done; |
161 | 160 | ||
162 | for (i = 0; i < dev->num_tx_queues; i++) { | 161 | for (i = 0; i < dev->num_tx_queues; i++) { |
163 | struct Qdisc *child = q->qdiscs[i]; | 162 | struct Qdisc *child = q->qdiscs[i]; |
@@ -197,16 +196,19 @@ static struct sk_buff *taprio_dequeue(struct Qdisc *sch) | |||
197 | 196 | ||
198 | skb = child->ops->dequeue(child); | 197 | skb = child->ops->dequeue(child); |
199 | if (unlikely(!skb)) | 198 | if (unlikely(!skb)) |
200 | return NULL; | 199 | goto done; |
201 | 200 | ||
202 | qdisc_bstats_update(sch, skb); | 201 | qdisc_bstats_update(sch, skb); |
203 | qdisc_qstats_backlog_dec(sch, skb); | 202 | qdisc_qstats_backlog_dec(sch, skb); |
204 | sch->q.qlen--; | 203 | sch->q.qlen--; |
205 | 204 | ||
206 | return skb; | 205 | goto done; |
207 | } | 206 | } |
208 | 207 | ||
209 | return NULL; | 208 | done: |
209 | rcu_read_unlock(); | ||
210 | |||
211 | return skb; | ||
210 | } | 212 | } |
211 | 213 | ||
212 | static enum hrtimer_restart advance_sched(struct hrtimer *timer) | 214 | static enum hrtimer_restart advance_sched(struct hrtimer *timer) |