Commit 71ac6da9 authored by Trond Myklebust's avatar Trond Myklebust

NFSv4.1: Merge the nfs41_proc_async_sequence() and nfs4_proc_sequence()

Signed-off-by: default avatarTrond Myklebust <Trond.Myklebust@netapp.com>
parent aa5190d0
...@@ -5048,24 +5048,6 @@ int nfs4_init_session(struct nfs_server *server) ...@@ -5048,24 +5048,6 @@ int nfs4_init_session(struct nfs_server *server)
/* /*
* Renew the cl_session lease. * Renew the cl_session lease.
*/ */
static int nfs4_proc_sequence(struct nfs_client *clp, struct rpc_cred *cred)
{
struct nfs4_sequence_args args;
struct nfs4_sequence_res res;
struct rpc_message msg = {
.rpc_proc = &nfs4_procedures[NFSPROC4_CLNT_SEQUENCE],
.rpc_argp = &args,
.rpc_resp = &res,
.rpc_cred = cred,
};
args.sa_cache_this = 0;
return nfs4_call_sync_sequence(clp, clp->cl_rpcclient, &msg, &args,
&res, args.sa_cache_this, 1);
}
struct nfs4_sequence_data { struct nfs4_sequence_data {
struct nfs_client *clp; struct nfs_client *clp;
struct nfs4_sequence_args args; struct nfs4_sequence_args args;
...@@ -5139,29 +5121,67 @@ static const struct rpc_call_ops nfs41_sequence_ops = { ...@@ -5139,29 +5121,67 @@ static const struct rpc_call_ops nfs41_sequence_ops = {
.rpc_release = nfs41_sequence_release, .rpc_release = nfs41_sequence_release,
}; };
static int nfs41_proc_async_sequence(struct nfs_client *clp, static struct rpc_task *_nfs41_proc_sequence(struct nfs_client *clp, struct rpc_cred *cred)
struct rpc_cred *cred)
{ {
struct nfs4_sequence_data *calldata; struct nfs4_sequence_data *calldata;
struct rpc_message msg = { struct rpc_message msg = {
.rpc_proc = &nfs4_procedures[NFSPROC4_CLNT_SEQUENCE], .rpc_proc = &nfs4_procedures[NFSPROC4_CLNT_SEQUENCE],
.rpc_cred = cred, .rpc_cred = cred,
}; };
struct rpc_task_setup task_setup_data = {
.rpc_client = clp->cl_rpcclient,
.rpc_message = &msg,
.callback_ops = &nfs41_sequence_ops,
.flags = RPC_TASK_ASYNC | RPC_TASK_SOFT,
};
if (!atomic_inc_not_zero(&clp->cl_count)) if (!atomic_inc_not_zero(&clp->cl_count))
return -EIO; return ERR_PTR(-EIO);
calldata = kmalloc(sizeof(*calldata), GFP_NOFS); calldata = kmalloc(sizeof(*calldata), GFP_NOFS);
if (calldata == NULL) { if (calldata == NULL) {
nfs_put_client(clp); nfs_put_client(clp);
return -ENOMEM; return ERR_PTR(-ENOMEM);
} }
calldata->res.sr_slotid = NFS4_MAX_SLOT_TABLE; calldata->res.sr_slotid = NFS4_MAX_SLOT_TABLE;
msg.rpc_argp = &calldata->args; msg.rpc_argp = &calldata->args;
msg.rpc_resp = &calldata->res; msg.rpc_resp = &calldata->res;
calldata->clp = clp; calldata->clp = clp;
task_setup_data.callback_data = calldata;
return rpc_call_async(clp->cl_rpcclient, &msg, RPC_TASK_SOFT, return rpc_run_task(&task_setup_data);
&nfs41_sequence_ops, calldata); }
static int nfs41_proc_async_sequence(struct nfs_client *clp, struct rpc_cred *cred)
{
struct rpc_task *task;
int ret = 0;
task = _nfs41_proc_sequence(clp, cred);
if (IS_ERR(task))
ret = PTR_ERR(task);
else
rpc_put_task(task);
dprintk("<-- %s status=%d\n", __func__, ret);
return ret;
}
static int nfs4_proc_sequence(struct nfs_client *clp, struct rpc_cred *cred)
{
struct rpc_task *task;
int ret;
task = _nfs41_proc_sequence(clp, cred);
if (IS_ERR(task)) {
ret = PTR_ERR(task);
goto out;
}
ret = rpc_wait_for_completion_task(task);
if (!ret)
ret = task->tk_status;
rpc_put_task(task);
out:
dprintk("<-- %s status=%d\n", __func__, ret);
return ret;
} }
struct nfs4_reclaim_complete_data { struct nfs4_reclaim_complete_data {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment