NAMEI(9) FreeBSD カーネル開発者マニュアル NAMEI(9)
名称
namei, NDINIT, NDFREE − パス名の変換および検索操作 |
書式
#include <sys/param.h> int |
namei(struct nameidata *ndp); void |
NDINIT(struct nameidata *ndp, u_long op, u_long flags,enum uio_seg segflg, const char *namep, struct thread *td); void
NDFREE(struct nameidata *ndp, const uint flags); 解説 |
namei の仕組みはクライアントによるパス名の変換および検索の操作を可能にし ます。 namei 関数は対象の vnode のための参照カウントをインクリメントしま す。その参照カウントは、 LOCKLEAF フラグが指定されたかどうかに依存して、 vrele(9) または vput(9) のどちらかを使用して、その vnode の使用後にデクリ メントされなければなりません。 NDINIT() 関数は namei の要素を初期化するために使用されます。これは以下の 引数を取ります。 |
ndp
初期化されるべき struct nameidata 構造体です。 op flags segflg namep td NAMEI 操作フラグ |
namei() は操作がどのような影響を及ぼすかという、以下の ‘‘操作フラグ’’ の セットを取ります。 |
LOCKLEAF
戻るときに vnode をロックします。これはその vnode の完全な ロックで、ロックを解放するためには VOP_UNLOCK(9) を使用するべ きです。 (または vrele(9) が後に続く VOP_UNLOCK(9) の呼び出し を一緒に行うことと等価である vput(9) を使用するべきです。) LOCKPARENT WANTPARENT NOCACHE FOLLOW NOOBJ NOFOLLOW SAVENAME SAVESTART 割当てられた要素 |
nameidata 構造体は以下のフィールドで構成されます。 |
ni_startdir
通常の場合、これは現在のディレクトリまたはルートディレク トリのどちらかです。渡された名前が ‘/’ で始まっておら ず、絶対パスのシンボリックリンクを通り抜けていない場合に は現在のディレクトリで、そうでない場合にはルートです。 この場合、 lookup() によってのみ使用され、 namei() への 呼出しの後で利用可能だとみなされるべきではありません。 SAVESTART が設定されている場合には、追加の vref(9) を伴 なった ni_dvp と同様に設定されます。 ni_startdir の解放 から NDFREE() をブロックするために、 NDF_NO_STARTDIR_RELE を設定することが可能です。 ni_dvp ni_vp NDF_NO_VP_RELE, NDF_NO_VP_PUT または NDF_NO_VP_UNLOCK に よって、(明らかな効果を伴って) NDFREE() 内の ni_vp の解 放を抑制することが可能です。 ni_cnd.cn_pnbuf パス名のバッファ ni_cnd.cn_pnbuf によって使用されている リソースのみを解放するために、 NDF_ONLY_PNBUF フラグを NDFREE() 関数に渡すことが可能です。パス名のバッファをそ のままで保持するために、 NDF_NO_FREE_PNBUF フラグを NDFREE() 関数に渡すことが可能です。 関連ファイル |
src/sys/kern/vfs_lookup.c
関連項目 |
作者
このマニュアルページは Eivind Eklund 〈eivind@FreeBSD.org〉 によって書か れ、その後で Hiten M. Pandya 〈hmp@FreeBSD.org〉 が大幅に修正しました。 |
バグ
LOCKPARENT フラグは常に親の vnode がロックされる結果になるとは限りませ ん。 LOCKPARENT が使用される時には、複雑化する結果となります。 LOCKPARENT および LOCKLEAF の両方が使用される場合のこの問題の解決のために、再帰的 ロックに頼ることが必要になります。 FreeBSD 10.0 May 27, 2003 FreeBSD 10.0 |