LINUX: Do not lookup immediately recursive mtpts
authorAndrew Deason <adeason@sinenomine.net>
Fri, 6 Apr 2012 19:56:07 +0000 (14:56 -0500)
committerDerrick Brashear <shadow@dementix.org>
Tue, 31 Jul 2012 16:35:39 +0000 (09:35 -0700)
commitd785abd5ec9302bdc1b3c33368246e573e0cd65d
tree28e4f20fc98158a543d735a9ad765e68b4c499b0
parentde381aa0d39e88a1ca0c8ccbb2471c5cad5a964c
LINUX: Do not lookup immediately recursive mtpts

On Linux, having a mountpoint in a volume root that points to the same
volume can cause serious problems. By 'immediately recursive', I mean
a situation like the following:

fs mkm mtpt vol
fs mkm mtpt/mtpt vol

If there are multiple dentry aliases for the directory (which is
possible if the directory is a mountpoint), an 'rmdir' on the
recursive mountpoint can cause the client to deadlock. Since the
'rmdir' code path in Linux locks the parent directory inode to perform
the rmdir, and locks the child directory inode after performing a
couple of sanity checks. For an immediately recursive mountpoint,
these two inodes are the same, and so we will deadlock.

Change-Id: Icb9bf8a3dd77a2ef6b88856b0d41556541bb1d00
Reviewed-on: http://gerrit.openafs.org/7742
Tested-by: BuildBot <buildbot@rampaginggeek.com>
Reviewed-by: Derrick Brashear <shadow@dementix.org>
src/afs/LINUX/osi_vnodeops.c
src/afs/LINUX24/osi_vnodeops.c