summaryrefslogtreecommitdiffstats
path: root/drivers/net/macvtap.c
diff options
context:
space:
mode:
authorDavid S. Miller <davem@davemloft.net>2013-12-11 04:06:18 +0100
committerDavid S. Miller <davem@davemloft.net>2013-12-11 04:06:18 +0100
commitde2aa4760b45262cf25eac6d4c0e461703b7b64b (patch)
tree2762ded4834e97fa397b9f34d09454ad7aacb925 /drivers/net/macvtap.c
parentRevert "tun: remove useless codes in tun_chr_aio_read() and tun_recvmsg()" (diff)
downloadlinux-de2aa4760b45262cf25eac6d4c0e461703b7b64b.tar.xz
linux-de2aa4760b45262cf25eac6d4c0e461703b7b64b.zip
Revert "macvtap: remove useless codes in macvtap_aio_read() and macvtap_recvmsg()"
This reverts commit 41e4af69a5984a3193ba3108fb4e067b0e34dc73. MSG_TRUNC handling was broken and is going to be fixed in the 'net' tree, so revert this. Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net/macvtap.c')
-rw-r--r--drivers/net/macvtap.c5
1 files changed, 5 insertions, 0 deletions
diff --git a/drivers/net/macvtap.c b/drivers/net/macvtap.c
index 2aa5e973ef17..4a34bcb6549f 100644
--- a/drivers/net/macvtap.c
+++ b/drivers/net/macvtap.c
@@ -871,6 +871,7 @@ static ssize_t macvtap_aio_read(struct kiocb *iocb, const struct iovec *iv,
}
ret = macvtap_do_read(q, iv, len, file->f_flags & O_NONBLOCK);
+ ret = min_t(ssize_t, ret, len); /* XXX copied from tun.c. Why? */
if (ret > 0)
iocb->ki_pos = ret;
out:
@@ -1105,6 +1106,10 @@ static int macvtap_recvmsg(struct kiocb *iocb, struct socket *sock,
return -EINVAL;
ret = macvtap_do_read(q, m->msg_iov, total_len,
flags & MSG_DONTWAIT);
+ if (ret > total_len) {
+ m->msg_flags |= MSG_TRUNC;
+ ret = flags & MSG_TRUNC ? ret : total_len;
+ }
return ret;
}