mirror of
https://github.com/torvalds/linux.git
synced 2024-11-22 20:22:09 +00:00
NFS: Create a try_mount rpc op
I'm already looking up the nfs subversion in nfs_fs_mount(), so I have easy access to rpc_ops that used to be difficult to reach. This allows me to set up a different mount path for NFS v2/3 and NFS v4. Signed-off-by: Bryan Schumaker <bjschuma@netapp.com> Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
This commit is contained in:
parent
e8f25e6d6d
commit
ff9099f266
@ -328,6 +328,8 @@ extern struct file_system_type nfs_xdev_fs_type;
|
||||
extern struct file_system_type nfs4_xdev_fs_type;
|
||||
extern struct file_system_type nfs4_referral_fs_type;
|
||||
#endif
|
||||
struct dentry *nfs_try_mount(int, const char *, struct nfs_mount_info *,
|
||||
struct nfs_subversion *);
|
||||
void nfs_initialise_sb(struct super_block *);
|
||||
int nfs_set_sb_security(struct super_block *, struct dentry *, struct nfs_mount_info *);
|
||||
int nfs_clone_sb_security(struct super_block *, struct dentry *, struct nfs_mount_info *);
|
||||
|
@ -925,6 +925,7 @@ const struct nfs_rpc_ops nfs_v3_clientops = {
|
||||
.file_ops = &nfs_file_operations,
|
||||
.getroot = nfs3_proc_get_root,
|
||||
.submount = nfs_submount,
|
||||
.try_mount = nfs_try_mount,
|
||||
.getattr = nfs3_proc_getattr,
|
||||
.setattr = nfs3_proc_setattr,
|
||||
.lookup = nfs3_proc_lookup,
|
||||
|
@ -367,7 +367,7 @@ extern const nfs4_stateid zero_stateid;
|
||||
/* nfs4super.c */
|
||||
struct nfs_mount_info;
|
||||
extern struct nfs_subversion nfs_v4;
|
||||
struct dentry *nfs4_try_mount(int, const char *, struct nfs_mount_info *);
|
||||
struct dentry *nfs4_try_mount(int, const char *, struct nfs_mount_info *, struct nfs_subversion *);
|
||||
int init_nfs_v4(void);
|
||||
void exit_nfs_v4(void);
|
||||
|
||||
|
@ -6870,6 +6870,7 @@ const struct nfs_rpc_ops nfs_v4_clientops = {
|
||||
.file_ops = &nfs4_file_operations,
|
||||
.getroot = nfs4_proc_get_root,
|
||||
.submount = nfs4_submount,
|
||||
.try_mount = nfs4_try_mount,
|
||||
.getattr = nfs4_proc_getattr,
|
||||
.setattr = nfs4_proc_setattr,
|
||||
.lookup = nfs4_proc_lookup,
|
||||
|
@ -226,7 +226,8 @@ static struct dentry *nfs_follow_remote_path(struct vfsmount *root_mnt,
|
||||
}
|
||||
|
||||
struct dentry *nfs4_try_mount(int flags, const char *dev_name,
|
||||
struct nfs_mount_info *mount_info)
|
||||
struct nfs_mount_info *mount_info,
|
||||
struct nfs_subversion *nfs_mod)
|
||||
{
|
||||
char *export_path;
|
||||
struct vfsmount *root_mnt;
|
||||
|
@ -774,6 +774,7 @@ const struct nfs_rpc_ops nfs_v2_clientops = {
|
||||
.file_ops = &nfs_file_operations,
|
||||
.getroot = nfs_proc_get_root,
|
||||
.submount = nfs_submount,
|
||||
.try_mount = nfs_try_mount,
|
||||
.getattr = nfs_proc_getattr,
|
||||
.setattr = nfs_proc_setattr,
|
||||
.lookup = nfs_proc_lookup,
|
||||
|
@ -1650,9 +1650,9 @@ static int nfs_request_mount(struct nfs_parsed_mount_data *args,
|
||||
return nfs_walk_authlist(args, &request);
|
||||
}
|
||||
|
||||
static struct dentry *nfs_try_mount(int flags, const char *dev_name,
|
||||
struct nfs_mount_info *mount_info,
|
||||
struct nfs_subversion *nfs_mod)
|
||||
struct dentry *nfs_try_mount(int flags, const char *dev_name,
|
||||
struct nfs_mount_info *mount_info,
|
||||
struct nfs_subversion *nfs_mod)
|
||||
{
|
||||
int status;
|
||||
struct nfs_server *server;
|
||||
@ -2403,15 +2403,9 @@ struct dentry *nfs_fs_mount(struct file_system_type *fs_type,
|
||||
goto out;
|
||||
}
|
||||
|
||||
#ifdef CONFIG_NFS_V4
|
||||
if (mount_info.parsed->version == 4)
|
||||
mntroot = nfs4_try_mount(flags, dev_name, &mount_info);
|
||||
else
|
||||
#endif /* CONFIG_NFS_V4 */
|
||||
mntroot = nfs_try_mount(flags, dev_name, &mount_info, nfs_mod);
|
||||
mntroot = nfs_mod->rpc_ops->try_mount(flags, dev_name, &mount_info, nfs_mod);
|
||||
|
||||
put_nfs_version(nfs_mod);
|
||||
|
||||
out:
|
||||
nfs_free_parsed_mount_data(mount_info.parsed);
|
||||
nfs_free_fhandle(mount_info.mntfh);
|
||||
|
@ -1353,6 +1353,8 @@ struct nfs_renamedata {
|
||||
struct nfs_access_entry;
|
||||
struct nfs_client;
|
||||
struct rpc_timeout;
|
||||
struct nfs_subversion;
|
||||
struct nfs_mount_info;
|
||||
struct nfs_client_initdata;
|
||||
struct nfs_pageio_descriptor;
|
||||
|
||||
@ -1370,6 +1372,8 @@ struct nfs_rpc_ops {
|
||||
struct nfs_fsinfo *);
|
||||
struct vfsmount *(*submount) (struct nfs_server *, struct dentry *,
|
||||
struct nfs_fh *, struct nfs_fattr *);
|
||||
struct dentry *(*try_mount) (int, const char *, struct nfs_mount_info *,
|
||||
struct nfs_subversion *);
|
||||
int (*getattr) (struct nfs_server *, struct nfs_fh *,
|
||||
struct nfs_fattr *);
|
||||
int (*setattr) (struct dentry *, struct nfs_fattr *,
|
||||
|
Loading…
Reference in New Issue
Block a user