diff options
Diffstat (limited to 'net/sunrpc/xprtsock.c')
-rw-r--r-- | net/sunrpc/xprtsock.c | 58 |
1 files changed, 31 insertions, 27 deletions
diff --git a/net/sunrpc/xprtsock.c b/net/sunrpc/xprtsock.c index 879af6f27b4c..8e58b0b5460b 100644 --- a/net/sunrpc/xprtsock.c +++ b/net/sunrpc/xprtsock.c | |||
@@ -1162,7 +1162,7 @@ static void xs_tcp_state_change(struct sock *sk) | |||
1162 | transport->tcp_flags = | 1162 | transport->tcp_flags = |
1163 | TCP_RCV_COPY_FRAGHDR | TCP_RCV_COPY_XID; | 1163 | TCP_RCV_COPY_FRAGHDR | TCP_RCV_COPY_XID; |
1164 | 1164 | ||
1165 | xprt_wake_pending_tasks(xprt, 0); | 1165 | xprt_wake_pending_tasks(xprt, -EAGAIN); |
1166 | } | 1166 | } |
1167 | spin_unlock_bh(&xprt->transport_lock); | 1167 | spin_unlock_bh(&xprt->transport_lock); |
1168 | break; | 1168 | break; |
@@ -1721,20 +1721,22 @@ static void xs_tcp_connect_worker4(struct work_struct *work) | |||
1721 | dprintk("RPC: %p connect status %d connected %d sock state %d\n", | 1721 | dprintk("RPC: %p connect status %d connected %d sock state %d\n", |
1722 | xprt, -status, xprt_connected(xprt), | 1722 | xprt, -status, xprt_connected(xprt), |
1723 | sock->sk->sk_state); | 1723 | sock->sk->sk_state); |
1724 | if (status < 0) { | 1724 | switch (status) { |
1725 | switch (status) { | 1725 | case 0: |
1726 | case -EINPROGRESS: | 1726 | case -EINPROGRESS: |
1727 | case -EALREADY: | 1727 | case -EALREADY: |
1728 | goto out_clear; | 1728 | goto out_clear; |
1729 | case -ECONNREFUSED: | 1729 | case -ECONNREFUSED: |
1730 | case -ECONNRESET: | 1730 | case -ECONNRESET: |
1731 | /* retry with existing socket, after a delay */ | 1731 | /* retry with existing socket, after a delay */ |
1732 | break; | 1732 | break; |
1733 | default: | 1733 | default: |
1734 | /* get rid of existing socket, and retry */ | 1734 | /* get rid of existing socket, and retry */ |
1735 | xs_tcp_shutdown(xprt); | 1735 | xs_tcp_shutdown(xprt); |
1736 | } | 1736 | printk("%s: connect returned unhandled error %d\n", |
1737 | __func__, status); | ||
1737 | } | 1738 | } |
1739 | status = -EAGAIN; | ||
1738 | out: | 1740 | out: |
1739 | xprt_wake_pending_tasks(xprt, status); | 1741 | xprt_wake_pending_tasks(xprt, status); |
1740 | out_clear: | 1742 | out_clear: |
@@ -1780,20 +1782,22 @@ static void xs_tcp_connect_worker6(struct work_struct *work) | |||
1780 | status = xs_tcp_finish_connecting(xprt, sock); | 1782 | status = xs_tcp_finish_connecting(xprt, sock); |
1781 | dprintk("RPC: %p connect status %d connected %d sock state %d\n", | 1783 | dprintk("RPC: %p connect status %d connected %d sock state %d\n", |
1782 | xprt, -status, xprt_connected(xprt), sock->sk->sk_state); | 1784 | xprt, -status, xprt_connected(xprt), sock->sk->sk_state); |
1783 | if (status < 0) { | 1785 | switch (status) { |
1784 | switch (status) { | 1786 | case 0: |
1785 | case -EINPROGRESS: | 1787 | case -EINPROGRESS: |
1786 | case -EALREADY: | 1788 | case -EALREADY: |
1787 | goto out_clear; | 1789 | goto out_clear; |
1788 | case -ECONNREFUSED: | 1790 | case -ECONNREFUSED: |
1789 | case -ECONNRESET: | 1791 | case -ECONNRESET: |
1790 | /* retry with existing socket, after a delay */ | 1792 | /* retry with existing socket, after a delay */ |
1791 | break; | 1793 | break; |
1792 | default: | 1794 | default: |
1793 | /* get rid of existing socket, and retry */ | 1795 | /* get rid of existing socket, and retry */ |
1794 | xs_tcp_shutdown(xprt); | 1796 | xs_tcp_shutdown(xprt); |
1795 | } | 1797 | printk("%s: connect returned unhandled error %d\n", |
1798 | __func__, status); | ||
1796 | } | 1799 | } |
1800 | status = -EAGAIN; | ||
1797 | out: | 1801 | out: |
1798 | xprt_wake_pending_tasks(xprt, status); | 1802 | xprt_wake_pending_tasks(xprt, status); |
1799 | out_clear: | 1803 | out_clear: |