summaryrefslogtreecommitdiff
path: root/fs/pnode.h
diff options
context:
space:
mode:
authorEric W. Biederman <ebiederm@xmission.com>2014-12-23 21:37:03 -0600
committerEric W. Biederman <ebiederm@xmission.com>2015-04-09 11:39:55 -0500
commitce07d891a0891d3c0d0c2d73d577490486b809e1 (patch)
treeb27cd472257302edfd6689e98b9991fa7d648ae0 /fs/pnode.h
parent820f9f147dcce2602eefd9b575bbbd9ea14f0953 (diff)
downloadlwn-ce07d891a0891d3c0d0c2d73d577490486b809e1.tar.gz
lwn-ce07d891a0891d3c0d0c2d73d577490486b809e1.zip
mnt: Honor MNT_LOCKED when detaching mounts
Modify umount(MNT_DETACH) to keep mounts in the hash table that are locked to their parent mounts, when the parent is lazily unmounted. In mntput_no_expire detach the children from the hash table, depending on mnt_pin_kill in cleanup_mnt to decrement the mnt_count of the children. In __detach_mounts if there are any mounts that have been unmounted but still are on the list of mounts of a mountpoint, remove their children from the mount hash table and those children to the unmounted list so they won't linger potentially indefinitely waiting for their final mntput, now that the mounts serve no purpose. Cc: stable@vger.kernel.org Signed-off-by: "Eric W. Biederman" <ebiederm@xmission.com>
Diffstat (limited to 'fs/pnode.h')
-rw-r--r--fs/pnode.h2
1 files changed, 2 insertions, 0 deletions
diff --git a/fs/pnode.h b/fs/pnode.h
index 0fcdbe7ca648..7114ce6e6b9e 100644
--- a/fs/pnode.h
+++ b/fs/pnode.h
@@ -20,6 +20,8 @@
#define SET_MNT_MARK(m) ((m)->mnt.mnt_flags |= MNT_MARKED)
#define CLEAR_MNT_MARK(m) ((m)->mnt.mnt_flags &= ~MNT_MARKED)
#define IS_MNT_LOCKED(m) ((m)->mnt.mnt_flags & MNT_LOCKED)
+#define IS_MNT_LOCKED_AND_LAZY(m) \
+ (((m)->mnt.mnt_flags & (MNT_LOCKED|MNT_SYNC_UMOUNT)) == MNT_LOCKED)
#define CL_EXPIRE 0x01
#define CL_SLAVE 0x02