ext3_get_group_desc() 手続き

fs ディレクトリにて以下のコマンドにて確認。

$ find|xargs grep s_desc_per_block_bits
./ext2/super.c: sbi->s_desc_per_block_bits =
./ext4/super.c: sbi->s_desc_per_block_bits = log2(EXT4_DESC_PER_BLOCK(sb));
./ext3/super.c: sbi->s_desc_per_block_bits = ilog2(EXT3_DESC_PER_BLOCK(sb));
$

ext3/super.c を見てみます。
とりあえず ext3/super.c の該当部分にて EXT3_DESC_PER_BLOCK なマクロを検索。include/linux/ext3_fs.h にて以下な定義。

/*
 * Macro-instructions used to manage group descriptors
 */
#ifdef __KERNEL__
# define EXT3_BLOCKS_PER_GROUP(s)	(EXT3_SB(s)->s_blocks_per_group)
# define EXT3_DESC_PER_BLOCK(s)		(EXT3_SB(s)->s_desc_per_block)
# define EXT3_INODES_PER_GROUP(s)	(EXT3_SB(s)->s_inodes_per_group)
# define EXT3_DESC_PER_BLOCK_BITS(s)	(EXT3_SB(s)->s_desc_per_block_bits)
#else
# define EXT3_BLOCKS_PER_GROUP(s)	((s)->s_blocks_per_group)
# define EXT3_DESC_PER_BLOCK(s)		(EXT3_BLOCK_SIZE(s) / sizeof (struct ext3_group_desc))
# define EXT3_INODES_PER_GROUP(s)	((s)->s_inodes_per_group)
#endif

ext3_sb_info 構造体のメンバな Linux 2.6 解読室な記述によれば_ブロック当たりのグループディスクリプタ数計算用シフト数_とある。
プリセットしてる箇所はと言いつつ grep してみると以下。

$ find|xargs grep s_desc_per_block
./ext2/super.c: bg = sbi->s_desc_per_block * nr;
./ext2/super.c: sbi->s_desc_per_block = sb->s_blocksize /
./ext2/super.c: sbi->s_desc_per_block_bits =
./ext4/super.c: bg = sbi->s_desc_per_block * nr;
./ext4/super.c: sbi->s_desc_per_block = blocksize / EXT4_DESC_SIZE(sb);
./ext4/super.c: sbi->s_desc_per_block_bits = log2(EXT4_DESC_PER_BLOCK(sb));
./ext3/super.c: bg = sbi->s_desc_per_block * nr;
./ext3/super.c: sbi->s_desc_per_block = blocksize / sizeof(struct ext3_group_desc);
./ext3/super.c: sbi->s_desc_per_block_bits = ilog2(EXT3_DESC_PER_BLOCK(sb));
$

見たら分かると思いますが fs 配下にて実行。ext3_fill_super() 手続きにて以下。

	sbi->s_desc_per_block = blocksize / sizeof(struct ext3_group_desc);

む。blocksize って何だ。上向き search してみたら以下な記述に hit。

	blocksize = BLOCK_SIZE << le32_to_cpu(es->s_log_block_size);

あるいは先頭部分で以下な記述。

	blocksize = sb_min_blocksize(sb, EXT3_MIN_BLOCK_SIZE);
	if (!blocksize) {
		printk(KERN_ERR "EXT3-fs: unable to set blocksize\n");
		goto out_fail;
	}

ちょっとこれは ext3_fill_super() 手続きを確認した方が良さげ。

しかし

掘り進むうちに大元のテーマが忘却の彼方に去ってしまう可能性が大きいな。体力的に微妙なんですが、追記があるのかどうなのか。