mirror of https://gitee.com/openkylin/linux.git
xprtrdma: Address coverity complaint about wait_for_completion()
> ** CID 114101: Error handling issues (CHECKED_RETURN) > /net/sunrpc/xprtrdma/verbs.c: 355 in rpcrdma_create_id() Commit5675add36e
("RPC/RDMA: harden connection logic against missing/late rdma_cm upcalls.") replaced wait_for_completion() calls with these two call sites. The original wait_for_completion() calls were added in the initial commit of verbs.c, which was commitc56c65fb67
("RPCRDMA: rpc rdma verbs interface implementation"), but these returned void. rpcrdma_create_id() is called by the RDMA connect worker, which probably won't ever be interrupted. It is also called by rpcrdma_ia_open which is in the synchronous mount path, and ^C is possible there. Add a bit of logic at those two call sites to return if the waits return ERESTARTSYS. Signed-off-by: Chuck Lever <chuck.lever@oracle.com> Signed-off-by: Anna Schumaker <Anna.Schumaker@Netapp.com>
This commit is contained in:
parent
ae09531d3c
commit
109b88ab9d
|
@ -331,6 +331,7 @@ static struct rdma_cm_id *
|
|||
rpcrdma_create_id(struct rpcrdma_xprt *xprt,
|
||||
struct rpcrdma_ia *ia, struct sockaddr *addr)
|
||||
{
|
||||
unsigned long wtimeout = msecs_to_jiffies(RDMA_RESOLVE_TIMEOUT) + 1;
|
||||
struct rdma_cm_id *id;
|
||||
int rc;
|
||||
|
||||
|
@ -352,8 +353,12 @@ rpcrdma_create_id(struct rpcrdma_xprt *xprt,
|
|||
__func__, rc);
|
||||
goto out;
|
||||
}
|
||||
wait_for_completion_interruptible_timeout(&ia->ri_done,
|
||||
msecs_to_jiffies(RDMA_RESOLVE_TIMEOUT) + 1);
|
||||
rc = wait_for_completion_interruptible_timeout(&ia->ri_done, wtimeout);
|
||||
if (rc < 0) {
|
||||
dprintk("RPC: %s: wait() exited: %i\n",
|
||||
__func__, rc);
|
||||
goto out;
|
||||
}
|
||||
|
||||
/* FIXME:
|
||||
* Until xprtrdma supports DEVICE_REMOVAL, the provider must
|
||||
|
@ -376,8 +381,12 @@ rpcrdma_create_id(struct rpcrdma_xprt *xprt,
|
|||
__func__, rc);
|
||||
goto put;
|
||||
}
|
||||
wait_for_completion_interruptible_timeout(&ia->ri_done,
|
||||
msecs_to_jiffies(RDMA_RESOLVE_TIMEOUT) + 1);
|
||||
rc = wait_for_completion_interruptible_timeout(&ia->ri_done, wtimeout);
|
||||
if (rc < 0) {
|
||||
dprintk("RPC: %s: wait() exited: %i\n",
|
||||
__func__, rc);
|
||||
goto put;
|
||||
}
|
||||
rc = ia->ri_async_rc;
|
||||
if (rc)
|
||||
goto put;
|
||||
|
|
Loading…
Reference in New Issue