8.1-STABLE: problem with unmounting ZFS snapshots

Andriy Gapon avg at freebsd.org
Sat Nov 13 11:26:48 UTC 2010

on 13/11/2010 13:21 Kostik Belousov said the following:
> On Sat, Nov 13, 2010 at 01:09:55PM +0200, Andriy Gapon wrote:
>> on 13/11/2010 13:06 Martin Matuska said the following:
>>> No, this is not good for us. Solaris does not allow "mounting" of
>>> snapshots on any vnode, like we do. Solaris has them only in
>>> .zfs/snapshots. This allows us to have read-only mounts without even
>>> mounting the parent zfs.
>>> Before v15 we have been happy with that code and had no issues :-)
>>> I have a very simple testcase where just fixing the VFS_RELE breaks our
>>> forced unmount. Let's say we use the correct VFS_RELE in zfs_vfsops.c:
>>> VFS_RELE(vfsp->mnt_vnodecovered->v_vfsp);
>>> Now let's say you have a mounted filesystem (e.g. md) under /mnt:
>>> /dev/md5 on /mnt (ufs, local)
>>> # mkdir /mnt/test
>>> # mount -t zfs tank at t2 /mnt/test
>>> # umount -f /mnt
>>> Now you will hang because the second VFS_HOLD.
>> Hang here would be bad, I agree.
>> But I think that the umount shouldn't succeed either, in this case.
> Normal unmount indeed shall not succeed in this case, because mount
> adds a reference to the covered vnode. But forced unmount should be
> allowed to proceed.
> After unmount, you can use fsid to unmount the lower mount point.

Ah, I see now, thank you for the explanation.

Andriy Gapon

More information about the freebsd-stable mailing list