VFSCONF(9) | FreeBSD Kernel Developer's Manual | VFSCONF(9) |
名称
vfsconf — vfs 設定情報書式
#include < sys/param.h>#include < sys/mount.h>
int
vfs_register( struct vfsconf *vfc);
int
vfs_unregister( struct vfsconf *vfc);
int
vfs_modevent( module_t mod, int type, void *data);
解説
カーネルに知られている各ファイルシステムタイプには、そのファイルシステムタイプの新しいマウントを作成するために必要とされる情報を含む vfsconf 構造体があります。
struct vfsconf { struct vfsops *vfc_vfsops; /* ファイルシステム操作ベクタ */ char vfc_name[MFSNAMELEN]; /* ファイルシステムタイプ名 */ int vfc_typenum; /* 歴史的なファイルシステムタイプ 番号 */ int vfc_refcount; /* このタイプのマウントされた数 */ int vfc_flags; /* 永久フラグ */ struct vfsconf *vfc_next; /* リストの次 */ };
新しいファイルシステムがマウントされるとき、 mount(2) は、その名前によって vfsconf 構造体の検索を行い、それがまだ登録されていないなら、そのカーネルモジュールのロードを試みます。新しいマウントポイントのためのファイルシステム操作は vfc_vfsops から取られ、 mount 構造体の mnt_vfc は、ファイルシステムタイプのために vfsconf 構造体で直接指します。ファイルシステムタイプ番号は vfs_register() で割り当てられた vfc_typenum から取られ、マウントフラグは vfc_flags のマスクから取られます。与えられたタイプのファイルシステムがマウントされるたびに vfc_refcount は、増加されます。
vfs_register() は、新しい vfsconf 構造体を取り、それを既存のファイルシステムのリストに追加します。タイプがまだ登録されていないなら、それは、ファイルシステム操作ベクタで vfs_init() 関数を呼び出すことによって、初期化されます。 vfs_register() は、新たに割り当てられたタイプ番号と同じとなるように、このファイルシステムタイプのための oid のどんな sysctl ノードも更新します。訳注: oid の意味不明。タイポか。
vfs_unregister() は、現在、マウントされなかったインスタンスがあれば、登録されたファイルシステムタイプのリストから vfc をアンリンクします。ファイルシステム初期化ベクトルの vfs_uninit() 関数が定義されるなら、それは、呼び出されます。
vfs_modevent() は、ファイルシステムカーネルモジュールのロードとアンロードの操作のために VFS_SET() によって登録されます。 MOD_LOAD の場合には、 vfs_register() が呼び出されます。 MOD_UNLOAD の場合には、 vfs_unregister() が呼び出されます。
戻り値
vfs_register() は、成功すれば、0 を返し、そうでなければファイルシステムタイプが既に登録されていることを示す EEXIST が返されます。vfs_unregister() は、成功すれば、0 を返します。 vfsconf エントリが vfc に一致する名前を見つけることができないなら、 EINVAL が返されます。ファイルシステムタイプのマウントされたインスタンスの参照カウントが 0 でないなら、 EBUSY が返されます。 vfs_uninit() が呼び出されるなら、それが返すどんなエラーも vfs_unregister() によって返されます。
vfs_modevent() は、いずれにせよ vfs_register() または vfs_unregister() への呼び出しの結果を返します。
作者
このマニュアルページは、 <davidc@acns.ab.ca>によって書かれました。June 16, 2013 | FreeBSD |