Changeset View
Changeset View
Standalone View
Standalone View
head/sys/kern/vfs_subr.c
Show First 20 Lines • Show All 1,740 Lines • ▼ Show 20 Lines | flushbuflist(struct bufv *bufv, int flags, struct bufobj *bo, int slpflag, | ||||
ASSERT_BO_WLOCKED(bo); | ASSERT_BO_WLOCKED(bo); | ||||
retval = 0; | retval = 0; | ||||
TAILQ_FOREACH_SAFE(bp, &bufv->bv_hd, b_bobufs, nbp) { | TAILQ_FOREACH_SAFE(bp, &bufv->bv_hd, b_bobufs, nbp) { | ||||
if (((flags & V_NORMAL) && (bp->b_xflags & BX_ALTDATA)) || | if (((flags & V_NORMAL) && (bp->b_xflags & BX_ALTDATA)) || | ||||
((flags & V_ALT) && (bp->b_xflags & BX_ALTDATA) == 0)) { | ((flags & V_ALT) && (bp->b_xflags & BX_ALTDATA) == 0)) { | ||||
continue; | continue; | ||||
} | } | ||||
lblkno = 0; | |||||
xflags = 0; | |||||
if (nbp != NULL) { | if (nbp != NULL) { | ||||
lblkno = nbp->b_lblkno; | lblkno = nbp->b_lblkno; | ||||
xflags = nbp->b_xflags & (BX_VNDIRTY | BX_VNCLEAN); | xflags = nbp->b_xflags & (BX_VNDIRTY | BX_VNCLEAN); | ||||
} | } | ||||
retval = EAGAIN; | retval = EAGAIN; | ||||
error = BUF_TIMELOCK(bp, | error = BUF_TIMELOCK(bp, | ||||
LK_EXCLUSIVE | LK_SLEEPFAIL | LK_INTERLOCK, BO_LOCKPTR(bo), | LK_EXCLUSIVE | LK_SLEEPFAIL | LK_INTERLOCK, BO_LOCKPTR(bo), | ||||
"flushbuf", slpflag, slptimeo); | "flushbuf", slpflag, slptimeo); | ||||
Show All 18 Lines | if (((bp->b_flags & (B_DELWRI | B_INVAL)) == B_DELWRI) && | ||||
BO_LOCK(bo); | BO_LOCK(bo); | ||||
return (EAGAIN); /* XXX: why not loop ? */ | return (EAGAIN); /* XXX: why not loop ? */ | ||||
} | } | ||||
bremfree(bp); | bremfree(bp); | ||||
bp->b_flags |= (B_INVAL | B_RELBUF); | bp->b_flags |= (B_INVAL | B_RELBUF); | ||||
bp->b_flags &= ~B_ASYNC; | bp->b_flags &= ~B_ASYNC; | ||||
brelse(bp); | brelse(bp); | ||||
BO_LOCK(bo); | BO_LOCK(bo); | ||||
if (nbp == NULL) | |||||
break; | |||||
nbp = gbincore(bo, lblkno); | nbp = gbincore(bo, lblkno); | ||||
if (nbp == NULL || (nbp->b_xflags & (BX_VNDIRTY | BX_VNCLEAN)) | if (nbp == NULL || (nbp->b_xflags & (BX_VNDIRTY | BX_VNCLEAN)) | ||||
!= xflags) | != xflags) | ||||
break; /* nbp invalid */ | break; /* nbp invalid */ | ||||
} | } | ||||
return (retval); | return (retval); | ||||
} | } | ||||
▲ Show 20 Lines • Show All 3,772 Lines • Show Last 20 Lines |