|
@@ -274,6 +274,8 @@ static const struct super_operations nfs_sops = {
|
|
|
#ifdef CONFIG_NFS_V4
|
|
|
static int nfs4_validate_text_mount_data(void *options,
|
|
|
struct nfs_parsed_mount_data *args, const char *dev_name);
|
|
|
+static int nfs4_try_mount(int flags, const char *dev_name,
|
|
|
+ struct nfs_parsed_mount_data *data, struct vfsmount *mnt);
|
|
|
static int nfs4_get_sb(struct file_system_type *fs_type,
|
|
|
int flags, const char *dev_name, void *raw_data, struct vfsmount *mnt);
|
|
|
static int nfs4_remote_get_sb(struct file_system_type *fs_type,
|
|
@@ -2565,6 +2567,34 @@ out_err:
|
|
|
return ret;
|
|
|
}
|
|
|
|
|
|
+static int nfs4_try_mount(int flags, const char *dev_name,
|
|
|
+ struct nfs_parsed_mount_data *data,
|
|
|
+ struct vfsmount *mnt)
|
|
|
+{
|
|
|
+ char *export_path;
|
|
|
+ struct vfsmount *root_mnt;
|
|
|
+ int error;
|
|
|
+
|
|
|
+ dfprintk(MOUNT, "--> nfs4_try_mount()\n");
|
|
|
+
|
|
|
+ export_path = data->nfs_server.export_path;
|
|
|
+ data->nfs_server.export_path = "/";
|
|
|
+ root_mnt = nfs_do_root_mount(&nfs4_remote_fs_type, flags, data,
|
|
|
+ data->nfs_server.hostname);
|
|
|
+ data->nfs_server.export_path = export_path;
|
|
|
+
|
|
|
+ error = PTR_ERR(root_mnt);
|
|
|
+ if (IS_ERR(root_mnt))
|
|
|
+ goto out;
|
|
|
+
|
|
|
+ error = nfs_follow_remote_path(root_mnt, export_path, mnt);
|
|
|
+
|
|
|
+out:
|
|
|
+ dfprintk(MOUNT, "<-- nfs4_try_mount() = %d%s\n", error,
|
|
|
+ error != 0 ? " [error]" : "");
|
|
|
+ return error;
|
|
|
+}
|
|
|
+
|
|
|
/*
|
|
|
* Get the superblock for an NFS4 mountpoint
|
|
|
*/
|
|
@@ -2572,8 +2602,6 @@ static int nfs4_get_sb(struct file_system_type *fs_type,
|
|
|
int flags, const char *dev_name, void *raw_data, struct vfsmount *mnt)
|
|
|
{
|
|
|
struct nfs_parsed_mount_data *data;
|
|
|
- char *export_path;
|
|
|
- struct vfsmount *root_mnt;
|
|
|
int error = -ENOMEM;
|
|
|
|
|
|
data = kzalloc(sizeof(*data), GFP_KERNEL);
|
|
@@ -2585,17 +2613,7 @@ static int nfs4_get_sb(struct file_system_type *fs_type,
|
|
|
if (error < 0)
|
|
|
goto out;
|
|
|
|
|
|
- export_path = data->nfs_server.export_path;
|
|
|
- data->nfs_server.export_path = "/";
|
|
|
- root_mnt = nfs_do_root_mount(&nfs4_remote_fs_type, flags, data,
|
|
|
- data->nfs_server.hostname);
|
|
|
- data->nfs_server.export_path = export_path;
|
|
|
-
|
|
|
- error = PTR_ERR(root_mnt);
|
|
|
- if (IS_ERR(root_mnt))
|
|
|
- goto out;
|
|
|
-
|
|
|
- error = nfs_follow_remote_path(root_mnt, export_path, mnt);
|
|
|
+ error = nfs4_try_mount(flags, dev_name, data, mnt);
|
|
|
|
|
|
out:
|
|
|
kfree(data->client_address);
|