Skip to content

Commit fa88a7d

Browse files
Trond MyklebustAnna Schumaker
authored andcommitted
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>
1 parent 70ba381 commit fa88a7d

File tree

2 files changed

+12
-2
lines changed

2 files changed

+12
-2
lines changed

fs/nfs/pagelist.c

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -958,6 +958,12 @@ static int nfs_generic_pg_pgios(struct nfs_pageio_descriptor *desc)
958958
nfs_pgheader_init(desc, hdr, nfs_pgio_header_free);
959959
ret = nfs_generic_pgio(desc, hdr);
960960
if (ret == 0) {
961+
struct nfs_client *clp = NFS_SERVER(hdr->inode)->nfs_client;
962+
963+
struct nfsd_file *localio =
964+
nfs_local_open_fh(clp, hdr->cred,
965+
hdr->args.fh, hdr->args.context->mode);
966+
961967
if (NFS_SERVER(hdr->inode)->nfs_client->cl_minorversion)
962968
task_flags = RPC_TASK_MOVEABLE;
963969
ret = nfs_initiate_pgio(NFS_CLIENT(hdr->inode),
@@ -967,7 +973,7 @@ static int nfs_generic_pg_pgios(struct nfs_pageio_descriptor *desc)
967973
desc->pg_rpc_callops,
968974
desc->pg_ioflags,
969975
RPC_TASK_CRED_NOREF | task_flags,
970-
NULL);
976+
localio);
971977
}
972978
return ret;
973979
}

fs/nfs/write.c

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1796,6 +1796,7 @@ nfs_commit_list(struct inode *inode, struct list_head *head, int how,
17961796
struct nfs_commit_info *cinfo)
17971797
{
17981798
struct nfs_commit_data *data;
1799+
struct nfsd_file *localio;
17991800
unsigned short task_flags = 0;
18001801

18011802
/* another commit raced with us */
@@ -1812,9 +1813,12 @@ nfs_commit_list(struct inode *inode, struct list_head *head, int how,
18121813
nfs_init_commit(data, head, NULL, cinfo);
18131814
if (NFS_SERVER(inode)->nfs_client->cl_minorversion)
18141815
task_flags = RPC_TASK_MOVEABLE;
1816+
1817+
localio = nfs_local_open_fh(NFS_SERVER(inode)->nfs_client, data->cred,
1818+
data->args.fh, data->context->mode);
18151819
return nfs_initiate_commit(NFS_CLIENT(inode), data, NFS_PROTO(inode),
18161820
data->mds_ops, how,
1817-
RPC_TASK_CRED_NOREF | task_flags, NULL);
1821+
RPC_TASK_CRED_NOREF | task_flags, localio);
18181822
}
18191823

18201824
/*

0 commit comments

Comments
 (0)