• Sage Weil's avatar
    ceph: fix dentry rehashing on virtual .snap dir · 9358c6d4
    Sage Weil authored
    If a lookup fails on the magic .snap directory, we bind it to a magic
    snap directory inode in ceph_lookup_finish().  That code assumes the dentry
    is unhashed, but a recent server-side change started returning NULL leases
    on lookup failure, causing the .snap dentry to be hashed and NULL by
    ceph_fill_trace().
    
    This causes dentry hash chain corruption, or a dies when d_rehash()
    includes
    	BUG_ON(!d_unhashed(entry));
    
    So, avoid processing the NULL dentry lease if it the dentry matches the
    snapdir name in ceph_fill_trace().  That allows the lookup completion to
    properly bind it to the snapdir inode.  BUG there if dentry is hashed to
    be sure.
    Signed-off-by: default avatarSage Weil <sage@newdream.net>
    9358c6d4
inode.c 47.8 KB