Files
linux-apfs/fs
Eric W. Biederman bafc9b754f vfs: More precise tests in d_invalidate
The current comments in d_invalidate about what and why it is doing
what it is doing are wildly off-base.  Which is not surprising as
the comments date back to last minute bug fix of the 2.2 kernel.

The big fat lie of a comment said: If it's a directory, we can't drop
it for fear of somebody re-populating it with children (even though
dropping it would make it unreachable from that root, we still might
repopulate it if it was a working directory or similar).

[AV] What we really need to avoid is multiple dentry aliases of the
same directory inode; on all filesystems that have ->d_revalidate()
we either declare all positive dentries always valid (and thus never
fed to d_invalidate()) or use d_materialise_unique() and/or d_splice_alias(),
which take care of alias prevention.

The current rules are:
- To prevent mount point leaks dentries that are mount points or that
  have childrent that are mount points may not be be unhashed.
- All dentries may be unhashed.
- Directories may be rehashed with d_materialise_unique

check_submounts_and_drop implements this already for well maintained
remote filesystems so implement the current rules in d_invalidate
by just calling check_submounts_and_drop.

The one difference between d_invalidate and check_submounts_and_drop
is that d_invalidate must respect it when a d_revalidate method has
earlier called d_drop so preserve the d_unhashed check in
d_invalidate.

Reviewed-by: Miklos Szeredi <miklos@szeredi.hu>
Signed-off-by: "Eric W. Biederman" <ebiederm@xmission.com>
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
2014-10-09 02:38:54 -04:00
..
2014-08-08 15:57:24 -07:00
2014-09-16 06:48:20 -05:00
2014-08-08 15:57:20 -07:00
2014-06-04 16:53:53 -07:00
2014-09-12 20:58:55 +01:00
2014-08-07 14:40:09 -04:00
2014-09-08 12:02:03 -04:00
2014-09-26 08:10:34 -07:00
2014-08-06 18:01:12 -07:00
2014-07-15 22:40:23 +02:00
2014-07-31 15:52:51 +03:00
2014-09-26 21:17:52 -04:00
2014-08-07 14:40:09 -04:00
2014-08-08 15:57:23 -07:00
2014-08-08 15:57:31 -07:00
2014-05-06 17:31:10 -04:00
2014-08-07 14:40:08 -04:00
2014-10-09 02:38:53 -04:00
2014-10-09 02:38:53 -04:00
2014-05-06 17:39:42 -04:00
2014-04-01 23:19:08 -04:00
2014-07-23 10:18:02 -07:00