diff options
author | David S. Miller | 2013-12-10 22:06:18 -0500 |
---|---|---|
committer | David S. Miller | 2013-12-10 22:06:18 -0500 |
commit | de2aa4760b45262cf25eac6d4c0e461703b7b64b (patch) | |
tree | 2762ded4834e97fa397b9f34d09454ad7aacb925 | |
parent | 42404c09151029689659818e2196ee2fd97142aa (diff) |
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>
-rw-r--r-- | drivers/net/macvtap.c | 5 |
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; } |