Konstantin Belousov 714b7df502 Provide simple mutual exclusion between mount point update and unmount.
Currently mount update keeps vfs_busy(9) reference on the mount point
during MNT_UPDATE VFS_MOUNT() vfsops call.  This already provides the
exclusion, but is problematic for filesystems which need to perform
namei(9) during VFS_MOUNT(MNT_UPDATE) operations, e.g. to refresh
mnt_from path, because namei(9) must not be called while the
vfs_busy(9) reference is owned.

Check for MNT_UPDATE flag before setting MNTK_UNMOUNT, and for
MNTK_UNMOUNT before entering innards of vfs_domount_update(), failing
syscalls with EBUSY if conflict is detected.  Keep vfs_busy(9)
reference around VFS_MOUNT(MNT_UPDATE) calls still to not change VFS
KPI.

In the update path in ffs_mount(), drop vfs_busy() reference around
namei(), which is now safe due to unmount never executing in parallel
with VFS_MOUNT(MNT_UPDATE), and which avoids the deadlock.

Reported and tested by:	pho
Sponsored by:	The FreeBSD Foundation
MFC after:	2 weeks
2016-11-13 21:49:51 +00:00
..
2016-10-04 15:23:03 +00:00
2016-10-04 17:57:30 +00:00
2016-11-08 23:59:41 +00:00
2016-11-08 23:59:41 +00:00
2016-09-18 07:37:00 +00:00
2016-07-27 11:40:06 +00:00
2016-11-08 23:59:41 +00:00
2016-10-11 17:00:29 +00:00
2016-10-24 16:40:27 +00:00
2016-07-26 17:23:49 +00:00
2016-04-29 22:15:33 +00:00
2016-11-08 23:59:41 +00:00
2016-04-14 17:07:26 +00:00
2016-10-21 18:27:30 +00:00
2016-08-17 10:14:22 +00:00
2016-11-08 10:10:55 +00:00