Commit ff383e8f authored by Jeff Layton's avatar Jeff Layton Committed by Chuck Lever
Browse files

nfsd: handle errors from rpc_call_async()



It's possible for rpc_call_async() to fail (mainly due to memory
allocation failure). If it does, there isn't much recourse other than to
requeue the callback and try again later.

Signed-off-by: default avatarJeff Layton <jlayton@kernel.org>
Signed-off-by: default avatarChuck Lever <chuck.lever@oracle.com>
parent 32ce62c0
Loading
Loading
Loading
Loading
+7 −3
Original line number Diff line number Diff line
@@ -1592,7 +1592,7 @@ nfsd4_run_cb_work(struct work_struct *work)
		container_of(work, struct nfsd4_callback, cb_work);
	struct nfs4_client *clp = cb->cb_clp;
	struct rpc_clnt *clnt;
	int flags;
	int flags, ret;

	trace_nfsd_cb_start(clp);

@@ -1625,8 +1625,12 @@ nfsd4_run_cb_work(struct work_struct *work)

	cb->cb_msg.rpc_cred = clp->cl_cb_cred;
	flags = clp->cl_minorversion ? RPC_TASK_NOCONNECT : RPC_TASK_SOFTCONN;
	rpc_call_async(clnt, &cb->cb_msg, RPC_TASK_SOFT | flags,
	ret = rpc_call_async(clnt, &cb->cb_msg, RPC_TASK_SOFT | flags,
			     cb->cb_ops ? &nfsd4_cb_ops : &nfsd4_cb_probe_ops, cb);
	if (ret != 0) {
		set_bit(NFSD4_CALLBACK_REQUEUE, &cb->cb_flags);
		nfsd4_queue_cb(cb);
	}
}

void nfsd4_init_cb(struct nfsd4_callback *cb, struct nfs4_client *clp,