Simplify the loop step in the flushbuflist() and make it independed on

the type stability of the buffers memory.  Instead of memoizing
pointer to the next buffer and validating it, remember the next
logical block number in the bo list and re-lookup.

Reviewed by:	markj
Tested by:	pho
Sponsored by:	The FreeBSD Foundation
This commit is contained in:
Konstantin Belousov 2015-12-16 08:39:51 +00:00
parent 7d5b6ed91d
commit 8549b4b9fe

View File

@ -1652,10 +1652,9 @@ flushbuflist(struct bufv *bufv, int flags, struct bufobj *bo, int slpflag,
bp->b_flags &= ~B_ASYNC;
brelse(bp);
BO_LOCK(bo);
if (nbp != NULL &&
(nbp->b_bufobj != bo ||
nbp->b_lblkno != lblkno ||
(nbp->b_xflags & (BX_VNDIRTY | BX_VNCLEAN)) != xflags))
nbp = gbincore(bo, lblkno);
if (nbp == NULL || (nbp->b_xflags & (BX_VNDIRTY | BX_VNCLEAN))
!= xflags)
break; /* nbp invalid */
}
return (retval);