Close a race window for getnewbuf() between shared lock holders of the vnode.

Reviewed by:	Mike Smith
This commit is contained in:
Luoqi Chen 1998-08-28 20:07:13 +00:00
parent fd08501ea2
commit ddae3cb9a0

View File

@ -11,7 +11,7 @@
* 2. Absolutely no warranty of function or purpose is made by the author
* John S. Dyson.
*
* $Id: vfs_bio.c,v 1.171 1998/08/24 17:47:25 phk Exp $
* $Id: vfs_bio.c,v 1.172 1998/08/25 14:41:42 phk Exp $
*/
/*
@ -1518,7 +1518,7 @@ getblk(struct vnode * vp, daddr_t blkno, int size, int slpflag, int slptimeo)
* Normally the vnode is locked so this isn't a problem.
* VBLK type I/O requests, however, don't lock the vnode.
*/
if (!VOP_ISLOCKED(vp) && gbincore(vp, blkno)) {
if (VOP_ISLOCKED(vp) != LK_EXCLUSIVE && gbincore(vp, blkno)) {
bp->b_flags |= B_INVAL;
brelse(bp);
goto loop;