42 lines
1.1 KiB
Diff
42 lines
1.1 KiB
Diff
Bugzilla: 1122482
|
|
Upstream-status: Sent for 3.16
|
|
From: Vasily Averin <vvs@openvz.org>
|
|
Subject: [PATCH v4] fs: umount on symlink leaks mnt count
|
|
Currently umount on symlink blocks following umount:
|
|
|
|
/vz is separate mount
|
|
|
|
# ls /vz/ -al | grep test
|
|
drwxr-xr-x. 2 root root 4096 Jul 19 01:14 testdir
|
|
lrwxrwxrwx. 1 root root 11 Jul 19 01:16 testlink -> /vz/testdir
|
|
# umount -l /vz/testlink
|
|
umount: /vz/testlink: not mounted (expected)
|
|
# lsof /vz
|
|
# umount /vz
|
|
umount: /vz: device is busy. (unexpected)
|
|
|
|
In this case mountpoint_last() gets an extra refcount on path->mnt
|
|
|
|
Signed-off-by: Vasily Averin <vvs@openvz.org>
|
|
---
|
|
fs/namei.c | 3 ++-
|
|
1 files changed, 2 insertions(+), 1 deletions(-)
|
|
diff --git a/fs/namei.c b/fs/namei.c
|
|
index 985c6f3..9eb787e 100644
|
|
--- a/fs/namei.c
|
|
+++ b/fs/namei.c
|
|
@@ -2256,9 +2256,10 @@ done:
|
|
goto out;
|
|
}
|
|
path->dentry = dentry;
|
|
- path->mnt = mntget(nd->path.mnt);
|
|
+ path->mnt = nd->path.mnt;
|
|
if (should_follow_link(dentry, nd->flags & LOOKUP_FOLLOW))
|
|
return 1;
|
|
+ mntget(path->mnt);
|
|
follow_mount(path);
|
|
error = 0;
|
|
out:
|
|
--
|
|
1.7.5.4
|