無料Wikiサービス | デモページ
検索

アクセス数
最近のコメント
kprobe - ななし
ksetの実装 - スーパーコピー
カーネルスレッドとは - ノース
カーネルスレッドとは - nbyst
asmlinkageってなに? - ノース
asmlinkageってなに? - よろしく
はじめ - ノース
はじめ - ノース
はじめ - 楽打連動ユーザー
はじめ - 楽打連動ユーザー
Adsense
広告情報が設定されていません。

bad_inodeとは


なにげなくカーネルソースを眺めていると、bad_inode.cっていうのがあった。なんだろう?と開いてみると、
void make_bad_inode(struct inode *inode)
{
       remove_inode_hash(inode);

       inode->i_mode = S_IFREG;
       inode->i_atime = inode->i_mtime = inode->i_ctime =
               current_fs_time(inode->i_sb);
       inode->i_op = &bad_inode_ops;   
       inode->i_fop = &bad_file_ops;   
}
inodeハッシュテーブルから、該当するinodeのハッシュを削除して、nodeオペレーションにbad_inode_ops、ファイルオペレーションにbad_file_opsをセットしている。bad_inode_ops、bad_file_opsはすべてのメンバー名の関数を、エラーを返すだけの空の関数として定義してある。
static ssize_t bad_file_read(struct file *filp, char __user *buf,
                       size_t size, loff_t *ppos)
{
       return -EIO;
}

static ssize_t bad_file_write(struct file *filp, const char __user *buf,
                       size_t siz, loff_t *ppos)
{
       return -EIO;
}
どんな場合に使うのだろうと、参照元を調べてみると、ext2のケースでは、ext2_new_inode関数のinodeアロケートで、実inodeが取得できなかった時にmake_bad_inodeが呼ばれるようである。

実inodeアロケート失敗でも、メモリーinodeはアロケートさせ(inode番号はlast_ino)、VFSにおいての一連の処理の中でエラー処理させているようである?


最終更新 2010/03/29 20:10:19 - north
(2010/03/29 20:10:19 作成)