EN JA
VOP_LOCK(9)
VOP_LOCK(9) FreeBSD Kernel Developer's Manual VOP_LOCK(9)

名称

VOP_LOCK, VOP_UNLOCK, VOP_ISLOCKED, vn_lockvnode へのアクセスを連続させる (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)

作者

このマニュアルページは、 Doug Rabson によって書かれました。
February 25, 2008 FreeBSD