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:
parent
7d5b6ed91d
commit
8549b4b9fe
@ -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);
|
||||
|
Loading…
x
Reference in New Issue
Block a user