Commit 97d1152a authored by Al Viro's avatar Al Viro

cifs: pull cifs_mount() call up

... to the point prior to sget().  Now we have cifs_sb set up early
enough.
Acked-by: default avatarPavel Shilovsky <piastryyy@gmail.com>
Reviewed-by: default avatarJeff Layton <jlayton@redhat.com>
Signed-off-by: default avatarAl Viro <viro@zeniv.linux.org.uk>
parent 2a9b9951
...@@ -104,8 +104,7 @@ cifs_sb_deactive(struct super_block *sb) ...@@ -104,8 +104,7 @@ cifs_sb_deactive(struct super_block *sb)
} }
static int static int
cifs_read_super(struct super_block *sb, struct smb_vol *volume_info, cifs_read_super(struct super_block *sb)
const char *devname, int silent)
{ {
struct inode *inode; struct inode *inode;
struct cifs_sb_info *cifs_sb; struct cifs_sb_info *cifs_sb;
...@@ -113,14 +112,6 @@ cifs_read_super(struct super_block *sb, struct smb_vol *volume_info, ...@@ -113,14 +112,6 @@ cifs_read_super(struct super_block *sb, struct smb_vol *volume_info,
cifs_sb = CIFS_SB(sb); cifs_sb = CIFS_SB(sb);
rc = cifs_mount(cifs_sb, volume_info);
if (rc) {
if (!silent)
cERROR(1, "cifs_mount failed w/return code = %d", rc);
return rc;
}
if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_POSIXACL) if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_POSIXACL)
sb->s_flags |= MS_POSIXACL; sb->s_flags |= MS_POSIXACL;
...@@ -692,6 +683,17 @@ cifs_do_mount(struct file_system_type *fs_type, ...@@ -692,6 +683,17 @@ cifs_do_mount(struct file_system_type *fs_type,
cifs_setup_cifs_sb(volume_info, cifs_sb); cifs_setup_cifs_sb(volume_info, cifs_sb);
rc = cifs_mount(cifs_sb, volume_info);
if (rc) {
if (!(flags & MS_SILENT))
cERROR(1, "cifs_mount failed w/return code = %d", rc);
root = ERR_PTR(rc);
unload_nls(volume_info->local_nls);
kfree(cifs_sb->mountdata);
kfree(cifs_sb);
goto out;
}
mnt_data.vol = volume_info; mnt_data.vol = volume_info;
mnt_data.cifs_sb = cifs_sb; mnt_data.cifs_sb = cifs_sb;
mnt_data.flags = flags; mnt_data.flags = flags;
...@@ -699,11 +701,13 @@ cifs_do_mount(struct file_system_type *fs_type, ...@@ -699,11 +701,13 @@ cifs_do_mount(struct file_system_type *fs_type,
sb = sget(fs_type, cifs_match_super, set_anon_super, &mnt_data); sb = sget(fs_type, cifs_match_super, set_anon_super, &mnt_data);
if (IS_ERR(sb)) { if (IS_ERR(sb)) {
root = ERR_CAST(sb); root = ERR_CAST(sb);
cifs_umount(cifs_sb);
goto out_cifs_sb; goto out_cifs_sb;
} }
if (sb->s_fs_info) { if (sb->s_fs_info) {
cFYI(1, "Use existing superblock"); cFYI(1, "Use existing superblock");
cifs_umount(cifs_sb);
kfree(cifs_sb->mountdata); kfree(cifs_sb->mountdata);
unload_nls(cifs_sb->local_nls); unload_nls(cifs_sb->local_nls);
kfree(cifs_sb); kfree(cifs_sb);
...@@ -715,8 +719,7 @@ cifs_do_mount(struct file_system_type *fs_type, ...@@ -715,8 +719,7 @@ cifs_do_mount(struct file_system_type *fs_type,
sb->s_flags |= MS_NODIRATIME | MS_NOATIME; sb->s_flags |= MS_NODIRATIME | MS_NOATIME;
sb->s_fs_info = cifs_sb; sb->s_fs_info = cifs_sb;
rc = cifs_read_super(sb, volume_info, dev_name, rc = cifs_read_super(sb);
flags & MS_SILENT ? 1 : 0);
if (rc) { if (rc) {
root = ERR_PTR(rc); root = ERR_PTR(rc);
goto out_super; goto out_super;
......
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