summaryrefslogtreecommitdiffstats
path: root/drivers/net/macvtap.c
diff options
context:
space:
mode:
authorVlad Yasevich <vyasevic@redhat.com>2013-06-25 16:04:20 -0400
committerDavid S. Miller <davem@davemloft.net>2013-06-25 19:44:56 -0400
commitac4e4af1e59e16a018527ffa58d9d3f30bb96ca9 (patch)
tree310295ae1fffa64e94f8f3d733465d652925149a /drivers/net/macvtap.c
parent441ac0fcaadc76ad09771812382345001dd2b813 (diff)
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>
Diffstat (limited to 'drivers/net/macvtap.c')
-rw-r--r--drivers/net/macvtap.c18
1 files changed, 9 insertions, 9 deletions
diff --git a/drivers/net/macvtap.c b/drivers/net/macvtap.c
index efbf2eb6ae78..d7856a8f589a 100644
--- a/drivers/net/macvtap.c
+++ b/drivers/net/macvtap.c
@@ -754,8 +754,8 @@ static ssize_t macvtap_get_user(struct macvtap_queue *q, struct msghdr *m,
754 754
755 skb_probe_transport_header(skb, ETH_HLEN); 755 skb_probe_transport_header(skb, ETH_HLEN);
756 756
757 rcu_read_lock_bh(); 757 rcu_read_lock();
758 vlan = rcu_dereference_bh(q->vlan); 758 vlan = rcu_dereference(q->vlan);
759 /* copy skb_ubuf_info for callback when skb has no error */ 759 /* copy skb_ubuf_info for callback when skb has no error */
760 if (zerocopy) { 760 if (zerocopy) {
761 skb_shinfo(skb)->destructor_arg = m->msg_control; 761 skb_shinfo(skb)->destructor_arg = m->msg_control;
@@ -766,7 +766,7 @@ static ssize_t macvtap_get_user(struct macvtap_queue *q, struct msghdr *m,
766 macvlan_start_xmit(skb, vlan->dev); 766 macvlan_start_xmit(skb, vlan->dev);
767 else 767 else
768 kfree_skb(skb); 768 kfree_skb(skb);
769 rcu_read_unlock_bh(); 769 rcu_read_unlock();
770 770
771 return total_len; 771 return total_len;
772 772
@@ -774,11 +774,11 @@ err_kfree:
774 kfree_skb(skb); 774 kfree_skb(skb);
775 775
776err: 776err:
777 rcu_read_lock_bh(); 777 rcu_read_lock();
778 vlan = rcu_dereference_bh(q->vlan); 778 vlan = rcu_dereference(q->vlan);
779 if (vlan) 779 if (vlan)
780 vlan->dev->stats.tx_dropped++; 780 vlan->dev->stats.tx_dropped++;
781 rcu_read_unlock_bh(); 781 rcu_read_unlock();
782 782
783 return err; 783 return err;
784} 784}
@@ -854,11 +854,11 @@ static ssize_t macvtap_put_user(struct macvtap_queue *q,
854 copied += len; 854 copied += len;
855 855
856done: 856done:
857 rcu_read_lock_bh(); 857 rcu_read_lock();
858 vlan = rcu_dereference_bh(q->vlan); 858 vlan = rcu_dereference(q->vlan);
859 if (vlan) 859 if (vlan)
860 macvlan_count_rx(vlan, copied - vnet_hdr_len, ret == 0, 0); 860 macvlan_count_rx(vlan, copied - vnet_hdr_len, ret == 0, 0);
861 rcu_read_unlock_bh(); 861 rcu_read_unlock();
862 862
863 return ret ? ret : copied; 863 return ret ? ret : copied;
864} 864}