• N
    fs: fix do_lookup false negative · 2e2e88ea
    Nick Piggin 提交于
    fs: fix do_lookup false negative
    
    In do_lookup, if we initially find no dentry, we take the directory i_mutex and
    re-check the lookup. If we find a dentry there, then we revalidate it if
    needed. However if that revalidate asks for the dentry to be invalidated, we
    return -ENOENT from do_lookup. What should happen instead is an attempt to
    allocate and lookup a new dentry.
    
    This is probably not noticed because it is rare. It is only reached if a
    concurrent create races in first (in which case, the dentry probably won't be
    invalidated anyway), or if the racy __d_lookup has failed due to a
    false-negative (which is very rare).
    
    Fix this by removing code and have it use the normal reval path.
    Signed-off-by: NNick Piggin <npiggin@kernel.dk>
    Signed-off-by: NAl Viro <viro@zeniv.linux.org.uk>
    2e2e88ea
namei.c 70.2 KB