diff options
author | Nick Piggin <npiggin@kernel.dk> | 2010-08-17 18:37:30 (GMT) |
---|---|---|
committer | Al Viro <viro@zeniv.linux.org.uk> | 2010-08-18 12:35:45 (GMT) |
commit | 2e2e88ea8c3bd9e1bd6e42faf047a4ac3fbb3b2f (patch) | |
tree | 398f6de92d9e41419297354a26e25e0db8a693f6 /arch/m68knommu/Kconfig | |
parent | 3a48ee8a4ad26c3a538b6fc11a86a8f80c3dce18 (diff) | |
download | linux-fsl-qoriq-2e2e88ea8c3bd9e1bd6e42faf047a4ac3fbb3b2f.tar.xz |
fs: fix do_lookup false negative
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: Nick Piggin <npiggin@kernel.dk>
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Diffstat (limited to 'arch/m68knommu/Kconfig')
0 files changed, 0 insertions, 0 deletions