iodone カーネル・サービス

目的

ブロック入出力完了処理を実行します。

構文

#include <sys/types.h>
#include <sys/errno.h>
#include <sys/buf.h>
void iodone ( bp)
struct buf *bp;

パラメーター

項目 説明
入出力が完了したバッファーの ブフ 構造体 のアドレスを指定します。

ストレージ・キーをサポートするプラットフォームでは、渡される BP パラメーターは キー・パブリック または キー・ブロック・デバイス 保護ドメイン内になければなりません。

説明

デバイス・ドライバーは、ブロック入出力要求が完了すると、 Iodone カーネル・サービスを呼び出します。 デバイス・ドライバーは、 Iodone サービスの呼び出し後にバッファー・ヘッダーまたはバッファーを参照したり変更したりしてはなりません。

Iodone サービスは、現在の割り込みレベルに応じて、2 つのアクションのいずれかを実行します。 呼び出し側の個々の Iodone ルーチンを直接呼び出すか、またはバッファーの入出力完了処理を INTIODONE (未定義) 割り込みレベルでオフレベルで実行するようにスケジュールします。 次に、このレベルの割り込みハンドラーは、個々のデバイス・ドライバーの iodone ルーチンを呼び出します。 いずれの場合も、個々の iodone ルーチンは、 b_iodoneバッファー・ヘッダー内の バッファー・ヘッダー・フィールド。 この iodone ルーチンは、装置のストラテジー・ルーチンの呼び出し側によってセットアップされます。

例えば、ファイル入出力システム呼び出しは、バッファー入出力完了処理を実行するルーチンをセットアップします。 ウフィシオ サービスは、未加工の入出力完了処理を実行するルーチンをセットアップします。 同様に、ページャーは、ページ・フォールト完了処理を実行するルーチンをセットアップします。

ヨード・ルーチンのセットアップ

特定の環境下では、デバイス・ドライバーは Iodone ルーチンをセットアップできます。 例えば、 論理ボリューム・デバイス・ドライバー は以下の手順に従うことができます。

  1. 論理ボリュームの要求を受け取ります。
  2. バッファー・ヘッダーを割り振ります。
  3. 論理ボリューム要求を物理ボリューム要求に変換します。
  4. 物理ボリューム要求に関する情報を使用して、割り振られたバッファー・ヘッダーを更新します。 これには、b_iodone個々の iodone ルーチンのアドレスへのバッファー・ヘッダー・フィールド。
  5. 物理ボリューム・デバイス・ドライバー・ストラテジー・ルーチンを呼び出します。

    ここでは、論理ボリューム・ストラテジー・ルーチンの呼び出し側が、論理ボリューム要求が完了したときに開始される iodone ルーチンをセットアップしました。 次に、論理ボリューム・ストラテジー・ルーチンは、物理ボリューム要求が完了したときに呼び出される iodone ルーチンをセットアップします。

この例の重要なポイントは、戦略ルーチンの呼び出し元のみが iodone ルーチンをセットアップでき、それでも、バッファー・ヘッダーに要求をセットアップするときにのみこれを行うことができるということです。

Iodone ルーチンのインターフェースは、 Iodone サービスへのインターフェースと同一です。

実行環境

Iodone カーネル・サービスは、 処理 環境または 割り込み 環境のいずれかから呼び出すことができます。

戻り値

Iodone サービスには戻り値はありません。