diff options
Diffstat (limited to 'drivers/net/tun.c')
| -rw-r--r-- | drivers/net/tun.c | 16 | 
1 files changed, 11 insertions, 5 deletions
diff --git a/drivers/net/tun.c b/drivers/net/tun.c index 060135ceaf0e..005020042be9 100644 --- a/drivers/net/tun.c +++ b/drivers/net/tun.c @@ -1536,6 +1536,7 @@ static void tun_rx_batched(struct tun_struct *tun, struct tun_file *tfile,  	if (!rx_batched || (!more && skb_queue_empty(queue))) {  		local_bh_disable(); +		skb_record_rx_queue(skb, tfile->queue_index);  		netif_receive_skb(skb);  		local_bh_enable();  		return; @@ -1555,8 +1556,11 @@ static void tun_rx_batched(struct tun_struct *tun, struct tun_file *tfile,  		struct sk_buff *nskb;  		local_bh_disable(); -		while ((nskb = __skb_dequeue(&process_queue))) +		while ((nskb = __skb_dequeue(&process_queue))) { +			skb_record_rx_queue(nskb, tfile->queue_index);  			netif_receive_skb(nskb); +		} +		skb_record_rx_queue(skb, tfile->queue_index);  		netif_receive_skb(skb);  		local_bh_enable();  	} @@ -2289,9 +2293,9 @@ static void tun_setup(struct net_device *dev)  static int tun_validate(struct nlattr *tb[], struct nlattr *data[],  			struct netlink_ext_ack *extack)  { -	if (!data) -		return 0; -	return -EINVAL; +	NL_SET_ERR_MSG(extack, +		       "tun/tap creation via rtnetlink is not supported."); +	return -EOPNOTSUPP;  }  static size_t tun_get_size(const struct net_device *dev) @@ -2381,6 +2385,7 @@ static int tun_xdp_one(struct tun_struct *tun,  		       struct tun_file *tfile,  		       struct xdp_buff *xdp, int *flush)  { +	unsigned int datasize = xdp->data_end - xdp->data;  	struct tun_xdp_hdr *hdr = xdp->data_hard_start;  	struct virtio_net_hdr *gso = &hdr->gso;  	struct tun_pcpu_stats *stats; @@ -2451,12 +2456,13 @@ build:  	if (!rcu_dereference(tun->steering_prog))  		rxhash = __skb_get_hash_symmetric(skb); +	skb_record_rx_queue(skb, tfile->queue_index);  	netif_receive_skb(skb);  	stats = get_cpu_ptr(tun->pcpu_stats);  	u64_stats_update_begin(&stats->syncp);  	stats->rx_packets++; -	stats->rx_bytes += skb->len; +	stats->rx_bytes += datasize;  	u64_stats_update_end(&stats->syncp);  	put_cpu_ptr(stats);  | 
