diff options
author | Ian Kent <raven@themaw.net> | 2008-07-23 21:30:27 -0700 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2008-07-24 10:47:32 -0700 |
commit | 6e60a9ab5f5d314735467752f623072f5b75157a (patch) | |
tree | 1a42df40e6fad52bd6be74970af8eb56870fe6ba /fs/hfsplus | |
parent | 97e7449a7ad883bf9f516fc970778d75999c7843 (diff) | |
download | linux-6e60a9ab5f5d314735467752f623072f5b75157a.tar.gz linux-6e60a9ab5f5d314735467752f623072f5b75157a.tar.bz2 linux-6e60a9ab5f5d314735467752f623072f5b75157a.zip |
autofs4: fix direct mount pending expire race
For direct and offset type mounts that are covered by another mount we
cannot check the AUTOFS_INF_EXPIRING flag during a path walk which leads
to lookups walking into an expiring mount while it is being expired.
For example, for the direct multi-mount map entry with a couple of
offsets:
/race/mm1 / <server1>:/<path1>
/om1 <server2>:/<path2>
/om2 <server1>:/<path3>
an autofs trigger mount is mounted on /race/mm1 and when accessed it is
over mounted and trigger mounts made for /race/mm1/om1 and /race/mm1/om2.
So it isn't possible for path walks to see the expiring flag at all and
they happily walk into the file system while it is expiring.
When expiring these mounts follow_down() must stop at the autofs mount and
all processes must block in the ->follow_link() method (except the daemon)
until the expire is complete. This is done by decrementing the d_mounted
field of the autofs trigger mount root dentry until the expire is
completed. In ->follow_link() all processes wait on the expire and the
mount following is completed for the daemon until the expire is complete.
Signed-off-by: Ian Kent <raven@themaw.net>
Cc: Jeff Moyer <jmoyer@redhat.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'fs/hfsplus')
0 files changed, 0 insertions, 0 deletions