2014-07-20 07:32:38

by Vasily Averin

[permalink] [raw]
Subject: [patch v2] fs: umount on symlinlk leaks mnt count

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 <[email protected]>


Attachments:
diff-umount-symlink-ms-2 (372.00 B)

2014-07-20 10:48:06

by Richard Weinberger

[permalink] [raw]
Subject: Re: [patch v2] fs: umount on symlinlk leaks mnt count

On Sun, Jul 20, 2014 at 9:32 AM, Vasily Averin <[email protected]> wrote:
> 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 <[email protected]>

Sounds reasonable to me.
Can you please send the patch inline and not as attachment?

--
Thanks,
//richard