pkt_sched: Make sure RTNL is held in qdisc_root_lock().
It is the only legal environment in which this can be used. Add some commentary explaining the situation. Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
35ed4e7598
commit
7e43f1128d
@ -193,10 +193,22 @@ static inline struct Qdisc *qdisc_root(struct Qdisc *qdisc)
|
||||
return qdisc->dev_queue->qdisc;
|
||||
}
|
||||
|
||||
/* The qdisc root lock is a mechanism by which to top level
|
||||
* of a qdisc tree can be locked from any qdisc node in the
|
||||
* forest. This allows changing the configuration of some
|
||||
* aspect of the qdisc tree while blocking out asynchronous
|
||||
* qdisc access in the packet processing paths.
|
||||
*
|
||||
* It is only legal to do this when the root will not change
|
||||
* on us. Otherwise we'll potentially lock the wrong qdisc
|
||||
* root. This is enforced by holding the RTNL semaphore, which
|
||||
* all users of this lock accessor must do.
|
||||
*/
|
||||
static inline spinlock_t *qdisc_root_lock(struct Qdisc *qdisc)
|
||||
{
|
||||
struct Qdisc *root = qdisc_root(qdisc);
|
||||
|
||||
ASSERT_RTNL();
|
||||
return qdisc_lock(root);
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user