Loading fs/nfs/super.c +31 −13 Original line number Diff line number Diff line Loading @@ -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, Loading Loading @@ -2565,6 +2567,34 @@ static int nfs_follow_remote_path(struct vfsmount *root_mnt, 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 */ Loading @@ -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); Loading @@ -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); Loading Loading
fs/nfs/super.c +31 −13 Original line number Diff line number Diff line Loading @@ -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, Loading Loading @@ -2565,6 +2567,34 @@ static int nfs_follow_remote_path(struct vfsmount *root_mnt, 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 */ Loading @@ -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); Loading @@ -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); Loading