VOP_FSYNC(9) FreeBSD カーネル開発者マニュアル VOP_FSYNC(9)
名称
VOP_FSYNC − ファイルシステムバッファのファイルへの吐き出し |
書式
#include <sys/param.h> int |
VOP_FSYNC(struct vnode *vp, struct ucred *cred, int waitfor, struct thread *td); |
解説 |
この呼び出しはファイルの全ての汚れたバッファを吐き出します。 sync(2) およ び fsync(2) システムコールを実装するために使用されます。 引数は以下の通りです。 |
vp
ファイルの vnode。 cred waitfor MNT_WAIT MNT_NOWAIT MNT_LAZY td 引数 waitfor は MNT_WAIT または MNT_NOWAIT のどちらかで、関数が戻る前に書 き込みの終了を待つべきかどうかを指定します。 ロック |
ファイルはエントリ時にロックされるべきです。 |
戻り値
呼び出しが成功した場合には 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; |
} 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 /* |
エラー
[ENOSPC]
ファイルシステムが一杯です。 [EDQUOT] 関連項目 |
作者
このマニュアルページは Doug Rabson が書きました。 FreeBSD 10.0 July 24, 1996 FreeBSD 10.0 |