Skip to content

Commit

Permalink
SUNRPC: xprt_connect() don't abort the task if the transport isn't bound
Browse files Browse the repository at this point in the history
If the transport isn't bound, then we should just return ENOTCONN, letting
call_connect_status() and/or call_status() deal with retrying. Currently,
we appear to abort all pending tasks with an EIO error.

Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
  • Loading branch information
Trond Myklebust authored and Trond Myklebust committed Mar 11, 2009
1 parent fba91af commit 01d37c4
Show file tree
Hide file tree
Showing 2 changed files with 10 additions and 5 deletions.
2 changes: 1 addition & 1 deletion net/sunrpc/xprt.c
Original file line number Diff line number Diff line change
Expand Up @@ -663,7 +663,7 @@ void xprt_connect(struct rpc_task *task)
xprt, (xprt_connected(xprt) ? "is" : "is not"));

if (!xprt_bound(xprt)) {
task->tk_status = -EIO;
task->tk_status = -EAGAIN;
return;
}
if (!xprt_lock_write(xprt, task))
Expand Down
13 changes: 9 additions & 4 deletions net/sunrpc/xprtsock.c
Original file line number Diff line number Diff line change
Expand Up @@ -577,6 +577,8 @@ static int xs_udp_send_request(struct rpc_task *task)
req->rq_svec->iov_base,
req->rq_svec->iov_len);

if (!xprt_bound(xprt))
return -ENOTCONN;
status = xs_sendpages(transport->sock,
xs_addr(xprt),
xprt->addrlen, xdr,
Expand Down Expand Up @@ -1531,7 +1533,7 @@ static void xs_udp_connect_worker4(struct work_struct *work)
struct socket *sock = transport->sock;
int err, status = -EIO;

if (xprt->shutdown || !xprt_bound(xprt))
if (xprt->shutdown)
goto out;

/* Start by resetting any existing state */
Expand Down Expand Up @@ -1572,7 +1574,7 @@ static void xs_udp_connect_worker6(struct work_struct *work)
struct socket *sock = transport->sock;
int err, status = -EIO;

if (xprt->shutdown || !xprt_bound(xprt))
if (xprt->shutdown)
goto out;

/* Start by resetting any existing state */
Expand Down Expand Up @@ -1656,6 +1658,9 @@ static int xs_tcp_finish_connecting(struct rpc_xprt *xprt, struct socket *sock)
write_unlock_bh(&sk->sk_callback_lock);
}

if (!xprt_bound(xprt))
return -ENOTCONN;

/* Tell the socket layer to start connecting... */
xprt->stat.connect_count++;
xprt->stat.connect_start = jiffies;
Expand All @@ -1676,7 +1681,7 @@ static void xs_tcp_connect_worker4(struct work_struct *work)
struct socket *sock = transport->sock;
int err, status = -EIO;

if (xprt->shutdown || !xprt_bound(xprt))
if (xprt->shutdown)
goto out;

if (!sock) {
Expand Down Expand Up @@ -1736,7 +1741,7 @@ static void xs_tcp_connect_worker6(struct work_struct *work)
struct socket *sock = transport->sock;
int err, status = -EIO;

if (xprt->shutdown || !xprt_bound(xprt))
if (xprt->shutdown)
goto out;

if (!sock) {
Expand Down

0 comments on commit 01d37c4

Please sign in to comment.