VOP_LOCK(9) | FreeBSD Kernel Developer's Manual | VOP_LOCK(9) |
名称
VOP_LOCK, VOP_UNLOCK, VOP_ISLOCKED, vn_lock — vnode へのアクセスを連続させる (serialize)書式
#include < sys/param.h>#include < sys/lock.h>
#include < sys/vnode.h>
int
VOP_LOCK( struct vnode *vp, int flags);
int
VOP_UNLOCK( struct vnode *vp, int flags);
int
VOP_ISLOCKED( struct vnode *vp);
int
vn_lock( struct vnode *vp, int flags);
解説
これらの呼び出しは、例えば、同じファイルに 2 つの書き込みが同時に起こることを防ぐように、ファイルシステムへのアクセスを連続させるために使用されます。引数は、次の通りです:
- vp
- ロックされるか、またはロックを解除される vnode。
- flags
-
ロック要求のタイプのうちの 1 つは、次の通りです:
- LK_SHARED
- 共有ロック。
- LK_EXCLUSIVE
- 排他的ロック。
- LK_UPGRADE
- 共有から排他的にアップグレード。
- LK_DOWNGRADE
- 排他的から共有にダウングレード。
- LK_RELEASE
- あらゆるタイプのロックを解放します。
- LK_DRAIN
- すべてのロック状態が終了するのウェートし (待ち) ます。
ロックタイプは、これらのロックフラグを論理和 OR することができます:
- LK_NOWAIT
- ロックをウェートするためにスリープ (sleep) しません。
- LK_SLEEPFAIL
- スリープし、次に、失敗を返します。
- LK_CANRECURSE
- 再帰的な排他的ロックを許可します。
- LK_NOWITNESS
- このインスタンスを無視するように witness(4) に指示します。
ロックタイプは、これらの制御フラグを論理和 OR することができます:
- LK_INTERLOCK
- 呼び出し側が単純なロックが既にあるとき、指定します。 ( VOP_LOCK() は、ロックを取得した後に単純なロックを解除します)。
- LK_RETRY
- ロックされるまでリトライ (retry) します。
カーネルコードは、 VOP_LOCK() を直接呼び出すのではなく、vnode をロックするために vn_lock() を使用するべきです。また、 vn_lock() は、引数として指定されるスレッドを必要としませんが、現在のスレッド (curthread) が使用されると仮定します。
戻り値
成功すれば、0 が返され、そうでなければ、エラーが返されます。関連項目
vnode(9)作者
このマニュアルページは、 によって書かれました。February 25, 2008 | FreeBSD |