typedef unsigned long long u64; struct super_block { unsigned long s_blocksize; struct block_device *s_bdev; }; struct buffer_head { u64 b_blocknr; }; int sb_bread(struct super_block *sb, u64 block) { return __bread(sb->s_bdev, block, sb->s_blocksize); } struct { int (*test) (struct sysv_sb_info *, struct buffer_head *); } flavours[]; int sysv_fill_super(struct super_block *sb) { struct buffer_head *bh = 0; unsigned long blocknr; switch (test(sb, bh)) { case 3: blocknr = bh->b_blocknr >> 1; bh = sb_bread(sb, blocknr); } }