@@ -648,7 +648,7 @@ struct Qdisc_ops noop_qdisc_ops __read_mostly = {
648648
649649static struct netdev_queue noop_netdev_queue = {
650650 RCU_POINTER_INITIALIZER (qdisc , & noop_qdisc ),
651- . qdisc_sleeping = & noop_qdisc ,
651+ RCU_POINTER_INITIALIZER ( qdisc_sleeping , & noop_qdisc ) ,
652652};
653653
654654struct Qdisc noop_qdisc = {
@@ -1103,7 +1103,7 @@ EXPORT_SYMBOL(qdisc_put_unlocked);
11031103struct Qdisc * dev_graft_qdisc (struct netdev_queue * dev_queue ,
11041104 struct Qdisc * qdisc )
11051105{
1106- struct Qdisc * oqdisc = dev_queue -> qdisc_sleeping ;
1106+ struct Qdisc * oqdisc = rtnl_dereference ( dev_queue -> qdisc_sleeping ) ;
11071107 spinlock_t * root_lock ;
11081108
11091109 root_lock = qdisc_lock (oqdisc );
@@ -1112,7 +1112,7 @@ struct Qdisc *dev_graft_qdisc(struct netdev_queue *dev_queue,
11121112 /* ... and graft new one */
11131113 if (qdisc == NULL )
11141114 qdisc = & noop_qdisc ;
1115- dev_queue -> qdisc_sleeping = qdisc ;
1115+ rcu_assign_pointer ( dev_queue -> qdisc_sleeping , qdisc ) ;
11161116 rcu_assign_pointer (dev_queue -> qdisc , & noop_qdisc );
11171117
11181118 spin_unlock_bh (root_lock );
@@ -1125,12 +1125,12 @@ static void shutdown_scheduler_queue(struct net_device *dev,
11251125 struct netdev_queue * dev_queue ,
11261126 void * _qdisc_default )
11271127{
1128- struct Qdisc * qdisc = dev_queue -> qdisc_sleeping ;
1128+ struct Qdisc * qdisc = rtnl_dereference ( dev_queue -> qdisc_sleeping ) ;
11291129 struct Qdisc * qdisc_default = _qdisc_default ;
11301130
11311131 if (qdisc ) {
11321132 rcu_assign_pointer (dev_queue -> qdisc , qdisc_default );
1133- dev_queue -> qdisc_sleeping = qdisc_default ;
1133+ rcu_assign_pointer ( dev_queue -> qdisc_sleeping , qdisc_default ) ;
11341134
11351135 qdisc_put (qdisc );
11361136 }
@@ -1154,7 +1154,7 @@ static void attach_one_default_qdisc(struct net_device *dev,
11541154
11551155 if (!netif_is_multiqueue (dev ))
11561156 qdisc -> flags |= TCQ_F_ONETXQUEUE | TCQ_F_NOPARENT ;
1157- dev_queue -> qdisc_sleeping = qdisc ;
1157+ rcu_assign_pointer ( dev_queue -> qdisc_sleeping , qdisc ) ;
11581158}
11591159
11601160static void attach_default_qdiscs (struct net_device * dev )
@@ -1167,7 +1167,7 @@ static void attach_default_qdiscs(struct net_device *dev)
11671167 if (!netif_is_multiqueue (dev ) ||
11681168 dev -> priv_flags & IFF_NO_QUEUE ) {
11691169 netdev_for_each_tx_queue (dev , attach_one_default_qdisc , NULL );
1170- qdisc = txq -> qdisc_sleeping ;
1170+ qdisc = rtnl_dereference ( txq -> qdisc_sleeping ) ;
11711171 rcu_assign_pointer (dev -> qdisc , qdisc );
11721172 qdisc_refcount_inc (qdisc );
11731173 } else {
@@ -1186,7 +1186,7 @@ static void attach_default_qdiscs(struct net_device *dev)
11861186 netdev_for_each_tx_queue (dev , shutdown_scheduler_queue , & noop_qdisc );
11871187 dev -> priv_flags |= IFF_NO_QUEUE ;
11881188 netdev_for_each_tx_queue (dev , attach_one_default_qdisc , NULL );
1189- qdisc = txq -> qdisc_sleeping ;
1189+ qdisc = rtnl_dereference ( txq -> qdisc_sleeping ) ;
11901190 rcu_assign_pointer (dev -> qdisc , qdisc );
11911191 qdisc_refcount_inc (qdisc );
11921192 dev -> priv_flags ^= IFF_NO_QUEUE ;
@@ -1202,7 +1202,7 @@ static void transition_one_qdisc(struct net_device *dev,
12021202 struct netdev_queue * dev_queue ,
12031203 void * _need_watchdog )
12041204{
1205- struct Qdisc * new_qdisc = dev_queue -> qdisc_sleeping ;
1205+ struct Qdisc * new_qdisc = rtnl_dereference ( dev_queue -> qdisc_sleeping ) ;
12061206 int * need_watchdog_p = _need_watchdog ;
12071207
12081208 if (!(new_qdisc -> flags & TCQ_F_BUILTIN ))
@@ -1272,7 +1272,7 @@ static void dev_reset_queue(struct net_device *dev,
12721272 struct Qdisc * qdisc ;
12731273 bool nolock ;
12741274
1275- qdisc = dev_queue -> qdisc_sleeping ;
1275+ qdisc = rtnl_dereference ( dev_queue -> qdisc_sleeping ) ;
12761276 if (!qdisc )
12771277 return ;
12781278
@@ -1303,7 +1303,7 @@ static bool some_qdisc_is_busy(struct net_device *dev)
13031303 int val ;
13041304
13051305 dev_queue = netdev_get_tx_queue (dev , i );
1306- q = dev_queue -> qdisc_sleeping ;
1306+ q = rtnl_dereference ( dev_queue -> qdisc_sleeping ) ;
13071307
13081308 root_lock = qdisc_lock (q );
13091309 spin_lock_bh (root_lock );
@@ -1379,7 +1379,7 @@ EXPORT_SYMBOL(dev_deactivate);
13791379static int qdisc_change_tx_queue_len (struct net_device * dev ,
13801380 struct netdev_queue * dev_queue )
13811381{
1382- struct Qdisc * qdisc = dev_queue -> qdisc_sleeping ;
1382+ struct Qdisc * qdisc = rtnl_dereference ( dev_queue -> qdisc_sleeping ) ;
13831383 const struct Qdisc_ops * ops = qdisc -> ops ;
13841384
13851385 if (ops -> change_tx_queue_len )
@@ -1404,15 +1404,15 @@ void mq_change_real_num_tx(struct Qdisc *sch, unsigned int new_real_tx)
14041404 unsigned int i ;
14051405
14061406 for (i = new_real_tx ; i < dev -> real_num_tx_queues ; i ++ ) {
1407- qdisc = netdev_get_tx_queue (dev , i )-> qdisc_sleeping ;
1407+ qdisc = rtnl_dereference ( netdev_get_tx_queue (dev , i )-> qdisc_sleeping ) ;
14081408 /* Only update the default qdiscs we created,
14091409 * qdiscs with handles are always hashed.
14101410 */
14111411 if (qdisc != & noop_qdisc && !qdisc -> handle )
14121412 qdisc_hash_del (qdisc );
14131413 }
14141414 for (i = dev -> real_num_tx_queues ; i < new_real_tx ; i ++ ) {
1415- qdisc = netdev_get_tx_queue (dev , i )-> qdisc_sleeping ;
1415+ qdisc = rtnl_dereference ( netdev_get_tx_queue (dev , i )-> qdisc_sleeping ) ;
14161416 if (qdisc != & noop_qdisc && !qdisc -> handle )
14171417 qdisc_hash_add (qdisc , false);
14181418 }
@@ -1449,7 +1449,7 @@ static void dev_init_scheduler_queue(struct net_device *dev,
14491449 struct Qdisc * qdisc = _qdisc ;
14501450
14511451 rcu_assign_pointer (dev_queue -> qdisc , qdisc );
1452- dev_queue -> qdisc_sleeping = qdisc ;
1452+ rcu_assign_pointer ( dev_queue -> qdisc_sleeping , qdisc ) ;
14531453}
14541454
14551455void dev_init_scheduler (struct net_device * dev )
0 commit comments