次のページ
前のページ
目次へ
起動時および停止時あるいは 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 も上記の必須条件を完全に実装して
はいません。円滑な操作のために、これを改善していく必要があります。
次のページ
前のページ
目次へ