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() 手続きを確認した方が良さげ。
しかし
掘り進むうちに大元のテーマが忘却の彼方に去ってしまう可能性が大きいな。体力的に微妙なんですが、追記があるのかどうなのか。