Nick Piggin 2e2e88ea8c 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>
2010-08-18 08:35:45 -04:00
..
2010-06-16 18:05:05 +02:00
2010-08-09 16:48:53 -04:00
2010-08-18 01:01:33 -04:00
2010-05-19 22:41:57 -04:00
2010-08-05 14:23:45 -05:00
2010-08-09 16:48:45 -04:00
2010-08-18 01:09:01 -04:00
2010-08-18 06:21:10 -04:00
2010-08-09 16:48:17 -04:00
2010-08-09 16:48:16 -04:00
2010-08-09 16:47:49 -04:00
2010-08-18 01:09:01 -04:00
2010-08-18 01:09:01 -04:00
2010-08-14 00:24:24 +02:00
2010-08-18 01:09:00 -04:00
2010-08-09 16:47:31 -04:00
2010-08-18 01:09:01 -04:00
2010-01-26 22:22:26 -05:00
2010-08-09 16:48:00 -04:00
2010-08-18 01:09:01 -04:00
2010-08-05 13:21:23 -07:00
2010-08-18 01:09:01 -04:00
2010-05-11 17:43:58 +02:00
2010-08-11 08:59:02 -07:00
2010-08-12 08:43:30 -07:00
2010-05-21 18:31:16 -04:00
2010-03-08 16:55:37 +01:00
2010-05-21 18:31:17 -04:00
2010-08-18 08:35:45 -04:00
2010-08-11 00:29:47 -04:00
2010-06-10 19:08:34 +02:00
2010-03-12 15:52:32 -08:00
2010-08-09 16:48:44 -04:00
2010-08-09 16:47:43 -04:00