NetBSD-Bugs archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
Re: PR/38141 CVS commit: src/sys
The following reply was made to PR kern/38141; it has been noted by GNATS.
From: yamt%mwd.biglobe.ne.jp@localhost (YAMAMOTO Takashi)
To: gnats-bugs%NetBSD.org@localhost
Cc: ad%netbsd.org@localhost, kern-bug-people%netbsd.org@localhost,
gnats-admin%netbsd.org@localhost,
netbsd-bugs%netbsd.org@localhost
Subject: Re: PR/38141 CVS commit: src/sys
Date: Sat, 3 May 2008 23:05:16 +0900 (JST)
> Log Message:
> PR kern/38141 lookup/vfs_busy acquire rwlock recursively
>
> Until the code paths are fixed properly, put in place an ugly workaround
> to make it safe to recursively acquire a read lock on a mount.
unfortunately, recursive lock was not necessary to triger
a deadlock. i saw the following while running "build.sh -j128".
(well, the actual deadlock i saw had 10 or more vnodes involved.
the following is a simplified version for explanation.)
LWP1 in vn_open()
1. lock a directory vnode which is VV_ROOT.
LWP2 in lookup()
1. vfs_busy(RW_READER)
2. call VFS_ROOT, which tries to lock the VV_ROOT vnode which
is already locked by LWP1. => block
LWP3 (syncer) in sync_fsync()
1. vfs_trybusy(RW_WRITER) => block
now, LWP1 again:
2. call VOP_CREATE -> getnewvnode -> vfs_busy(RW_READER) => block
YAMAMOTO Takashi
Home |
Main Index |
Thread Index |
Old Index