昨晩の続き

__iget() 見てたのか。
とりあえず掘らずにざっくり中身をナニ。

	if (atomic_read(&inode->i_count)) {
		atomic_inc(&inode->i_count);
		return;
	}

なブロックは &inode->i_count が非ゼロであれば加算して終了、な意図。で、ゼロだったら以下で加算しといて

	atomic_inc(&inode->i_count);

引数な inode オブジェクトの i_state 属性が I_LOCK でも I_DIRTY でも無ければ inode_in_use なリストに inode オブジェクトを移動。逆に言うと LOCK 乃至 DIRTY だったら、そのステイトを脱する時点で i_count とかを見て_解放_しないような措置を取るんだろうと類推してますが、別途確認必要。
最後のソレが微妙。

	inodes_stat.nr_unused--;

inodes_stat は inode.c にて以下な定義。

struct inodes_stat_t inodes_stat;

この inodes_stat_t は構造体で include/linux/fs.h にて以下な定義。

struct inodes_stat_t {
	int nr_inodes;
	int nr_unused;
	int dummy[5];
};
extern struct inodes_stat_t inodes_stat;

inode_stat_t で grep したら以下な出力。

$ grep inodes_stat *
fs-writeback.c:                 inodes_stat.nr_unused++;
fs-writeback.c:                 (inodes_stat.nr_inodes - inodes_stat.nr_unused) +
inode.c:struct inodes_stat_t inodes_stat;
inode.c:        inodes_stat.nr_unused--;
inode.c:        inodes_stat.nr_inodes -= nr_disposed;
inode.c:        inodes_stat.nr_unused -= count;
inode.c:        inodes_stat.nr_unused -= nr_pruned;
inode.c:        return (inodes_stat.nr_unused / 100) * sysctl_vfs_cache_pressure;
inode.c:                inodes_stat.nr_inodes++;
inode.c:                        inodes_stat.nr_inodes++;
inode.c:                        inodes_stat.nr_inodes++;
inode.c:        inodes_stat.nr_inodes--;
inode.c:                inodes_stat.nr_unused++;
inode.c:                inodes_stat.nr_unused--;
inode.c:        inodes_stat.nr_inodes--;
$

このあたり、明日確認予定ッス。(を
wiki に出力できてないな。