Hi! The problem is following:
FS driver recieves VOP_FSYNC request, then it scan the queue and pick up dirty buffers to bwrite(bp) them. bwrite calls VOP_STRATEGY, FS's strategy routine is trying to VOP_BMAP buf, and fails (suppose it fails), then xxfs_strategy do: bp->b_error = error; bp->b_flags |= B_ERROR; biodone(bp); return(bp); (Looks right, at least IMO) But: biodone will not rel*se(bp), as it is not B_ASYNC, then it returns to bwrite, where it will brelse(bp) after biowait(bp). Then bp will come to brelse with B_ERROR set. in the begining, brelse: ... if ((bp->b_flags & (B_READ | B_ERROR)) == B_ERROR) { bp->b_flags &= ~B_ERROR; bdirty(bp); } ... then buffer returns to dirty queue, and is dirty, all repeates infinite. How this is solved? Sorry if i miss something obvious... Sorry for bad english... Bye To Unsubscribe: send mail to majord...@freebsd.org with "unsubscribe freebsd-current" in the body of the message