Revert "macvtap: remove useless codes in macvtap_aio_read() and macvtap_recvmsg()"
authorDavid S. Miller <davem@davemloft.net>
Wed, 11 Dec 2013 03:06:18 +0000 (22:06 -0500)
committerDavid S. Miller <davem@davemloft.net>
Wed, 11 Dec 2013 03:06:18 +0000 (22:06 -0500)
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>
drivers/net/macvtap.c

index 2aa5e97..4a34bcb 100644 (file)
@@ -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;
 }