#include #include #include /* super blocks table */ struct super_block sblocks[NRSUPER]; void mount_root(void) { int ret; struct buffer *b; struct super_block *s; b = buffer_get_block(1, 1); if(!b) { printk("[fs] Failed to read super block\n"); return; } s = b->b_data; if(s->s_magic != SUPER_MAGIC) { printk("[fs] Invalid magic number in super block!\n"); return; } printk("[fs] Found valid super-block for /\n"); printk(" 0x%01x inodes\n", s->s_ninodes); printk(" 0x%01x zones\n", s->s_nzones); printk(" 0x%01x inode block bitmaps\n", s->s_imap_blocks); printk(" 0x%01x zone block bitmaps\n", s->s_zmap_blocks); printk(" First data zone: 0x%01x\n", s->s_firstdatazone); printk(" Log zone size: 0x%01x\n", s->s_log_zone_size); printk(" Max file size: 0x%01x\n", s->s_max_size); /* copy the super block into the table */ memcpy(sblocks, s, ((unsigned) &s->s_imap - (unsigned) s)); }