次のページ
前のページ
目次へ
起動時および停止時あるいは Venus の故障時に Coda FS ドライバ用に望まれる
機能を、簡潔にこのセクションで述べます。説明を始める前に、Coda FS ドライ
バが次のデータを管理していることを再確認しておきましょう。
-  メッセージキュー
-  cnode
-  ネームキャッシュエントリ
ネームキャッシュエントリは完全にドライバが私有するので、それらは簡単に操
作できます。一般にメッセージキューには明確に初期化および後処理のルーチン
があるでしょう。cnode ははるかに扱いづらいものです。Coda ファイルシステ
ム中にユーザプロセスから参照されている回数を保持しているので、cnode をク
リーンアップするのは困難かもしれません。次のものから要求が来る可能性があります -
-  メッセージサブシステム
-  VFS 層
-  pioctl インターフェース
現在、 pioctl は VFS を介して Coda に渡されるので、これらを同様に扱
うことができます。
次の必須条件に対応するべきです -
-  メッセージキューは openおよびcloseルーチンを持ってい
るはずです。Unix 上のキャラクタデバイスのオープンはそういったルーチンで
す。
-  オープンの前に、メッセージを置くことはできません。
-  オープンは保留のままの古いメッセージをすべて削除します。
-  クローズは upcall を完了できないスリープ中のプロセスすべてに通
知を行うでしょう。
-  クローズはメッセージキューに割当てられたすべてのメモリを解放す
るでしょう。
 
-  オープンでネームキャッシュは空の状態に初期化すべきです。
-  メッセージキューをオープンする前は、VFS 操作はすべて失敗するでしょ
う。幸運にも、オープンする前は Coda ファイルシステムのマウントが成功しな
いので、これにより確認することができます。
-  キューのクローズの後は、VFS 操作は成功しません。ここで気を付けな
ければならないことは、少数の操作 (lookup, read/write, readdir) は upcall
なしで成功してしまうことです。これらは明示的に阻止しなければなりません。
-  クローズに際してネームキャッシュはフラッシュされ無効になるものと
します。
-  cnode に保持されたすべてのメモリは upcall に依存せずにすべてを解
放することができます。
-  ファイルシステムのアンマウントは upcall に依存せずに行うことがで
きます。
-  Venus が rootfidもしくはrootfidの属性を得られない場
合、コーダファイルシステムのマウントは優雅に失敗するべきです。マウントを
試みる前に、これらのオブジェクトを先読みするために、Venus が lattr を実
行すると良いでしょう。
注記  特に NetBSD で、さらに Linux も上記の必須条件を完全に実装して
はいません。円滑な操作のために、これを改善していく必要があります。
次のページ
前のページ
目次へ