Skip to content

Commit ac4e4af

Browse files
Vlad Yasevichdavem330
Vlad Yasevich
authored andcommitted
macvtap: Consistently use rcu functions
Currently macvtap uses rcu_bh functions in its user facing fuction macvtap_get_user() and macvtap_put_user(). However, its packet handlers use normal rcu as the rcu_read_lock() is taken in netif_receive_skb(). We can safely discontinue the usage or rcu with bh disabled. Signed-off-by: Vlad Yasevich <vyasevic@redhat.com> Reviewed-by: Eric Dumazet <edumazet@google.com> Signed-off-by: David S. Miller <davem@davemloft.net>
1 parent 441ac0f commit ac4e4af

File tree

1 file changed

+9
-9
lines changed

1 file changed

+9
-9
lines changed

drivers/net/macvtap.c

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -754,8 +754,8 @@ static ssize_t macvtap_get_user(struct macvtap_queue *q, struct msghdr *m,
754754

755755
skb_probe_transport_header(skb, ETH_HLEN);
756756

757-
rcu_read_lock_bh();
758-
vlan = rcu_dereference_bh(q->vlan);
757+
rcu_read_lock();
758+
vlan = rcu_dereference(q->vlan);
759759
/* copy skb_ubuf_info for callback when skb has no error */
760760
if (zerocopy) {
761761
skb_shinfo(skb)->destructor_arg = m->msg_control;
@@ -766,19 +766,19 @@ static ssize_t macvtap_get_user(struct macvtap_queue *q, struct msghdr *m,
766766
macvlan_start_xmit(skb, vlan->dev);
767767
else
768768
kfree_skb(skb);
769-
rcu_read_unlock_bh();
769+
rcu_read_unlock();
770770

771771
return total_len;
772772

773773
err_kfree:
774774
kfree_skb(skb);
775775

776776
err:
777-
rcu_read_lock_bh();
778-
vlan = rcu_dereference_bh(q->vlan);
777+
rcu_read_lock();
778+
vlan = rcu_dereference(q->vlan);
779779
if (vlan)
780780
vlan->dev->stats.tx_dropped++;
781-
rcu_read_unlock_bh();
781+
rcu_read_unlock();
782782

783783
return err;
784784
}
@@ -854,11 +854,11 @@ static ssize_t macvtap_put_user(struct macvtap_queue *q,
854854
copied += len;
855855

856856
done:
857-
rcu_read_lock_bh();
858-
vlan = rcu_dereference_bh(q->vlan);
857+
rcu_read_lock();
858+
vlan = rcu_dereference(q->vlan);
859859
if (vlan)
860860
macvlan_count_rx(vlan, copied - vnet_hdr_len, ret == 0, 0);
861-
rcu_read_unlock_bh();
861+
rcu_read_unlock();
862862

863863
return ret ? ret : copied;
864864
}

0 commit comments

Comments
 (0)