VINVALBUF(9) | FreeBSD Kernel Developer's Manual | VINVALBUF(9) |
名称
vinvalbuf — vnode に関連しているすべてのバッファをフラッシュして無効にする書式
#include < sys/param.h>#include < sys/vnode.h>
int
vinvalbuf( struct vnode *vp, int flags, struct ucred *cred, int slpflag, int slptimeo);
解説
vinvalbuf() 関数は、与えられた vnode に関連しているすべてのバッファを無効にします。これはクリンリストとダーティリスト上のバッファを含んでいます。 V_SAVE フラグが指定されるなら、ダーティリスト上のバッファは解放される前に、同期されます。 vnode に関連している VM Object があれば、それは取り除かれます。その引数は次の通りです:
- vp
- バッファが無効にされる vnode へのポインタ。
- flags
- 唯一サポートされるフラグは V_SAVE で、それはダーティバッファがディスクで同期されるべきであることを示します。
- cred
- V_SAVE が設定されるなら VOP_FSYNC(9) バッファに使用されるユーザ資格証明。
- slpflag
- 関数における任意のスリープの優先順序に使用される slp フラグ。
- slptimeo
- 関数における任意のスリープのためのタイムアウト。
ロック
vnode は呼び出しの前にロックされると仮定され、返り時にロックされたままで残っています。Giant は、呼び出しの前に保持されなければならなくて、返り時にロックされたままで残っています。
戻り値
成功すれば 0 値が返されます。疑似コード
vn_lock(devvp, LK_EXCLUSIVE | LK_RETRY); error = vinvalbuf(devvp, V_SAVE, cred, 0, 0); VOP_UNLOCK(devvp, 0); if (error) return (error);
エラー
- [ ENOSPC]
- ファイルシステムが満杯です。 ( V_SAVE で)
- [ EDQUOT]
- ディスククォータが超過した。 ( V_SAVE で)
- [ EWOULDBLOCK]
- スリープ操作はタイムアウト。 ( slptimeo 参照)
- [ ERESTART]
- シグナルは、配信される必要があり、システムコールは再び開始されるべきです。 ( slpflag の PCATCH で)
- [ EINTR]
- システムはシグナルによって割り込まれました。 ( slpflag の PCATCH で)
作者
このマニュアルページは、 <davidc@acns.ab.ca>によって書かれました。October 20, 2008 | FreeBSD |