aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/tun.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/net/tun.c')
-rw-r--r--drivers/net/tun.c10
1 files changed, 4 insertions, 6 deletions
diff --git a/drivers/net/tun.c b/drivers/net/tun.c
index e2af2dd544f0..a3ac8636f3ba 100644
--- a/drivers/net/tun.c
+++ b/drivers/net/tun.c
@@ -1231,13 +1231,8 @@ static ssize_t tun_get_user(struct tun_struct *tun, struct tun_file *tfile,
1231 1231
1232 if (zerocopy) 1232 if (zerocopy)
1233 err = zerocopy_sg_from_iter(skb, from); 1233 err = zerocopy_sg_from_iter(skb, from);
1234 else { 1234 else
1235 err = skb_copy_datagram_from_iter(skb, 0, from, len); 1235 err = skb_copy_datagram_from_iter(skb, 0, from, len);
1236 if (!err && msg_control) {
1237 struct ubuf_info *uarg = msg_control;
1238 uarg->callback(uarg, false);
1239 }
1240 }
1241 1236
1242 if (err) { 1237 if (err) {
1243 this_cpu_inc(tun->pcpu_stats->rx_dropped); 1238 this_cpu_inc(tun->pcpu_stats->rx_dropped);
@@ -1282,6 +1277,9 @@ static ssize_t tun_get_user(struct tun_struct *tun, struct tun_file *tfile,
1282 skb_shinfo(skb)->destructor_arg = msg_control; 1277 skb_shinfo(skb)->destructor_arg = msg_control;
1283 skb_shinfo(skb)->tx_flags |= SKBTX_DEV_ZEROCOPY; 1278 skb_shinfo(skb)->tx_flags |= SKBTX_DEV_ZEROCOPY;
1284 skb_shinfo(skb)->tx_flags |= SKBTX_SHARED_FRAG; 1279 skb_shinfo(skb)->tx_flags |= SKBTX_SHARED_FRAG;
1280 } else if (msg_control) {
1281 struct ubuf_info *uarg = msg_control;
1282 uarg->callback(uarg, false);
1285 } 1283 }
1286 1284
1287 skb_reset_network_header(skb); 1285 skb_reset_network_header(skb);