All of lore.kernel.org
 help / color / mirror / Atom feed
From: Vasily Averin <vvs@parallels.com>
To: Alexander Viro <viro@zeniv.linux.org.uk>,
	linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: [patch v2] fs: umount on symlinlk leaks mnt count
Date: Sun, 20 Jul 2014 11:32:27 +0400	[thread overview]
Message-ID: <53CB708B.7010508@parallels.com> (raw)

[-- Attachment #1: Type: text/plain, Size: 563 bytes --]

v2: mntget(path->mnt) should not be called if mountpoint_last() returns 1.

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>


[-- Attachment #2: diff-umount-symlink-ms-2 --]
[-- Type: text/plain, Size: 372 bytes --]

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:

             reply	other threads:[~2014-07-20  7:32 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-07-20  7:32 Vasily Averin [this message]
2014-07-20 10:48 ` [patch v2] fs: umount on symlinlk leaks mnt count Richard Weinberger
     [not found]   ` <cover.1405859651.git.vvs@openvz.org>
2014-07-20 12:38     ` [PATCH v3] fs: umount on symlink " Vasily Averin
2014-07-21  8:30     ` [PATCH v4] " Vasily Averin
2014-07-21 12:10       ` Jeff Layton
2014-07-23  6:06       ` Ian Kent
2014-07-24  5:59         ` Vasily Averin

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=53CB708B.7010508@parallels.com \
    --to=vvs@parallels.com \
    --cc=linux-fsdevel@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=viro@zeniv.linux.org.uk \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.