• David S. Miller's avatar
    pkt_sched: Perform bulk of qdisc destruction in RCU. · 8a34c5dc
    David S. Miller authored
    This allows less strict control of access to the qdisc attached to a
    netdev_queue.  It is even allowed to enqueue into a qdisc which is
    in the process of being destroyed.  The RCU handler will toss out
    those packets.
    
    We will need this to handle sharing of a qdisc amongst multiple
    TX queues.  In such a setup the lock has to be shared, so will
    be inside of the qdisc itself.  At which point the netdev_queue
    lock cannot be used to hard synchronize access to the ->qdisc
    pointer.
    
    One operation we have to keep inside of qdisc_destroy() is the list
    deletion.  It is the only piece of state visible after the RCU quiesce
    period, so we have to undo it early and under the appropriate locking.
    
    The operations in the RCU handler do not need any looking because the
    qdisc tree is no longer visible to anything at that point.
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    8a34c5dc
sch_generic.c 17.6 KB