![]() |
![]()
| ![]() |
![]()
̾??
????
???????θƤӽФ??ϥե??????????Ƥα??줿?Хåե????Ǥ??Ф??ޤ??? 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 ???ޤ?????
|