Skip to content

Commit 7abb83a

Browse files
author
Herton R. Krzesinski
committed
Merge: NFS: Allow setting rsize / wsize to a multiple of PAGE_SIZE and fix
MR: https://gitlab.com/redhat/centos-stream/src/kernel/centos-stream-9/-/merge_requests/1813 Brew: https://brewweb.engineering.redhat.com/brew/taskinfo?taskID=49749117 Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=2107347 Signed-off-by: Benjamin Coddington <bcodding@redhat.com> Approved-by: Scott Mayhew <smayhew@redhat.com> Approved-by: Jeffrey Layton <jlayton@redhat.com> Signed-off-by: Herton R. Krzesinski <herton@redhat.com>
2 parents 982ff83 + 8cfc686 commit 7abb83a

File tree

4 files changed

+29
-10
lines changed

4 files changed

+29
-10
lines changed

fs/nfs/client.c

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -708,9 +708,9 @@ static int nfs_init_server(struct nfs_server *server,
708708
}
709709

710710
if (ctx->rsize)
711-
server->rsize = nfs_block_size(ctx->rsize, NULL);
711+
server->rsize = nfs_io_size(ctx->rsize, clp->cl_proto);
712712
if (ctx->wsize)
713-
server->wsize = nfs_block_size(ctx->wsize, NULL);
713+
server->wsize = nfs_io_size(ctx->wsize, clp->cl_proto);
714714

715715
server->acregmin = ctx->acregmin * HZ;
716716
server->acregmax = ctx->acregmax * HZ;
@@ -755,18 +755,19 @@ static int nfs_init_server(struct nfs_server *server,
755755
static void nfs_server_set_fsinfo(struct nfs_server *server,
756756
struct nfs_fsinfo *fsinfo)
757757
{
758+
struct nfs_client *clp = server->nfs_client;
758759
unsigned long max_rpc_payload, raw_max_rpc_payload;
759760

760761
/* Work out a lot of parameters */
761762
if (server->rsize == 0)
762-
server->rsize = nfs_block_size(fsinfo->rtpref, NULL);
763+
server->rsize = nfs_io_size(fsinfo->rtpref, clp->cl_proto);
763764
if (server->wsize == 0)
764-
server->wsize = nfs_block_size(fsinfo->wtpref, NULL);
765+
server->wsize = nfs_io_size(fsinfo->wtpref, clp->cl_proto);
765766

766767
if (fsinfo->rtmax >= 512 && server->rsize > fsinfo->rtmax)
767-
server->rsize = nfs_block_size(fsinfo->rtmax, NULL);
768+
server->rsize = nfs_io_size(fsinfo->rtmax, clp->cl_proto);
768769
if (fsinfo->wtmax >= 512 && server->wsize > fsinfo->wtmax)
769-
server->wsize = nfs_block_size(fsinfo->wtmax, NULL);
770+
server->wsize = nfs_io_size(fsinfo->wtmax, clp->cl_proto);
770771

771772
raw_max_rpc_payload = rpc_max_payload(server->client);
772773
max_rpc_payload = nfs_block_size(raw_max_rpc_payload, NULL);

fs/nfs/flexfilelayout/flexfilelayoutdev.c

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -113,8 +113,10 @@ nfs4_ff_alloc_deviceid_node(struct nfs_server *server, struct pnfs_device *pdev,
113113
goto out_err_drain_dsaddrs;
114114
ds_versions[i].version = be32_to_cpup(p++);
115115
ds_versions[i].minor_version = be32_to_cpup(p++);
116-
ds_versions[i].rsize = nfs_block_size(be32_to_cpup(p++), NULL);
117-
ds_versions[i].wsize = nfs_block_size(be32_to_cpup(p++), NULL);
116+
ds_versions[i].rsize = nfs_io_size(be32_to_cpup(p++),
117+
server->nfs_client->cl_proto);
118+
ds_versions[i].wsize = nfs_io_size(be32_to_cpup(p++),
119+
server->nfs_client->cl_proto);
118120
ds_versions[i].tightly_coupled = be32_to_cpup(p);
119121

120122
if (ds_versions[i].rsize > NFS_MAX_FILE_IO_SIZE)

fs/nfs/internal.h

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -729,6 +729,22 @@ unsigned long nfs_block_size(unsigned long bsize, unsigned char *nrbitsp)
729729
return nfs_block_bits(bsize, nrbitsp);
730730
}
731731

732+
/*
733+
* Compute and set NFS server rsize / wsize
734+
*/
735+
static inline
736+
unsigned long nfs_io_size(unsigned long iosize, enum xprt_transports proto)
737+
{
738+
if (iosize < NFS_MIN_FILE_IO_SIZE)
739+
iosize = NFS_DEF_FILE_IO_SIZE;
740+
else if (iosize >= NFS_MAX_FILE_IO_SIZE)
741+
iosize = NFS_MAX_FILE_IO_SIZE;
742+
743+
if (proto == XPRT_TRANSPORT_UDP || iosize < PAGE_SIZE)
744+
return nfs_block_bits(iosize, NULL);
745+
return iosize & PAGE_MASK;
746+
}
747+
732748
/*
733749
* Determine the maximum file size for a superblock
734750
*/

fs/nfs/nfs4client.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1161,9 +1161,9 @@ static int nfs4_init_server(struct nfs_server *server, struct fs_context *fc)
11611161
return error;
11621162

11631163
if (ctx->rsize)
1164-
server->rsize = nfs_block_size(ctx->rsize, NULL);
1164+
server->rsize = nfs_io_size(ctx->rsize, server->nfs_client->cl_proto);
11651165
if (ctx->wsize)
1166-
server->wsize = nfs_block_size(ctx->wsize, NULL);
1166+
server->wsize = nfs_io_size(ctx->wsize, server->nfs_client->cl_proto);
11671167

11681168
server->acregmin = ctx->acregmin * HZ;
11691169
server->acregmax = ctx->acregmax * HZ;

0 commit comments

Comments
 (0)