Commit 1cef2184 authored by Scott Mayhew's avatar Scott Mayhew Committed by Anna Schumaker

NFS: Ensure the fs_context has the correct fs_type before mounting

This is necessary because unless userspace explicitly requests fstype
"nfs4" (either via "mount -t nfs4" or by calling the "mount.nfs4" helper
directly), the fstype will default to "nfs".

This was fine on older kernels because the super_block->s_type was set
via mount_info->nfs_mod->nfs_fs, which was set when parsing the mount
options and subsequently passed in the "type" argument of sget().

After commit f2aedb71 ("NFS: Add fs_context support."), sget_fc(),
which has no "type" argument, is called instead.  In sget_fc(), the
super_block->s_type is set via fs_context->fs_type, which was set when
the filesystem context was initially created.
Reported-by: default avatarPatrick Steinhardt <ps@pks.im>
Fixes: f2aedb71 ("NFS: Add fs_context support.")
Signed-off-by: default avatarScott Mayhew <smayhew@redhat.com>
Signed-off-by: default avatarAnna Schumaker <Anna.Schumaker@Netapp.com>
parent 5d63944f
...@@ -1240,6 +1240,13 @@ static int nfs_fs_context_validate(struct fs_context *fc) ...@@ -1240,6 +1240,13 @@ static int nfs_fs_context_validate(struct fs_context *fc)
} }
ctx->nfs_mod = nfs_mod; ctx->nfs_mod = nfs_mod;
} }
/* Ensure the filesystem context has the correct fs_type */
if (fc->fs_type != ctx->nfs_mod->nfs_fs) {
module_put(fc->fs_type->owner);
__module_get(ctx->nfs_mod->nfs_fs->owner);
fc->fs_type = ctx->nfs_mod->nfs_fs;
}
return 0; return 0;
out_no_device_name: out_no_device_name:
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment