Date: Sat, 3 Sep 2005 00:21:56 +0000 (UTC) From: Don Lewis <truckman@FreeBSD.org> To: src-committers@FreeBSD.org, cvs-src@FreeBSD.org, cvs-all@FreeBSD.org Subject: cvs commit: src/sys/kern vfs_subr.c Message-ID: <200509030021.j830LuEJ099393@repoman.freebsd.org>
next in thread | raw e-mail | index | archive | help
truckman 2005-09-03 00:21:56 UTC FreeBSD src repository Modified files: (Branch: RELENG_6) sys/kern vfs_subr.c Log: MFC vfs_subr.c 1.636 and 1.642 vfs_subr.c 1.642 fixes a small race condition in vlrureclaim() and depends on 1.636. Modified files: sys/kern vfs_subr.c Log: - Allow vnlru to drop giant if the filesystem does not require it. The vnlru proc is extremely inefficient, potentially iteration over tens of thousands of vnodes without blocking. Droping Giant allows other threads to preempt us although we should revisit the algorithm to fix the runtime problems especially since this may hold up all vnode allocations. - Remove the LK_NOWAIT from the VOP_LOCK in vlrureclaim. This provides a natural blocking point to help alleviate the situation described above although it may not technically be desirable. - yield after we make a pass on all mount points to prevent us from blocking other threads which require Giant. MFC after: 2 weeks Revision Changes Path 1.636 +11 -2 src/sys/kern/vfs_subr.c Modified files: sys/kern vfs_subr.c Log: Back out the removal of LK_NOWAIT from the VOP_LOCK() call in vlrureclaim() in vfs_subr.c 1.636 because waiting for the vnode lock aggravates an existing race condition. It is also undesirable according to the commit log for 1.631. Fix the tiny race condition that remains by rechecking the vnode state after grabbing the vnode lock and grabbing the vnode interlock. Fix the problem of other threads being starved (which 1.636 attempted to fix by removing LK_NOWAIT) by calling uio_yield() periodically in vlrureclaim(). This should be more deterministic than hoping that VOP_LOCK() without LK_NOWAIT will block, which may not happen in this loop. Reviewed by: kan MFC after: 5 days Revision Changes Path 1.642 +37 -7 src/sys/kern/vfs_subr.c Approved by: re (scottl) Revision Changes Path 1.635.2.4 +46 -7 src/sys/kern/vfs_subr.c
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200509030021.j830LuEJ099393>