Date: Tue, 6 Jun 2006 12:22:12 +0300 From: Konstantin Belousov <kostikbel@gmail.com> To: Andrey Simonenko <simon@comsys.ntu-kpi.kiev.ua> Cc: freebsd-hackers@freebsd.org Subject: Re: Question about synchronization (nfssvc, vfs_busy) Message-ID: <20060606092212.GB45380@deviant.kiev.zoral.com.ua> In-Reply-To: <20060606082529.GA767@pm513-1.comsys.ntu-kpi.kiev.ua> References: <20060605110136.GA1348@pm513-1.comsys.ntu-kpi.kiev.ua> <20060605173045.GA45380@deviant.kiev.zoral.com.ua> <20060606082529.GA767@pm513-1.comsys.ntu-kpi.kiev.ua>
next in thread | previous in thread | raw e-mail | index | archive | help
--Bn2rw/3z4jIqBvZU Content-Type: text/plain; charset=us-ascii Content-Disposition: inline Content-Transfer-Encoding: quoted-printable On Tue, Jun 06, 2006 at 11:25:29AM +0300, Andrey Simonenko wrote: > On Mon, Jun 05, 2006 at 08:30:45PM +0300, Konstantin Belousov wrote: > > On Mon, Jun 05, 2006 at 02:01:36PM +0300, Andrey Simonenko wrote: > > > 2. > > >=20 > > > If vfs_busy() is called without LK_NOWAIT flag, then it can sleep > > > if a filesystem is being unmounted. At some point unmount() will > > If vfs_busy() is called without LK_NOWAIT and fs is being unmounted, > > then vfs_busy returns with ENOENT error, isn't it ? > >=20 >=20 > Yes, it returns ENOENT, but before this event vfs_busy() sets MNTK_MWAIT > flag and sleeps on mount point address. When vfs_mount_destroy() sees > MNTK_MWAIT, it wakes up a thread which sleeps in vfs_busy(). Since > vfs_busy() and vfs_mount_destroy() are active only if MNT_MTX(mp) is > acquired, vfs_mount_destroy() continues own execution, deallocating > mount point, so mutex address passed to msleep() in vfs_busy() is not > valid any more. Are you concerned about invocation of vfs_mount_destroy() at line 1224 of vfs_mount.c, in dounmount ?=20 Do you experience problems (panics, etc) caused by this issue ? It seems that this scenario is impossible for some reasons that are external to vfs_busy, because dounmount() aquires exclusive lock on the vnode covered by mount point. As far as I see, all invocations of vfs_busy() without LK_NOWAIT flag are done while holding at least shared lock on that vnode. See, for instance, fchdir() from vfs_syscalls.c. --Bn2rw/3z4jIqBvZU Content-Type: application/pgp-signature Content-Disposition: inline -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.3 (FreeBSD) iD8DBQFEhUlDC3+MBN1Mb4gRAuGbAKCOc65xHM6O8ae7ovh7r+moQJI4cwCgglMg cwK4VUKBGqbIZiabcx2WHVg= =aGaX -----END PGP SIGNATURE----- --Bn2rw/3z4jIqBvZU--
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20060606092212.GB45380>