|
̾??
????
???????θƤӽФ??ϥե??????????Ƥα??줿?Хåե????Ǥ??Ф??ޤ??? sync(2) ?????? fsync(2) ?????ƥॳ?????????????뤿???˻??Ѥ????ޤ??? ?????ϰʲ????̤??Ǥ???
???? waitfor ??
???å??ե??????ϥ????ȥ????˥??å????????٤??Ǥ??? ???????ƤӽФ????????????????ˤ? 0 ???֤??졢 ?????Ǥʤ??????ˤ?Ŭ?ڤʥ??顼?????ɤ??֤????ޤ??? ??????????int
vop_fsync(struct vnode *vp, struct ucred *cred, int waitfor, struct thread *td)
{
struct buf *bp;
struct buf *nbp;
struct timeval tv;
int s;
loop:
s = splbio();
for (bp = vp->v_dirtyblkhd.lh_first; bp; bp = nbp) {
nbp = bp->b_vnbufs.le_next;
/*
* ???˽??????ΥХåե???̵?뤷?ޤ???
*/
if (bp->b_flags & B_BUSY)
continue;
/*
* ?Хåե????????Ƥ??뤫??ǧ???ޤ???
*/
if ((bp->b_flags & B_DELWRI) == 0)
panic("vop_fsync: not dirty");
vfs_bio_awrite(bp);
splx(s);
goto loop;
}
splx(s);
if (waitfor == MNT_WAIT) {
s = splbio();
while (vp->v_numoutput) {
vp->v_flag |= VBWAIT;
tsleep((caddr_t)&vp->v_numoutput, PRIBIO + 1, "vopfsn");
}
splx(s);
#ifdef DIAGNOSTIC
if (vp->v_dirtyblkhd.lh_first) {
vprint("vop_fsync: dirty", vp);
goto loop;
}
#endif
}
/*
* ?ǥ????????? vnode ???Ф??ޤ???
*/
tv = time;
return VOP_UPDATE(vp, &tv, &tv, waitfor == MNT_WAIT);
}
???顼
??Ϣ???????????Υޥ˥奢???ڡ????? Doug Rabson ???ޤ?????
|