OSDN Git Service

pfifo_fast: drop unneeded additional lock on dequeue
authorPaolo Abeni <pabeni@redhat.com>
Tue, 15 May 2018 14:24:37 +0000 (16:24 +0200)
committerDavid S. Miller <davem@davemloft.net>
Thu, 17 May 2018 16:46:54 +0000 (12:46 -0400)
After the previous patch, for NOLOCK qdiscs, q->seqlock is
always held when the dequeue() is invoked, we can drop
any additional locking to protect such operation.

Signed-off-by: Paolo Abeni <pabeni@redhat.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
include/linux/skb_array.h
net/sched/sch_generic.c

index a6b6e8b..62d9b0a 100644 (file)
@@ -97,6 +97,11 @@ static inline bool skb_array_empty_any(struct skb_array *a)
        return ptr_ring_empty_any(&a->ring);
 }
 
+static inline struct sk_buff *__skb_array_consume(struct skb_array *a)
+{
+       return __ptr_ring_consume(&a->ring);
+}
+
 static inline struct sk_buff *skb_array_consume(struct skb_array *a)
 {
        return ptr_ring_consume(&a->ring);
index a126f16..760ab1b 100644 (file)
@@ -656,7 +656,7 @@ static struct sk_buff *pfifo_fast_dequeue(struct Qdisc *qdisc)
                if (__skb_array_empty(q))
                        continue;
 
-               skb = skb_array_consume_bh(q);
+               skb = __skb_array_consume(q);
        }
        if (likely(skb)) {
                qdisc_qstats_cpu_backlog_dec(qdisc, skb);
@@ -697,7 +697,7 @@ static void pfifo_fast_reset(struct Qdisc *qdisc)
                if (!q->ring.queue)
                        continue;
 
-               while ((skb = skb_array_consume_bh(q)) != NULL)
+               while ((skb = __skb_array_consume(q)) != NULL)
                        kfree_skb(skb);
        }