NFSv4: Turn off open-by-filehandle and NFS re-export for NFSv4.0
[ Upstream commit 2a9d683b48c8a87e61a4215792d44c90bcbbb536 ]
The NFSv4.0 protocol only supports open() by name. It cannot therefore
be used with open_by_handle() and friends, nor can it be re-exported by
knfsd.
Reported-by: Chuck Lever III <chuck.lever@oracle.com>
Fixes: 20fa190272
("nfs: add export operations")
Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:

committed by
Greg Kroah-Hartman

parent
2f16f5b582
commit
4d065f8356
@@ -1029,22 +1029,31 @@ static void nfs_fill_super(struct super_block *sb, struct nfs_fs_context *ctx)
|
|||||||
if (ctx && ctx->bsize)
|
if (ctx && ctx->bsize)
|
||||||
sb->s_blocksize = nfs_block_size(ctx->bsize, &sb->s_blocksize_bits);
|
sb->s_blocksize = nfs_block_size(ctx->bsize, &sb->s_blocksize_bits);
|
||||||
|
|
||||||
if (server->nfs_client->rpc_ops->version != 2) {
|
switch (server->nfs_client->rpc_ops->version) {
|
||||||
/* The VFS shouldn't apply the umask to mode bits. We will do
|
case 2:
|
||||||
* so ourselves when necessary.
|
sb->s_time_gran = 1000;
|
||||||
|
sb->s_time_min = 0;
|
||||||
|
sb->s_time_max = U32_MAX;
|
||||||
|
break;
|
||||||
|
case 3:
|
||||||
|
/*
|
||||||
|
* The VFS shouldn't apply the umask to mode bits.
|
||||||
|
* We will do so ourselves when necessary.
|
||||||
*/
|
*/
|
||||||
sb->s_flags |= SB_POSIXACL;
|
sb->s_flags |= SB_POSIXACL;
|
||||||
sb->s_time_gran = 1;
|
sb->s_time_gran = 1;
|
||||||
sb->s_export_op = &nfs_export_ops;
|
|
||||||
} else
|
|
||||||
sb->s_time_gran = 1000;
|
|
||||||
|
|
||||||
if (server->nfs_client->rpc_ops->version != 4) {
|
|
||||||
sb->s_time_min = 0;
|
sb->s_time_min = 0;
|
||||||
sb->s_time_max = U32_MAX;
|
sb->s_time_max = U32_MAX;
|
||||||
} else {
|
sb->s_export_op = &nfs_export_ops;
|
||||||
|
break;
|
||||||
|
case 4:
|
||||||
|
sb->s_flags |= SB_POSIXACL;
|
||||||
|
sb->s_time_gran = 1;
|
||||||
sb->s_time_min = S64_MIN;
|
sb->s_time_min = S64_MIN;
|
||||||
sb->s_time_max = S64_MAX;
|
sb->s_time_max = S64_MAX;
|
||||||
|
if (server->caps & NFS_CAP_ATOMIC_OPEN_V1)
|
||||||
|
sb->s_export_op = &nfs_export_ops;
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
sb->s_magic = NFS_SUPER_MAGIC;
|
sb->s_magic = NFS_SUPER_MAGIC;
|
||||||
|
Reference in New Issue
Block a user