Compare prepaths when comparing superblocks
The patch fs/cifs: make share unaccessible at root level mountable makes use of prepaths when any component of the underlying path is inaccessible. When mounting 2 separate shares having different prepaths but are other wise similar in other respects, we end up sharing superblocks when we shouldn't be doing so. Signed-off-by: Sachin Prabhu <sprabhu@redhat.com> Tested-by: Aurelien Aptel <aaptel@suse.com> Signed-off-by: Steve French <smfrench@gmail.com>
This commit is contained in:
parent
4214ebf465
commit
c1d8b24d18
@ -2781,6 +2781,24 @@ compare_mount_options(struct super_block *sb, struct cifs_mnt_data *mnt_data)
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int
|
||||||
|
match_prepath(struct super_block *sb, struct cifs_mnt_data *mnt_data)
|
||||||
|
{
|
||||||
|
struct cifs_sb_info *old = CIFS_SB(sb);
|
||||||
|
struct cifs_sb_info *new = mnt_data->cifs_sb;
|
||||||
|
|
||||||
|
if (old->mnt_cifs_flags & CIFS_MOUNT_USE_PREFIX_PATH) {
|
||||||
|
if (!(new->mnt_cifs_flags & CIFS_MOUNT_USE_PREFIX_PATH))
|
||||||
|
return 0;
|
||||||
|
/* The prepath should be null terminated strings */
|
||||||
|
if (strcmp(new->prepath, old->prepath))
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
cifs_match_super(struct super_block *sb, void *data)
|
cifs_match_super(struct super_block *sb, void *data)
|
||||||
{
|
{
|
||||||
@ -2808,7 +2826,8 @@ cifs_match_super(struct super_block *sb, void *data)
|
|||||||
|
|
||||||
if (!match_server(tcp_srv, volume_info) ||
|
if (!match_server(tcp_srv, volume_info) ||
|
||||||
!match_session(ses, volume_info) ||
|
!match_session(ses, volume_info) ||
|
||||||
!match_tcon(tcon, volume_info->UNC)) {
|
!match_tcon(tcon, volume_info->UNC) ||
|
||||||
|
!match_prepath(sb, mnt_data)) {
|
||||||
rc = 0;
|
rc = 0;
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user