NFSD: Increase NFSD_MAX_OPS_PER_COMPOUND
authorChuck Lever <chuck.lever@oracle.com>
Fri, 2 Sep 2022 22:18:16 +0000 (18:18 -0400)
committerChuck Lever <chuck.lever@oracle.com>
Mon, 26 Sep 2022 18:02:25 +0000 (14:02 -0400)
commit80e591ce636f3ae6855a0ca26963da1fdd6d4508
tree5125e143eb9315dce6f4f6cf9847f6c0583da00c
parent30a30fcc3fc1ad4c5d017c9fcb75dc8f59e7bdad
NFSD: Increase NFSD_MAX_OPS_PER_COMPOUND

When attempting an NFSv4 mount, a Solaris NFSv4 client builds a
single large COMPOUND that chains a series of LOOKUPs to get to the
pseudo filesystem root directory that is to be mounted. The Linux
NFS server's current maximum of 16 operations per NFSv4 COMPOUND is
not large enough to ensure that this works for paths that are more
than a few components deep.

Since NFSD_MAX_OPS_PER_COMPOUND is mostly a sanity check, and most
NFSv4 COMPOUNDS are between 3 and 6 operations (thus they do not
trigger any re-allocation of the operation array on the server),
increasing this maximum should result in little to no impact.

The ops array can get large now, so allocate it via vmalloc() to
help ensure memory fragmentation won't cause an allocation failure.

Link: https://bugzilla.kernel.org/show_bug.cgi?id=216383
Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
fs/nfsd/nfs4xdr.c
fs/nfsd/state.h