pNFS: Allow layout drivers to manage private data in struct nfs4_layoutreturn
Cleanup to allow layout drivers to attach private data to layoutreturn, and manage the data. Signed-off-by: Trond Myklebust <trond.myklebust@primarydata.com>
This commit is contained in:
parent
f8c3cf9d7d
commit
4d796d751c
|
@ -3039,6 +3039,7 @@ struct nfs4_closedata {
|
|||
struct {
|
||||
struct nfs4_layoutreturn_args arg;
|
||||
struct nfs4_layoutreturn_res res;
|
||||
struct nfs4_xdr_opaque_data ld_private;
|
||||
u32 roc_barrier;
|
||||
bool roc;
|
||||
} lr;
|
||||
|
@ -3267,6 +3268,7 @@ int nfs4_do_close(struct nfs4_state *state, gfp_t gfp_mask, int wait)
|
|||
if (IS_ERR(calldata->arg.seqid))
|
||||
goto out_free_calldata;
|
||||
calldata->arg.fmode = 0;
|
||||
calldata->lr.arg.ld_private = &calldata->lr.ld_private;
|
||||
calldata->res.fattr = &calldata->fattr;
|
||||
calldata->res.seqid = calldata->arg.seqid;
|
||||
calldata->res.server = server;
|
||||
|
@ -5599,6 +5601,7 @@ struct nfs4_delegreturndata {
|
|||
struct {
|
||||
struct nfs4_layoutreturn_args arg;
|
||||
struct nfs4_layoutreturn_res res;
|
||||
struct nfs4_xdr_opaque_data ld_private;
|
||||
u32 roc_barrier;
|
||||
bool roc;
|
||||
} lr;
|
||||
|
@ -5735,6 +5738,7 @@ static int _nfs4_proc_delegreturn(struct inode *inode, struct rpc_cred *cred, co
|
|||
data->res.fattr = &data->fattr;
|
||||
data->res.server = server;
|
||||
data->res.lr_ret = -NFS4ERR_NOMATCHING_LAYOUT;
|
||||
data->lr.arg.ld_private = &data->lr.ld_private;
|
||||
nfs_fattr_init(data->res.fattr);
|
||||
data->timestamp = jiffies;
|
||||
data->rpc_status = 0;
|
||||
|
@ -8633,6 +8637,8 @@ static void nfs4_layoutreturn_release(void *calldata)
|
|||
nfs4_sequence_free_slot(&lrp->res.seq_res);
|
||||
pnfs_put_layout_hdr(lrp->args.layout);
|
||||
nfs_iput_and_deactive(lrp->inode);
|
||||
if (lrp->ld_private.ops && lrp->ld_private.ops->free)
|
||||
lrp->ld_private.ops->free(&lrp->ld_private);
|
||||
kfree(calldata);
|
||||
dprintk("<-- %s\n", __func__);
|
||||
}
|
||||
|
|
|
@ -2035,7 +2035,9 @@ encode_layoutreturn(struct xdr_stream *xdr,
|
|||
spin_lock(&args->inode->i_lock);
|
||||
encode_nfs4_stateid(xdr, &args->stateid);
|
||||
spin_unlock(&args->inode->i_lock);
|
||||
if (lr_ops->encode_layoutreturn)
|
||||
if (args->ld_private->ops && args->ld_private->ops->encode)
|
||||
args->ld_private->ops->encode(xdr, args, args->ld_private);
|
||||
else if (lr_ops->encode_layoutreturn)
|
||||
lr_ops->encode_layoutreturn(xdr, args);
|
||||
else
|
||||
encode_uint32(xdr, 0);
|
||||
|
|
|
@ -1086,6 +1086,7 @@ pnfs_send_layoutreturn(struct pnfs_layout_hdr *lo, const nfs4_stateid *stateid,
|
|||
}
|
||||
|
||||
pnfs_init_layoutreturn_args(&lrp->args, lo, stateid, iomode);
|
||||
lrp->args.ld_private = &lrp->ld_private;
|
||||
lrp->clp = NFS_SERVER(ino)->nfs_client;
|
||||
lrp->cred = lo->plh_lc_cred;
|
||||
|
||||
|
|
|
@ -320,6 +320,7 @@ struct nfs4_layoutreturn_args {
|
|||
struct pnfs_layout_range range;
|
||||
nfs4_stateid stateid;
|
||||
__u32 layout_type;
|
||||
struct nfs4_xdr_opaque_data *ld_private;
|
||||
};
|
||||
|
||||
struct nfs4_layoutreturn_res {
|
||||
|
@ -335,6 +336,7 @@ struct nfs4_layoutreturn {
|
|||
struct nfs_client *clp;
|
||||
struct inode *inode;
|
||||
int rpc_status;
|
||||
struct nfs4_xdr_opaque_data ld_private;
|
||||
};
|
||||
|
||||
#define PNFS_LAYOUTSTATS_MAXSIZE 256
|
||||
|
|
Loading…
Reference in New Issue