Coda FS ドライバは、upcall の回数を抑制するために、lookup
および
access
の結果をキャッシュできます。upcall は、プロセスコンテキスト
スイッチを行う必要があるので、コストがかかります。情報をキャッシュするこ
とに対応して、Venus から FS ドライバにキャッシュされたエントリのフラッシュ
や名前の変更を行わなければならないという通知が行われます。
一般的にカーネルコードは、Venus が管理する ViceFid と共に内部のファイル ハンドル (BSD で vnode, Linux で inode, Windows で FileHandle と呼ばれま す) にリンクした構造体を管理しなければなりません。その理由は、頻繁な双方 向の変換が、upcall を行ったり、その upcall の結果を使用する際必要となる からです。こういったリンクされたオブジェクトは cnode と呼ばれます。
現行のミニキャッシュの実装は以下を記録したキャッシュエントリになっていま す -
Coda FS ドライバにおける lookup
コールは、呼び出し元の名前、ディレ
クトリ、CodaCred を渡し、キャッシュから希望するオブジェクトの cnode を要
求するかもしれません。キャッシュは cnode を返すか、見つからなかったこと
を示すでしょう。Coda FS ドライバは、オブジェクトの修正もしくは削除をした
場合、キャッシュエントリが無効になるように、気を付けなければなりません。
キャッシュエントリがもう有効ではないことを示す情報を得た場合、Venus はカー ネルに downcall を発行するでしょう。downcall は Coda FS ドライバに捕獲さ れ、キャッシュを以下に述べる種類で無効にします。downcall のデータがカー ネルメモリ内に読み出せない場合を除き、Coda FS ドライバはエラーを返しませ ん。
このコールの情報はありません。
引き数 なし
概要 ネームキャッシュ全体をフラッシュします。
詳細 Venus は起動時および終了時にこのコールを発行します。無効なキャッ シュ情報の保持を防ぎます。カーネルのネームキャッシュを動的に切れるオペレー ティングシステムもあります。これが終了した時 downcall は終了します。
引き数
struct cfs_purgeuser_out {/* CFS_PURGEUSER is a venus->kernel call */ struct CodaCred cred; } cfs_purgeuser;
詳細 Cred を持つキャッシュ内のすべてのエントリを削除します。このコー ルは、ユーザ用のトークンの期限が切れるかフラッシュされる時に発行されます。
引き数
struct cfs_zapfile_out { /* CFS_ZAPFILE is a venus->kernel call */ ViceFid CodaFid; } cfs_zapfile;
詳細 ディレクトリの vnode と名前の組みを持つすべてのエントリを削除 します。キャッシュされた vnode の属性が失効となった結果、発行されます。
注記 コールは NetBSD および Mach で正しい名前ではありません。ミニ
キャッシュの zapfile
ルーチンの引き数は異なっています。Linuxは、属
性の失効を正しく実装していません。
引き数
struct cfs_zapdir_out { /* CFS_ZAPDIR is a venus->kernel call */ ViceFid CodaFid; } cfs_zapdir;
詳細 ディレクトリ CodaFid
およびこのディレクトリのすべての子の
エントリを、キャッシュの中から、すべて削除します。Venus がディレクトリの
callback を受け取った時に発行されます。
引き数
struct cfs_zapvnode_out { /* CFS_ZAPVNODE is a venus->kernel call */ struct CodaCred cred; ViceFid VFid; } cfs_zapvnode;
詳細 引き数で渡される cred
および VFid
を持つキャッシュの
中のエントリをすべて削除します。このコールはたぶん発行されることはありま
せん。
概要
引き数
struct cfs_purgefid_out { /* CFS_PURGEFID is a venus->kernel call */ ViceFid CodaFid; } cfs_purgefid;
詳細 ファイルのための属性をフラッシュします。それがディレクトリ (や 変な vnode) なら、ネームキャッシュからのその子を除去し、ネームキャッシュ からファイルを削除します。
概要 名前のコレクションのための Fid を置きかえます。
引き数
struct cfs_replace_out { /* cfs_replace is a venus->kernel call */ ViceFid NewFid; ViceFid OldFid; } cfs_replace;
詳細 このルーチンはネームキャッシュの中の ViceFid を別のものに置き かえます。切断されている間ローカルに割当てられたテンポラリ fid をグロー バル fid に置きかえるための再統合の間、それらの fid の参照カウントが 0 でないときでさえ、Venus に許可を追加します。