aboutsummaryrefslogtreecommitdiffstats
path: root/net/vmw_vsock/af_vsock.c
diff options
context:
space:
mode:
Diffstat (limited to 'net/vmw_vsock/af_vsock.c')
-rw-r--r--net/vmw_vsock/af_vsock.c19
1 files changed, 6 insertions, 13 deletions
diff --git a/net/vmw_vsock/af_vsock.c b/net/vmw_vsock/af_vsock.c
index 7fd1220fbfa0..bbe65dcb9738 100644
--- a/net/vmw_vsock/af_vsock.c
+++ b/net/vmw_vsock/af_vsock.c
@@ -1557,8 +1557,6 @@ static int vsock_stream_sendmsg(struct socket *sock, struct msghdr *msg,
1557 if (err < 0) 1557 if (err < 0)
1558 goto out; 1558 goto out;
1559 1559
1560 prepare_to_wait(sk_sleep(sk), &wait, TASK_INTERRUPTIBLE);
1561
1562 while (total_written < len) { 1560 while (total_written < len) {
1563 ssize_t written; 1561 ssize_t written;
1564 1562
@@ -1578,7 +1576,9 @@ static int vsock_stream_sendmsg(struct socket *sock, struct msghdr *msg,
1578 goto out_wait; 1576 goto out_wait;
1579 1577
1580 release_sock(sk); 1578 release_sock(sk);
1579 prepare_to_wait(sk_sleep(sk), &wait, TASK_INTERRUPTIBLE);
1581 timeout = schedule_timeout(timeout); 1580 timeout = schedule_timeout(timeout);
1581 finish_wait(sk_sleep(sk), &wait);
1582 lock_sock(sk); 1582 lock_sock(sk);
1583 if (signal_pending(current)) { 1583 if (signal_pending(current)) {
1584 err = sock_intr_errno(timeout); 1584 err = sock_intr_errno(timeout);
@@ -1588,8 +1588,6 @@ static int vsock_stream_sendmsg(struct socket *sock, struct msghdr *msg,
1588 goto out_wait; 1588 goto out_wait;
1589 } 1589 }
1590 1590
1591 prepare_to_wait(sk_sleep(sk), &wait,
1592 TASK_INTERRUPTIBLE);
1593 } 1591 }
1594 1592
1595 /* These checks occur both as part of and after the loop 1593 /* These checks occur both as part of and after the loop
@@ -1635,7 +1633,6 @@ static int vsock_stream_sendmsg(struct socket *sock, struct msghdr *msg,
1635out_wait: 1633out_wait:
1636 if (total_written > 0) 1634 if (total_written > 0)
1637 err = total_written; 1635 err = total_written;
1638 finish_wait(sk_sleep(sk), &wait);
1639out: 1636out:
1640 release_sock(sk); 1637 release_sock(sk);
1641 return err; 1638 return err;
@@ -1716,7 +1713,6 @@ vsock_stream_recvmsg(struct socket *sock, struct msghdr *msg, size_t len,
1716 if (err < 0) 1713 if (err < 0)
1717 goto out; 1714 goto out;
1718 1715
1719 prepare_to_wait(sk_sleep(sk), &wait, TASK_INTERRUPTIBLE);
1720 1716
1721 while (1) { 1717 while (1) {
1722 s64 ready = vsock_stream_has_data(vsk); 1718 s64 ready = vsock_stream_has_data(vsk);
@@ -1727,7 +1723,7 @@ vsock_stream_recvmsg(struct socket *sock, struct msghdr *msg, size_t len,
1727 */ 1723 */
1728 1724
1729 err = -ENOMEM; 1725 err = -ENOMEM;
1730 goto out_wait; 1726 goto out;
1731 } else if (ready > 0) { 1727 } else if (ready > 0) {
1732 ssize_t read; 1728 ssize_t read;
1733 1729
@@ -1750,7 +1746,7 @@ vsock_stream_recvmsg(struct socket *sock, struct msghdr *msg, size_t len,
1750 vsk, target, read, 1746 vsk, target, read,
1751 !(flags & MSG_PEEK), &recv_data); 1747 !(flags & MSG_PEEK), &recv_data);
1752 if (err < 0) 1748 if (err < 0)
1753 goto out_wait; 1749 goto out;
1754 1750
1755 if (read >= target || flags & MSG_PEEK) 1751 if (read >= target || flags & MSG_PEEK)
1756 break; 1752 break;
@@ -1773,7 +1769,9 @@ vsock_stream_recvmsg(struct socket *sock, struct msghdr *msg, size_t len,
1773 break; 1769 break;
1774 1770
1775 release_sock(sk); 1771 release_sock(sk);
1772 prepare_to_wait(sk_sleep(sk), &wait, TASK_INTERRUPTIBLE);
1776 timeout = schedule_timeout(timeout); 1773 timeout = schedule_timeout(timeout);
1774 finish_wait(sk_sleep(sk), &wait);
1777 lock_sock(sk); 1775 lock_sock(sk);
1778 1776
1779 if (signal_pending(current)) { 1777 if (signal_pending(current)) {
@@ -1783,9 +1781,6 @@ vsock_stream_recvmsg(struct socket *sock, struct msghdr *msg, size_t len,
1783 err = -EAGAIN; 1781 err = -EAGAIN;
1784 break; 1782 break;
1785 } 1783 }
1786
1787 prepare_to_wait(sk_sleep(sk), &wait,
1788 TASK_INTERRUPTIBLE);
1789 } 1784 }
1790 } 1785 }
1791 1786
@@ -1816,8 +1811,6 @@ vsock_stream_recvmsg(struct socket *sock, struct msghdr *msg, size_t len,
1816 err = copied; 1811 err = copied;
1817 } 1812 }
1818 1813
1819out_wait:
1820 finish_wait(sk_sleep(sk), &wait);
1821out: 1814out:
1822 release_sock(sk); 1815 release_sock(sk);
1823 return err; 1816 return err;