- struct reiserfs_super_block super;
- __u64 superblock = REISERFS_SUPERBLOCK_BLOCK;
-
- read_disk_block( INFO->file, superblock, 0, sizeof(super), &super );
-
- DEBUG_F( "Found super->magic %s\n", super.s_magic );
-
- if( strcmp( REISER2FS_SUPER_MAGIC_STRING, super.s_magic ) != 0 &&
- strcmp( REISERFS_SUPER_MAGIC_STRING, super.s_magic ) != 0 )
- {
- /* Try old super block position */
- superblock = REISERFS_OLD_SUPERBLOCK_BLOCK;
- read_disk_block( INFO->file, superblock, 0, sizeof (super), &super );
-
- if ( strcmp( REISER2FS_SUPER_MAGIC_STRING, super.s_magic ) != 0 &&
- strcmp( REISERFS_SUPER_MAGIC_STRING, super.s_magic ) != 0 )
- {
- /* pre journaling super block - untested */
- if ( strcmp( REISERFS_SUPER_MAGIC_STRING,
- (char *) ((__u32) &super + 20 ) ) != 0 )
- return 0;
-
- super.s_blocksize = cpu_to_le16(REISERFS_OLD_BLOCKSIZE);
- super.s_journal_block = 0;
- super.s_version = 0;
- }
- }
-
- DEBUG_F( "ReiserFS superblock data:\n" );
- DEBUG_F( "Block count: %lu\n", le32_to_cpu(super.s_block_count) )
- DEBUG_F( "Free blocks: %lu\n", le32_to_cpu(super.s_free_blocks) );
- DEBUG_F( "Journal block: %lu\n", le32_to_cpu(super.s_journal_block) );
- DEBUG_F( "Journal size (in blocks): %lu\n",
- le32_to_cpu(super.s_orig_journal_size) );
- DEBUG_F( "Root block: %lu\n\n", le32_to_cpu(super.s_root_block) );
-
-
- INFO->version = le16_to_cpu(super.s_version);
- INFO->blocksize = le16_to_cpu(super.s_blocksize);
- INFO->blocksize_shift = log2( INFO->blocksize );
-
- INFO->journal_block = le32_to_cpu(super.s_journal_block);
- INFO->journal_block_count = le32_to_cpu(super.s_orig_journal_size);
-
- INFO->cached_slots = (FSYSREISER_CACHE_SIZE >> INFO->blocksize_shift) - 1;
-
- /* At this point, we've found a valid superblock. If we run into problems
- * mounting the FS, the user should probably know. */
-
- /* A few sanity checks ... */
- if ( INFO->version > REISERFS_MAX_SUPPORTED_VERSION )
- {
- prom_printf( "ReiserFS: Unsupported version field: %u\n",
- INFO->version );
- return 0;
- }
-
- if ( INFO->blocksize < FSYSREISER_MIN_BLOCKSIZE
- || INFO->blocksize > FSYSREISER_MAX_BLOCKSIZE )
- {
- prom_printf( "ReiserFS: Unsupported block size: %u\n",
- INFO->blocksize );
- return 0;
- }
-
- /* Setup the journal.. */
- if ( INFO->journal_block != 0 )
- {
- if ( !is_power_of_two( INFO->journal_block_count ) )
- {
- prom_printf( "ReiserFS: Unsupported journal size, "
- "not a power of 2: %lu\n",
- INFO->journal_block_count );
- return 0;
- }
-
- journal_init();
- /* Read in super block again, maybe it is in the journal */
- block_read( superblock, 0, sizeof (struct reiserfs_super_block),
- (char *) &super );
- }
-
- /* Read in the root block */
- if ( !block_read( le32_to_cpu(super.s_root_block), 0,
- INFO->blocksize, ROOT ) )
- {
- prom_printf( "ReiserFS: Failed to read in root block\n" );
- return 0;
- }
-
- /* The root node is always the "deepest", so we can
- determine the hieght of the tree using it. */
- INFO->tree_depth = blkh_level(BLOCKHEAD(ROOT));
-
-
- DEBUG_F( "root read_in: block=%u, depth=%u\n",
- le32_to_cpu(super.s_root_block), INFO->tree_depth );
-
- if ( INFO->tree_depth >= REISERFS_MAX_TREE_HEIGHT )
- {
- prom_printf( "ReiserFS: Unsupported tree depth (too deep): %u\n",
- INFO->tree_depth );
- return 0;
- }
-
- if ( INFO->tree_depth == BLKH_LEVEL_LEAF )
- {
- /* There is only one node in the whole filesystem, which is
- simultanously leaf and root */
- memcpy( LEAF, ROOT, INFO->blocksize );
- }
- return 1;
+ struct reiserfs_super_block super;
+ __u64 superblock = REISERFS_SUPERBLOCK_BLOCK;
+
+ if (read_disk_block(INFO->file, superblock, 0, sizeof(super), &super) != sizeof(super)) {
+ DEBUG_F("read_disk_block failed!\n");
+ return 0;
+ }
+
+ DEBUG_F( "Found super->magic: \"%s\"\n", super.s_magic );
+
+ if( strcmp( REISER2FS_SUPER_MAGIC_STRING, super.s_magic ) != 0 &&
+ strcmp( REISERFS_SUPER_MAGIC_STRING, super.s_magic ) != 0 )
+ {
+ /* Try old super block position */
+ superblock = REISERFS_OLD_SUPERBLOCK_BLOCK;
+
+ if (read_disk_block( INFO->file, superblock, 0, sizeof (super), &super ) != sizeof(super)) {
+ DEBUG_F("read_disk_block failed!\n");
+ return 0;
+ }
+
+ if ( strcmp( REISER2FS_SUPER_MAGIC_STRING, super.s_magic ) != 0 &&
+ strcmp( REISERFS_SUPER_MAGIC_STRING, super.s_magic ) != 0 )
+ {
+ /* pre journaling super block - untested */
+ if ( strcmp( REISERFS_SUPER_MAGIC_STRING,
+ (char *) ((__u32) &super + 20 ) ) != 0 )
+ return 0;
+
+ super.s_blocksize = cpu_to_le16(REISERFS_OLD_BLOCKSIZE);
+ super.s_journal_block = 0;
+ super.s_version = 0;
+ }
+ }
+
+ DEBUG_F( "ReiserFS superblock data:\n" );
+ DEBUG_F( "Block count: %u\n", le32_to_cpu(super.s_block_count) )
+ DEBUG_F( "Free blocks: %u\n", le32_to_cpu(super.s_free_blocks) );
+ DEBUG_F( "Journal block: %u\n", le32_to_cpu(super.s_journal_block) );
+ DEBUG_F( "Journal size (in blocks): %u\n",
+ le32_to_cpu(super.s_orig_journal_size) );
+ DEBUG_F( "Root block: %u\n\n", le32_to_cpu(super.s_root_block) );
+
+
+ INFO->version = le16_to_cpu(super.s_version);
+ INFO->blocksize = le16_to_cpu(super.s_blocksize);
+ INFO->blocksize_shift = log2( INFO->blocksize );
+
+ INFO->journal_block = le32_to_cpu(super.s_journal_block);
+ INFO->journal_block_count = le32_to_cpu(super.s_orig_journal_size);
+
+ INFO->cached_slots = (FSYSREISER_CACHE_SIZE >> INFO->blocksize_shift) - 1;
+
+ /* At this point, we've found a valid superblock. If we run into problems
+ * mounting the FS, the user should probably know. */
+
+ /* A few sanity checks ... */
+ if ( INFO->version > REISERFS_MAX_SUPPORTED_VERSION )
+ {
+ prom_printf( "ReiserFS: Unsupported version field: %u\n",
+ INFO->version );
+ return 0;
+ }
+
+ if ( INFO->blocksize < FSYSREISER_MIN_BLOCKSIZE
+ || INFO->blocksize > FSYSREISER_MAX_BLOCKSIZE )
+ {
+ prom_printf( "ReiserFS: Unsupported block size: %u\n",
+ INFO->blocksize );
+ return 0;
+ }
+
+ /* Setup the journal.. */
+ if ( INFO->journal_block != 0 )
+ {
+ if ( !is_power_of_two( INFO->journal_block_count ) )
+ {
+ prom_printf( "ReiserFS: Unsupported journal size, "
+ "not a power of 2: %u\n",
+ INFO->journal_block_count );
+ return 0;
+ }
+
+ journal_init();
+ /* Read in super block again, maybe it is in the journal */
+ block_read( superblock, 0, sizeof (struct reiserfs_super_block),
+ (char *) &super );
+ }
+
+ /* Read in the root block */
+ if ( !block_read( le32_to_cpu(super.s_root_block), 0,
+ INFO->blocksize, ROOT ) )
+ {
+ prom_printf( "ReiserFS: Failed to read in root block\n" );
+ return 0;
+ }
+
+ /* The root node is always the "deepest", so we can
+ determine the hieght of the tree using it. */
+ INFO->tree_depth = blkh_level(BLOCKHEAD(ROOT));
+
+
+ DEBUG_F( "root read_in: block=%u, depth=%u\n",
+ le32_to_cpu(super.s_root_block), INFO->tree_depth );
+
+ if ( INFO->tree_depth >= REISERFS_MAX_TREE_HEIGHT )
+ {
+ prom_printf( "ReiserFS: Unsupported tree depth (too deep): %u\n",
+ INFO->tree_depth );
+ return 0;
+ }
+
+ if ( INFO->tree_depth == BLKH_LEVEL_LEAF )
+ {
+ /* There is only one node in the whole filesystem, which is
+ simultanously leaf and root */
+ memcpy( LEAF, ROOT, INFO->blocksize );
+ }
+ return 1;