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.

The “N” in NFS stands for Not, or Need, or perhaps Nightmare
— Harry Spencer