Message ID | 20171206031117.86588-1-willemdebruijn.kernel@gmail.com |
---|---|
State | Accepted, archived |
Delegated to: | David Miller |
Headers | show |
Series | [net-next] tun: avoid unnecessary READ_ONCE in tun_net_xmit | expand |
On 2017年12月06日 11:11, Willem de Bruijn wrote: > From: Willem de Bruijn <willemb@google.com> > > The statement no longer serves a purpose. > > Commit fa35864e0bb7 ("tuntap: Fix for a race in accessing numqueues") > added the ACCESS_ONCE to avoid a race condition with skb_queue_len. > > Commit 436accebb530 ("tuntap: remove unnecessary sk_receive_queue > length check during xmit") removed the affected skb_queue_len check. > > Commit 96f84061620c ("tun: add eBPF based queue selection method") > split the function, reading the field a second time in the callee. > The temp variable is now only read once, so just remove it. > > Signed-off-by: Willem de Bruijn <willemb@google.com> > --- > drivers/net/tun.c | 4 +--- > 1 file changed, 1 insertion(+), 3 deletions(-) > > diff --git a/drivers/net/tun.c b/drivers/net/tun.c > index 787cc35ef89b..c2ad8f3858d1 100644 > --- a/drivers/net/tun.c > +++ b/drivers/net/tun.c > @@ -990,14 +990,12 @@ static netdev_tx_t tun_net_xmit(struct sk_buff *skb, struct net_device *dev) > struct tun_struct *tun = netdev_priv(dev); > int txq = skb->queue_mapping; > struct tun_file *tfile; > - u32 numqueues = 0; > > rcu_read_lock(); > tfile = rcu_dereference(tun->tfiles[txq]); > - numqueues = READ_ONCE(tun->numqueues); > > /* Drop packet if interface is not attached */ > - if (txq >= numqueues) > + if (txq >= tun->numqueues) > goto drop; > > if (!rcu_dereference(tun->steering_prog)) Acked-by: Jason Wang <jasowang@redhat.com> Thanks
From: Willem de Bruijn <willemdebruijn.kernel@gmail.com> Date: Tue, 5 Dec 2017 22:11:17 -0500 > From: Willem de Bruijn <willemb@google.com> > > The statement no longer serves a purpose. > > Commit fa35864e0bb7 ("tuntap: Fix for a race in accessing numqueues") > added the ACCESS_ONCE to avoid a race condition with skb_queue_len. > > Commit 436accebb530 ("tuntap: remove unnecessary sk_receive_queue > length check during xmit") removed the affected skb_queue_len check. > > Commit 96f84061620c ("tun: add eBPF based queue selection method") > split the function, reading the field a second time in the callee. > The temp variable is now only read once, so just remove it. > > Signed-off-by: Willem de Bruijn <willemb@google.com> Applied, thanks Willem.
diff --git a/drivers/net/tun.c b/drivers/net/tun.c index 787cc35ef89b..c2ad8f3858d1 100644 --- a/drivers/net/tun.c +++ b/drivers/net/tun.c @@ -990,14 +990,12 @@ static netdev_tx_t tun_net_xmit(struct sk_buff *skb, struct net_device *dev) struct tun_struct *tun = netdev_priv(dev); int txq = skb->queue_mapping; struct tun_file *tfile; - u32 numqueues = 0; rcu_read_lock(); tfile = rcu_dereference(tun->tfiles[txq]); - numqueues = READ_ONCE(tun->numqueues); /* Drop packet if interface is not attached */ - if (txq >= numqueues) + if (txq >= tun->numqueues) goto drop; if (!rcu_dereference(tun->steering_prog))