| 総合手引 | セクション 9 | English | オプション |
#include <sys/param.h>
#include <sys/vnode.h>
引数は以下の通りです。
| vp | |
| ファイルの vnode。 | |
| cred | |
| 呼び出し側の証明。 | |
| waitfor | |
| 入出力の完了を関数が待つべきかどうか。 | |
| MNT_WAIT | 入出力の完了を同期的に待ちます。 |
| MNT_NOWAIT | |
| 全ての入出力を開始しますが、それを待ちません。 | |
| MNT_LAZY | ファイルシステムの syncer によって書込まれていないデータを出力します。 |
| td | |
| 呼び出しているスレッド。 | |
引数 waitfor は MNT_WAIT または MNT_NOWAIT のどちらかで、関数が戻る前に書き込みの終了を待つべきかどうかを指定します。
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);
}
| [ENOSPC] | |
| ファイルシステムが一杯です。 | |
| [EDQUOT] | |
| クォータを超過しました。 | |
| VOP_FSYNC (9) | July 24, 1996 |
| 総合手引 | セクション 9 | English | オプション |
このマニュアルページサービスについてのご意見は Ben Bullock にお知らせください。 Privacy policy.
| “ | The “N” in NFS stands for Not, or Need, or perhaps Nightmare | ” |
| — Harry Spencer | ||