tail head cat sleep
QR code linking to this page

manページ  — VOP_FSYNC

名称

VOP_FSYNC – ファイルシステムバッファのファイルへの吐き出し

内容

書式

#include <sys/param.h>
#include <sys/vnode.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 ファイルシステムの syncer によって書込まれていないデータを出力します。
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; } 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]
  クォータを超過しました。

関連項目

vnode(9)

作者

このマニュアルページは Doug Rabson が書きました。

VOP_FSYNC (9) July 24, 1996

tail head cat sleep
QR code linking to this page


このマニュアルページサービスについてのご意見は Ben Bullock にお知らせください。 Privacy policy.

“ If it wasn't for C, we'd be using BASI, PASAL and OBOL ”