次のページ 前のページ 目次へ

6. 初期化とクリーンアップ

起動時および停止時あるいは Venus の故障時に Coda FS ドライバ用に望まれる 機能を、簡潔にこのセクションで述べます。説明を始める前に、Coda FS ドライ バが次のデータを管理していることを再確認しておきましょう。

  1. メッセージキュー
  2. cnode
  3. ネームキャッシュエントリ
ネームキャッシュエントリは完全にドライバが私有するので、それらは簡単に操 作できます。一般にメッセージキューには明確に初期化および後処理のルーチン があるでしょう。cnode ははるかに扱いづらいものです。Coda ファイルシステ ム中にユーザプロセスから参照されている回数を保持しているので、cnode をク リーンアップするのは困難かもしれません。

次のものから要求が来る可能性があります -

  1. メッセージサブシステム
  2. VFS 層
  3. pioctl インターフェース
現在、 pioctl は VFS を介して Coda に渡されるので、これらを同様に扱 うことができます。

6.1 必須条件

次の必須条件に対応するべきです -

  1. メッセージキューは open および close ルーチンを持ってい るはずです。Unix 上のキャラクタデバイスのオープンはそういったルーチンで す。
  2. オープンでネームキャッシュは空の状態に初期化すべきです。
  3. メッセージキューをオープンする前は、VFS 操作はすべて失敗するでしょ う。幸運にも、オープンする前は Coda ファイルシステムのマウントが成功しな いので、これにより確認することができます。
  4. キューのクローズの後は、VFS 操作は成功しません。ここで気を付けな ければならないことは、少数の操作 (lookup, read/write, readdir) は upcall なしで成功してしまうことです。これらは明示的に阻止しなければなりません。
  5. クローズに際してネームキャッシュはフラッシュされ無効になるものと します。
  6. cnode に保持されたすべてのメモリは upcall に依存せずにすべてを解 放することができます。
  7. ファイルシステムのアンマウントは upcall に依存せずに行うことがで きます。
  8. Venus が rootfid もしくは rootfid の属性を得られない場 合、コーダファイルシステムのマウントは優雅に失敗するべきです。マウントを 試みる前に、これらのオブジェクトを先読みするために、Venus が lattr を実 行すると良いでしょう。

注記 特に NetBSD で、さらに Linux も上記の必須条件を完全に実装して はいません。円滑な操作のために、これを改善していく必要があります。


次のページ 前のページ 目次へ