lkml.org 
[lkml]   [2019]   [Jul]   [24]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.2 277/413] cifs: Properly handle auto disabling of serverino option
    Date
    From: Paulo Alcantara (SUSE) <paulo@paulo.ac>

    commit 29fbeb7a908a60a5ae8c50fbe171cb8fdcef1980 upstream.

    Fix mount options comparison when serverino option is turned off later
    in cifs_autodisable_serverino() and thus avoiding mismatch of new cifs
    mounts.

    Cc: stable@vger.kernel.org
    Signed-off-by: Paulo Alcantara (SUSE) <paulo@paulo.ac>
    Signed-off-by: Steve French <stfrench@microsoft.com>
    Reviewed-by: Pavel Shilovsky <pshilove@microsoft.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

    ---
    fs/cifs/cifs_fs_sb.h | 5 +++++
    fs/cifs/connect.c | 8 ++++++--
    fs/cifs/misc.c | 1 +
    3 files changed, 12 insertions(+), 2 deletions(-)

    --- a/fs/cifs/cifs_fs_sb.h
    +++ b/fs/cifs/cifs_fs_sb.h
    @@ -83,5 +83,10 @@ struct cifs_sb_info {
    * failover properly.
    */
    char *origin_fullpath; /* \\HOST\SHARE\[OPTIONAL PATH] */
    + /*
    + * Indicate whether serverino option was turned off later
    + * (cifs_autodisable_serverino) in order to match new mounts.
    + */
    + bool mnt_cifs_serverino_autodisabled;
    };
    #endif /* _CIFS_FS_SB_H */
    --- a/fs/cifs/connect.c
    +++ b/fs/cifs/connect.c
    @@ -3460,12 +3460,16 @@ compare_mount_options(struct super_block
    {
    struct cifs_sb_info *old = CIFS_SB(sb);
    struct cifs_sb_info *new = mnt_data->cifs_sb;
    + unsigned int oldflags = old->mnt_cifs_flags & CIFS_MOUNT_MASK;
    + unsigned int newflags = new->mnt_cifs_flags & CIFS_MOUNT_MASK;

    if ((sb->s_flags & CIFS_MS_MASK) != (mnt_data->flags & CIFS_MS_MASK))
    return 0;

    - if ((old->mnt_cifs_flags & CIFS_MOUNT_MASK) !=
    - (new->mnt_cifs_flags & CIFS_MOUNT_MASK))
    + if (old->mnt_cifs_serverino_autodisabled)
    + newflags &= ~CIFS_MOUNT_SERVER_INUM;
    +
    + if (oldflags != newflags)
    return 0;

    /*
    --- a/fs/cifs/misc.c
    +++ b/fs/cifs/misc.c
    @@ -539,6 +539,7 @@ cifs_autodisable_serverino(struct cifs_s
    tcon = cifs_sb_master_tcon(cifs_sb);

    cifs_sb->mnt_cifs_flags &= ~CIFS_MOUNT_SERVER_INUM;
    + cifs_sb->mnt_cifs_serverino_autodisabled = true;
    cifs_dbg(VFS, "Autodisabling the use of server inode numbers on %s.\n",
    tcon ? tcon->treeName : "new server");
    cifs_dbg(VFS, "The server doesn't seem to support them properly or the files might be on different servers (DFS).\n");

    \
     
     \ /
      Last update: 2019-07-24 21:36    [W:2.170 / U:0.068 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site