mirror of
https://github.com/torvalds/linux.git
synced 2024-11-21 19:41:42 +00:00
nfs: enable localio for non-pNFS IO
Try a local open of the file being written to, and if it succeeds, then use localio to issue IO. Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com> Signed-off-by: Mike Snitzer <snitzer@kernel.org> Reviewed-by: NeilBrown <neilb@suse.de> Reviewed-by: Jeff Layton <jlayton@kernel.org> Signed-off-by: Anna Schumaker <anna.schumaker@oracle.com>
This commit is contained in:
parent
70ba381e1a
commit
fa88a7d6ae
@ -958,6 +958,12 @@ static int nfs_generic_pg_pgios(struct nfs_pageio_descriptor *desc)
|
|||||||
nfs_pgheader_init(desc, hdr, nfs_pgio_header_free);
|
nfs_pgheader_init(desc, hdr, nfs_pgio_header_free);
|
||||||
ret = nfs_generic_pgio(desc, hdr);
|
ret = nfs_generic_pgio(desc, hdr);
|
||||||
if (ret == 0) {
|
if (ret == 0) {
|
||||||
|
struct nfs_client *clp = NFS_SERVER(hdr->inode)->nfs_client;
|
||||||
|
|
||||||
|
struct nfsd_file *localio =
|
||||||
|
nfs_local_open_fh(clp, hdr->cred,
|
||||||
|
hdr->args.fh, hdr->args.context->mode);
|
||||||
|
|
||||||
if (NFS_SERVER(hdr->inode)->nfs_client->cl_minorversion)
|
if (NFS_SERVER(hdr->inode)->nfs_client->cl_minorversion)
|
||||||
task_flags = RPC_TASK_MOVEABLE;
|
task_flags = RPC_TASK_MOVEABLE;
|
||||||
ret = nfs_initiate_pgio(NFS_CLIENT(hdr->inode),
|
ret = nfs_initiate_pgio(NFS_CLIENT(hdr->inode),
|
||||||
@ -967,7 +973,7 @@ static int nfs_generic_pg_pgios(struct nfs_pageio_descriptor *desc)
|
|||||||
desc->pg_rpc_callops,
|
desc->pg_rpc_callops,
|
||||||
desc->pg_ioflags,
|
desc->pg_ioflags,
|
||||||
RPC_TASK_CRED_NOREF | task_flags,
|
RPC_TASK_CRED_NOREF | task_flags,
|
||||||
NULL);
|
localio);
|
||||||
}
|
}
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
@ -1796,6 +1796,7 @@ nfs_commit_list(struct inode *inode, struct list_head *head, int how,
|
|||||||
struct nfs_commit_info *cinfo)
|
struct nfs_commit_info *cinfo)
|
||||||
{
|
{
|
||||||
struct nfs_commit_data *data;
|
struct nfs_commit_data *data;
|
||||||
|
struct nfsd_file *localio;
|
||||||
unsigned short task_flags = 0;
|
unsigned short task_flags = 0;
|
||||||
|
|
||||||
/* another commit raced with us */
|
/* another commit raced with us */
|
||||||
@ -1812,9 +1813,12 @@ nfs_commit_list(struct inode *inode, struct list_head *head, int how,
|
|||||||
nfs_init_commit(data, head, NULL, cinfo);
|
nfs_init_commit(data, head, NULL, cinfo);
|
||||||
if (NFS_SERVER(inode)->nfs_client->cl_minorversion)
|
if (NFS_SERVER(inode)->nfs_client->cl_minorversion)
|
||||||
task_flags = RPC_TASK_MOVEABLE;
|
task_flags = RPC_TASK_MOVEABLE;
|
||||||
|
|
||||||
|
localio = nfs_local_open_fh(NFS_SERVER(inode)->nfs_client, data->cred,
|
||||||
|
data->args.fh, data->context->mode);
|
||||||
return nfs_initiate_commit(NFS_CLIENT(inode), data, NFS_PROTO(inode),
|
return nfs_initiate_commit(NFS_CLIENT(inode), data, NFS_PROTO(inode),
|
||||||
data->mds_ops, how,
|
data->mds_ops, how,
|
||||||
RPC_TASK_CRED_NOREF | task_flags, NULL);
|
RPC_TASK_CRED_NOREF | task_flags, localio);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
Loading…
Reference in New Issue
Block a user