G_GEOM(9) | FreeBSD Kernel Developer's Manual | G_GEOM(9) |
名称
g_new_geomf, g_destroy_geom — geom 管理書式
#include < geom/geom.h> struct g_geom *
g_new_geomf( struct g_class *mp, const char *fmt, ...);
void
g_destroy_geom( struct g_geom *gp);
解説
geom (“GEOM”での“geom”と混同しなでください) は GEOM クラスのインスタンスです。例えば: 代表的な i386 FreeBSD システムでは、各ディスクにクラス MBR の 1 つの geom があります。 geom の名前は実際には重要ではありません、それは XML ダンプとデバッグ目的に使用されるだけです。同じ名前がある多くの geom が存在することができます。g_new_geomf() 関数は、クラス mp のインスタンスになる新しい geom を作成します。 geom の名前は引数の残りから printf(3) のような方法で作成されます。
g_destroy_geom() 関数は直ちに与えられた geom を破壊し、すべての関連する保留中 (pending) のイベントをキャンセルします。
g_geom 構造体は、この geom に関連するどんなプロバイダまたはコンシューマを作成する前を除いて (すべてが必要であるというわけではありません)、 geom の作成の後に呼び出し側によって設定されるべきであるフィールドを含んでいます:
- g_start_t * start
- I/O 処理に使用される関数へのポインタ。
- g_spoiled_t * spoiled
- コンシューマスポイリング (仕損じ) に使用される関数へのポインタ。
- g_dumpconf_t * dumpconf
- XML 形式ダンプにおける設定に使用される関数へのポインタ。
- g_access_t * access
- アクセス制御に使用される関数へのポインタ。
- g_orphan_t * orphan
- 親のないコンシューマに関する情報を提供するために使用される関数へのポインタ。
- g_ioctl_t * ioctl
- ioctl 要求の取り扱いに使用される関数へのポインタ。
- void * softc
- プライベート使用のためのフィールド。
制限/条件
この geom のプロバイダを使用しようとしているなら、利用者の geom のフィールド start を設定しなければなりません。利用者の geom でコンシューマを使用する予定があるなら、フィールド orphan と access を設定しなければなりません。
g_new_geomf():
- クラス mp は (GEOM で登録された) 有効なものでなければなりません。
- トポロジロックは保持されなければなりません。
g_destroy_geom():
- geom はどんなプロバイダも保有することができません。
- geom はどんなコンシューマも保有することができません。
- トポロジロックは保持されなければなりません。
戻り値
g_new_geomf() 関数は新しく作成された geom へのポインタを返します。使用例
例の geom を作成します。
static struct geom * g_example_start(struct bio *bp) { [...] } static void g_example_orphan(struct g_consumer *cp) { g_topology_assert(); [...] } static void g_example_spoiled(struct g_consumer *cp) { g_topology_assert(); [...] } static void g_example_access(struct g_provider *pp, int dr, int dw, int de) { [...] } static struct g_geom * create_example_geom(struct g_class *myclass) { struct g_geom *gp; g_topology_lock(); gp = g_new_geomf(myclass, "example_geom"); g_topology_unlock(); gp->start = g_example_start; gp->orphan = g_example_orphan; gp->spoiled = g_example_spoiled; gp->access = g_example_access; gp->softc = NULL; return (gp); } static int destroy_example_geom(struct g_geom *gp) { g_topology_lock(); if (!LIST_EMPTY(&gp->provider) || !LIST_EMPTY(&gp->consumer)) { g_topology_unlock(); return (EBUSY); } g_destroy_geom(gp); g_topology_unlock(); return (0); }
関連項目
geom(4), DECLARE_GEOM_CLASS(9), g_access(9), g_attach(9), g_bio(9), g_consumer(9), g_data(9), g_event(9), g_provider(9), g_provider_by_name(9), g_wither_geom(9)作者
このマニュアルページは、 <pjd@FreeBSD.org>によって書かれました。January 16, 2004 | FreeBSD |