• Jeff Layton's avatar
    cifs: set sb->s_d_op before calling d_make_root() · 66ffd113
    Jeff Layton authored
    Currently, the s_root dentry doesn't get its d_op pointer set to
    anything. This breaks lookups in the root of case-insensitive mounts
    since that relies on having d_hash and d_compare routines that know to
    treat the filename as case-insensitive.
    
    cifs.ko has been broken this way for a long time, but commit 1c929cfe
    ("switch cifs"), added a cryptic comment which is removed in the patch
    below, which makes me wonder if this was done deliberately for some
    reason. It's not clear to me why we'd want the s_root not to have d_op
    set properly.
    
    It may have something to do with d_automount or d_revalidate on the
    root, but my suspicion in looking over the code is that Al was just
    trying to preserve the existing behavior when changing this code over to
    use s_d_op.
    
    This patch changes it so that we set s_d_op before calling d_make_root
    and removes the comment. I tested mounting, accessing and unmounting
    several types of shares (including DFS referrals) and everything still
    seemed to work OK afterward. I could be missing something however, so
    please do let me know if I am.
    Reported-by: default avatarJan-Marek Glogowski <glogow@fbihome.de>
    Cc: Al Viro <viro@ZenIV.linux.org.uk>
    Cc: Ian Kent <raven@themaw.net>
    Signed-off-by: default avatarJeff Layton <jlayton@redhat.com>
    Signed-off-by: default avatarSteve French <smfrench@gmail.com>
    66ffd113
cifsfs.c 32.7 KB