fast_symlink


Rev.5を表示中。最新版はこちら。

以前からinode_operationでsymlinkとfast_symlinkというものが何が異なるのか不思議に思っていた。lsコマンドの表示について(ディレクトリのサイズ)このあたりのソースを見ていたら思わぬ発見っがあった。

fs/ext3/namei.cのstatic int ext3_symlink (struct inode * dir, struct dentry *dentry, const char * symname)で
if (l > sizeof (EXT3_I(inode)->i_data)) {
	inode->i_op = &ext3_symlink_inode_operations;
	ext3_set_aops(inode);
	err = __page_symlink(inode, symname, l, 1);
	if (err) {
		drop_nlink(inode);
		ext3_mark_inode_dirty(handle, inode);
		iput (inode);
		goto out_stop;
	}
} else {
	inode->i_op = &ext3_fast_symlink_inode_operations;
	memcpy((char*)&EXT3_I(inode)->i_data,symname,l);
	inode->i_size = l-1;
}

ext2/3ファイルのシンボリック名はiノードのあるサイズ以下であれば直接iノードに設定され、そうでないならデータブロックを使用するというのは前知識としてあった。そういうことであった。iノードに収まるシンボリック名の場合_fast_symlinkを、そうでなければsymlinkとなるようだ。


最終更新 2010/01/10 14:54:41 - north
(2010/01/10 02:56:48 作成)


検索

アクセス数
3979815
最近のコメント
・はじめ - bb8
・コアダンプファイル - sakaia
・list_head構造体 - yocto_no_yomikata
・勧告ロックと強制ロック - wataash
・LKMからのファイル出力 - 重松 宏昌
・kprobe - ななし
・ksetの実装 - スーパーコピー
・カーネルスレッドとは - ノース
・カーネルスレッドとは - nbyst
・asmlinkageってなに? - ノース
Adsense
広告情報が設定されていません。