• Andrew Morton's avatar
    [PATCH] Set d_bucket correctly for anonymous dentries · 59a6ce4f
    Andrew Morton authored
    From: Neil Brown <neilb@cse.unsw.edu.au>
    
    In researching the oopses reported in bug #2761, Neil came up with:
    
    I have found one problem, but it isn't particularly new and I cannot
     see how it would be related.
    
    When d_alloc_anon creates an anonymous dentry, it is put on a special hash
    chain for anonymous dentries (sb->s_anon), but d_bucket is set to 
    
       d_hash(parent, name_hash)
    
    If, when it is eventually moved to a proper name, that hash value is the same
    as the final hash value, it will not be moved to the right bucket, and so it
    not be accessible by name.  This patch should fix it.
    
    
    
    anonymous dentries have their own private hash "bucket" (sb->s_anon) and so
    d_bucket should be set to a unique (impossible) address, else d_move will
    get confused.
    Signed-off-by: default avatarNeil Brown <neilb@cse.unsw.edu.au>
    Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
    59a6ce4f
dcache.c 41.8 KB