Whamcloud - gitweb
ChangeLog, journal.c, pass1.c, super.c, unix.c:
authorTheodore Ts'o <tytso@mit.edu>
Mon, 1 Jan 2001 15:51:50 +0000 (15:51 +0000)
committerTheodore Ts'o <tytso@mit.edu>
Mon, 1 Jan 2001 15:51:50 +0000 (15:51 +0000)
  journal.c, pass1.c, super.c, unix.c: Replace use of struct ext2fs_sb
   with struct ext2_super_block.
ChangeLog, debugfs.c:
  debugfs.c Replace use of struct ext2fs_sb with struct ext2_super_block.

debugfs/ChangeLog
debugfs/debugfs.c
e2fsck/ChangeLog
e2fsck/journal.c
e2fsck/pass1.c
e2fsck/super.c
e2fsck/unix.c

index 62ce6ab..2e4df37 100644 (file)
@@ -1,3 +1,8 @@
+2001-01-01    <tytso@snap.thunk.org>
+
+       * debugfs.c Replace use of struct ext2fs_sb with struct
+               ext2_super_block.
+
 2000-12-30    <tytso@snap.thunk.org>
 
        * dump.c (fix_perms): Fix bug for systems which don't have fchown;
index a38b232..846f607 100644 (file)
@@ -228,9 +228,8 @@ void do_init_filesys(int argc, char **argv)
        return;
 }
 
-static void print_features(struct ext2fs_sb * s, FILE *f)
+static void print_features(struct ext2_super_block * s, FILE *f)
 {
-#ifdef EXT2_DYNAMIC_REV
        int     i, j, printed=0;
 __u32  *mask = &s->s_feature_compat, m;
 
@@ -246,14 +245,12 @@ __u32     *mask = &s->s_feature_compat, m;
        if (printed == 0)
                printf("(none)");
        printf("\n");
-#endif
 }
 
 void do_show_super_stats(int argc, char *argv[])
 {
        int     i;
        FILE    *out;
-       struct ext2fs_sb *sb;
        struct ext2_group_desc *gdp;
        int     c, header_only = 0;
        char buf[80];
@@ -1464,7 +1461,7 @@ void do_features(int argc, char *argv[])
                else
                        ext2fs_mark_super_dirty(current_fs);
        }
-       print_features((struct ext2fs_sb *) current_fs->super, stdout);
+       print_features(current_fs->super, stdout);
 }
 
 static int source_file(const char *cmd_file, int sci_idx)
index 700ffa9..2034d37 100644 (file)
@@ -1,5 +1,8 @@
 2001-01-01    <tytso@snap.thunk.org>
 
+       * journal.c, pass1.c, super.c, unix.c: Replace use of struct
+               ext2fs_sb with struct ext2_super_block.
+
        * pass1.c (check_blocks): Remove use of EXT2_HAS_*_FEATURE macros.
 
 2000-12-31    <tytso@snap.thunk.org>
index 8eaa954..95a45e2 100644 (file)
@@ -138,17 +138,16 @@ void wait_on_buffer(struct buffer_head *bh)
 
 static void e2fsck_clear_recover(e2fsck_t ctx, int error)
 {
-       struct ext2fs_sb *s = (struct ext2fs_sb *)ctx->fs->super;
-
-       s->s_feature_incompat &= ~EXT3_FEATURE_INCOMPAT_RECOVER;
+       ctx->fs->super->s_feature_incompat &= ~EXT3_FEATURE_INCOMPAT_RECOVER;
 
        /* if we had an error doing journal recovery, we need a full fsck */
        if (error)
-               s->s_state &= ~EXT2_VALID_FS;
+               ctx->fs->super->s_state &= ~EXT2_VALID_FS;
        ext2fs_mark_super_dirty(ctx->fs);
 }
 
-static int e2fsck_journal_init_inode(e2fsck_t ctx, struct ext2fs_sb *s,
+static int e2fsck_journal_init_inode(e2fsck_t ctx,
+                                    struct ext2_super_block *s,
                                     ino_t journal_inum, journal_t **journal)
 {
        struct inode *inode;
@@ -210,73 +209,74 @@ static int e2fsck_get_journal(e2fsck_t ctx, journal_t **journal)
 {
        char uuid_str[40];
        struct problem_context pctx;
-       struct ext2fs_sb *s = (struct ext2fs_sb *)ctx->fs->super;
-       int recover = s->s_feature_incompat & EXT3_FEATURE_INCOMPAT_RECOVER;
+       struct ext2_super_block *sb = ctx->fs->super;
+       int recover = ctx->fs->super->s_feature_incompat &
+               EXT3_FEATURE_INCOMPAT_RECOVER;
 
        clear_problem_context(&pctx);
 
-       if (s->s_feature_compat & EXT3_FEATURE_COMPAT_HAS_JOURNAL) {
-               if (s->s_journal_dev) {
-                       pctx.num = s->s_journal_dev;
+       if (sb->s_feature_compat & EXT3_FEATURE_COMPAT_HAS_JOURNAL) {
+               if (sb->s_journal_dev) {
+                       pctx.num = sb->s_journal_dev;
                        /* this problem aborts on -y, -p, unsupported on -n */
                        if (!fix_problem(ctx, PR_0_JOURNAL_UNSUPP_DEV, &pctx))
                                return EXT2_ET_UNSUPP_FEATURE;
-                       s->s_journal_dev = 0;
-                       s->s_state &= ~EXT2_VALID_FS;
+                       sb->s_journal_dev = 0;
+                       sb->s_state &= ~EXT2_VALID_FS;
                        ext2fs_mark_super_dirty(ctx->fs);
                }
-               if (!uuid_is_null(s->s_journal_uuid)) {
-                       uuid_unparse(s->s_journal_uuid, uuid_str);
+               if (!uuid_is_null(sb->s_journal_uuid)) {
+                       uuid_unparse(sb->s_journal_uuid, uuid_str);
                        pctx.str = uuid_str;
                        /* this problem aborts on -y, -p, unsupported on -n */
                        if (!fix_problem(ctx, PR_0_JOURNAL_UNSUPP_UUID, &pctx))
                                return EXT2_ET_UNSUPP_FEATURE;
-                       uuid_clear(s->s_journal_uuid);
-                       s->s_state &= ~EXT2_VALID_FS;
+                       uuid_clear(sb->s_journal_uuid);
+                       sb->s_state &= ~EXT2_VALID_FS;
                        ext2fs_mark_super_dirty(ctx->fs);
                }
-               if (!s->s_journal_inum)
+               if (!sb->s_journal_inum)
                        return EXT2_ET_BAD_INODE_NUM;
        }
 
-       if (s->s_journal_dev) {
-               pctx.num = s->s_journal_dev;
+       if (sb->s_journal_dev) {
+               pctx.num = sb->s_journal_dev;
                if (!fix_problem(ctx, PR_0_JOURNAL_BAD_DEV, &pctx))
                        return EXT2_ET_UNSUPP_FEATURE;
-               s->s_journal_dev = 0;
-               s->s_state &= ~EXT2_VALID_FS;
+               sb->s_journal_dev = 0;
+               sb->s_state &= ~EXT2_VALID_FS;
                ext2fs_mark_super_dirty(ctx->fs);
        }
-       if (!uuid_is_null(s->s_journal_uuid)) {
-               uuid_unparse(s->s_journal_uuid, uuid_str);
+       if (!uuid_is_null(sb->s_journal_uuid)) {
+               uuid_unparse(sb->s_journal_uuid, uuid_str);
                pctx.str = uuid_str;
                if (!fix_problem(ctx, PR_0_JOURNAL_BAD_UUID, &pctx))
                        return EXT2_ET_UNSUPP_FEATURE;
-               uuid_clear(s->s_journal_uuid);
-               s->s_state &= ~EXT2_VALID_FS;
+               uuid_clear(sb->s_journal_uuid);
+               sb->s_state &= ~EXT2_VALID_FS;
                ext2fs_mark_super_dirty(ctx->fs);
        }
 
-       return e2fsck_journal_init_inode(ctx, s, s->s_journal_inum, journal);
+       return e2fsck_journal_init_inode(ctx, sb, sb->s_journal_inum, journal);
 }
 
 static int e2fsck_journal_fix_bad_inode(e2fsck_t ctx,
                                        struct problem_context *pctx)
 {
-       struct ext2fs_sb *s = (struct ext2fs_sb *)ctx->fs->super;
-       int recover = s->s_feature_incompat & EXT3_FEATURE_INCOMPAT_RECOVER;
-       int has_journal = s->s_feature_compat & EXT3_FEATURE_COMPAT_HAS_JOURNAL;
+       struct ext2_super_block *sb = ctx->fs->super;
+       int recover = ctx->fs->super->s_feature_incompat &
+               EXT3_FEATURE_INCOMPAT_RECOVER;
+       int has_journal = ctx->fs->super->s_feature_compat &
+               EXT3_FEATURE_COMPAT_HAS_JOURNAL;
 
-       if (has_journal || s->s_journal_inum) {
+       if (has_journal || sb->s_journal_inum) {
                /* The journal inode is bogus, remove and force full fsck */
                if (fix_problem(ctx, PR_0_JOURNAL_BAD_INODE, pctx)) {
-                       struct ext2fs_sb *s =(struct ext2fs_sb *)ctx->fs->super;
-
-                       if (has_journal && s->s_journal_inum)
+                       if (has_journal && sb->s_journal_inum)
                                printf("*** ext3 journal has been deleted - "
                                       "filesystem is now ext2 only ***\n\n");
-                       s->s_feature_compat &= ~EXT3_FEATURE_COMPAT_HAS_JOURNAL;
-                       s->s_journal_inum = 0;
+                       sb->s_feature_compat &= ~EXT3_FEATURE_COMPAT_HAS_JOURNAL;
+                       sb->s_journal_inum = 0;
                        e2fsck_clear_recover(ctx, 1);
                        return 0;
                }
@@ -294,7 +294,7 @@ static int e2fsck_journal_fix_bad_inode(e2fsck_t ctx,
 static int e2fsck_journal_fix_unsupported_super(e2fsck_t ctx,
                                                struct problem_context *pctx)
 {
-       struct ext2fs_sb *s = (struct ext2fs_sb *)ctx->fs->super;
+       struct ext2_super_block *sb = ctx->fs->super;
 
        /* Unsupported journal superblock - first choice is abort.
         * Declining that gives the option to reset the superblock.
@@ -302,7 +302,7 @@ static int e2fsck_journal_fix_unsupported_super(e2fsck_t ctx,
         * Otherwise we get the chance to delete the journal, and
         * failing that we abort because we can't handle this.
         */
-       if (s->s_feature_compat & EXT3_FEATURE_COMPAT_HAS_JOURNAL &&
+       if (sb->s_feature_compat & EXT3_FEATURE_COMPAT_HAS_JOURNAL &&
            fix_problem(ctx, PR_0_JOURNAL_UNSUPP_SUPER, pctx))
                return EXT2_ET_CORRUPT_SUPERBLOCK;
 
@@ -429,12 +429,13 @@ void e2fsck_journal_reset_super(e2fsck_t ctx, journal_superblock_t *jsb,
 static int e2fsck_journal_fix_corrupt_super(e2fsck_t ctx, journal_t *journal,
                                            struct problem_context *pctx)
 {
-       struct ext2fs_sb *s = (struct ext2fs_sb *)ctx->fs->super;
-       int recover = s->s_feature_incompat & EXT3_FEATURE_INCOMPAT_RECOVER;
+       struct ext2_super_block *sb = ctx->fs->super;
+       int recover = ctx->fs->super->s_feature_incompat &
+               EXT3_FEATURE_INCOMPAT_RECOVER;
 
        pctx->num = journal->j_inode->i_ino;
 
-       if (s->s_feature_compat & EXT3_FEATURE_COMPAT_HAS_JOURNAL) {
+       if (sb->s_feature_compat & EXT3_FEATURE_COMPAT_HAS_JOURNAL) {
                if (fix_problem(ctx, PR_0_JOURNAL_BAD_SUPER, pctx)) {
                        e2fsck_journal_reset_super(ctx, journal->j_superblock,
                                                   journal);
@@ -473,24 +474,25 @@ static void e2fsck_journal_release(e2fsck_t ctx, journal_t *journal, int reset)
  */
 int e2fsck_check_ext3_journal(e2fsck_t ctx)
 {
-       struct ext2fs_sb *s = (struct ext2fs_sb *)ctx->fs->super;
+       struct ext2_super_block *sb = ctx->fs->super;
        journal_t *journal;
-       int recover = s->s_feature_incompat & EXT3_FEATURE_INCOMPAT_RECOVER;
+       int recover = ctx->fs->super->s_feature_incompat &
+               EXT3_FEATURE_INCOMPAT_RECOVER;
        struct problem_context pctx;
        int reset = 0;
        int retval;
 
        /* If we don't have any journal features, don't do anything more */
-       if (!(s->s_feature_compat & EXT3_FEATURE_COMPAT_HAS_JOURNAL) &&
-           !recover && s->s_journal_inum == 0 && s->s_journal_dev == 0 &&
-           uuid_is_null(s->s_journal_uuid))
+       if (!(sb->s_feature_compat & EXT3_FEATURE_COMPAT_HAS_JOURNAL) &&
+           !recover && sb->s_journal_inum == 0 && sb->s_journal_dev == 0 &&
+           uuid_is_null(sb->s_journal_uuid))
                return 0;
 
 #ifdef JFS_DEBUG
        journal_enable_debug = 2;
 #endif
        clear_problem_context(&pctx);
-       pctx.num = s->s_journal_inum;
+       pctx.num = sb->s_journal_inum;
 
        retval = e2fsck_get_journal(ctx, &journal);
        if (retval) {
@@ -513,23 +515,23 @@ int e2fsck_check_ext3_journal(e2fsck_t ctx)
         * with -y, -n, or -p, only if a user isn't making up their mind.
         */
 no_has_journal:
-       if (!(s->s_feature_compat & EXT3_FEATURE_COMPAT_HAS_JOURNAL)) {
-               recover = s->s_feature_incompat & EXT3_FEATURE_INCOMPAT_RECOVER;
+       if (!(sb->s_feature_compat & EXT3_FEATURE_COMPAT_HAS_JOURNAL)) {
+               recover = sb->s_feature_incompat & EXT3_FEATURE_INCOMPAT_RECOVER;
                pctx.str = "inode";
                if (fix_problem(ctx, PR_0_JOURNAL_HAS_JOURNAL, &pctx)) {
                        if (recover &&
                            !fix_problem(ctx, PR_0_JOURNAL_RECOVER_SET, &pctx))
                                goto no_has_journal;
-                       s->s_journal_inum = 0;
+                       sb->s_journal_inum = 0;
                        e2fsck_clear_recover(ctx, recover);
                } else if (!(ctx->options & E2F_OPT_READONLY)) {
-                       s->s_feature_compat |= EXT3_FEATURE_COMPAT_HAS_JOURNAL;
+                       sb->s_feature_compat |= EXT3_FEATURE_COMPAT_HAS_JOURNAL;
                        ext2fs_mark_super_dirty(ctx->fs);
                }
        }
 
-       if (s->s_feature_compat & EXT3_FEATURE_COMPAT_HAS_JOURNAL &&
-           !(s->s_feature_incompat & EXT3_FEATURE_INCOMPAT_RECOVER) &&
+       if (sb->s_feature_compat & EXT3_FEATURE_COMPAT_HAS_JOURNAL &&
+           !(sb->s_feature_incompat & EXT3_FEATURE_INCOMPAT_RECOVER) &&
            journal->j_superblock->s_start != 0) {
                if (fix_problem(ctx, PR_0_JOURNAL_RESET_JOURNAL, &pctx))
                        reset = 1;
index df1522a..098988c 100644 (file)
@@ -196,7 +196,7 @@ void e2fsck_pass1(e2fsck_t ctx)
        unsigned char   frag, fsize;
        struct          problem_context pctx;
        struct          scan_callback_struct scan_struct;
-       struct ext2fs_sb *sb;
+       struct ext2_super_block *sb = ctx->fs->super;
        int             imagic_fs;
        
 #ifdef RESOURCE_TRACK
@@ -224,7 +224,6 @@ void e2fsck_pass1(e2fsck_t ctx)
        }
 #undef EXT2_BPP
 
-       sb = (struct ext2fs_sb *) fs->super;
        imagic_fs = (sb->s_feature_compat & EXT2_FEATURE_COMPAT_IMAGIC_INODES);
 
        /*
@@ -823,7 +822,6 @@ static void check_blocks(e2fsck_t ctx, struct problem_context *pctx,
        struct ext2_inode *inode = pctx->inode;
        int             bad_size = 0;
        __u64           size;
-       struct ext2fs_sb        *sb;
        
        if (!ext2fs_inode_has_valid_blocks(pctx->inode))
                return;
@@ -909,9 +907,8 @@ static void check_blocks(e2fsck_t ctx, struct problem_context *pctx,
                    ((inode->i_size & (fs->blocksize-1)) != 0))
                        bad_size = 1;
                else if (nblock < (pb.last_block + 1)) {
-                       sb = (struct ext2fs_sb *) fs->super;
                        if (((pb.last_block + 1) - nblock) >
-                           sb->s_prealloc_dir_blocks)
+                           fs->super->s_prealloc_dir_blocks)
                                bad_size = 2;
                }
        } else {
index 92eb460..8b8e04f 100644 (file)
@@ -293,7 +293,7 @@ void check_super_block(e2fsck_t ctx)
 {
        ext2_filsys fs = ctx->fs;
        blk_t   first_block, last_block;
-       struct ext2fs_sb *s = (struct ext2fs_sb *) fs->super;
+       struct ext2_super_block *sb = fs->super;
        blk_t   blocks_per_group = fs->super->s_blocks_per_group;
        int     inodes_per_block;
        dgrp_t  i;
@@ -316,26 +316,26 @@ void check_super_block(e2fsck_t ctx)
        /*
         * Verify the super block constants...
         */
-       check_super_value(ctx, "inodes_count", s->s_inodes_count,
+       check_super_value(ctx, "inodes_count", sb->s_inodes_count,
                          MIN_CHECK, 1, 0);
-       check_super_value(ctx, "blocks_count", s->s_blocks_count,
+       check_super_value(ctx, "blocks_count", sb->s_blocks_count,
                          MIN_CHECK, 1, 0);
-       check_super_value(ctx, "first_data_block", s->s_first_data_block,
-                         MAX_CHECK, 0, s->s_blocks_count);
-       check_super_value(ctx, "log_frag_size", s->s_log_frag_size,
+       check_super_value(ctx, "first_data_block", sb->s_first_data_block,
+                         MAX_CHECK, 0, sb->s_blocks_count);
+       check_super_value(ctx, "log_frag_size", sb->s_log_frag_size,
                          MAX_CHECK, 0, 2);
-       check_super_value(ctx, "log_block_size", s->s_log_block_size,
-                         MIN_CHECK | MAX_CHECK, s->s_log_frag_size,
+       check_super_value(ctx, "log_block_size", sb->s_log_block_size,
+                         MIN_CHECK | MAX_CHECK, sb->s_log_frag_size,
                          2);
-       check_super_value(ctx, "frags_per_group", s->s_frags_per_group,
-                         MIN_CHECK | MAX_CHECK, 1, 8 * EXT2_BLOCK_SIZE(s));
-       check_super_value(ctx, "blocks_per_group", s->s_blocks_per_group,
-                         MIN_CHECK | MAX_CHECK, 1, 8 * EXT2_BLOCK_SIZE(s));
-       check_super_value(ctx, "inodes_per_group", s->s_inodes_per_group,
+       check_super_value(ctx, "frags_per_group", sb->s_frags_per_group,
+                         MIN_CHECK | MAX_CHECK, 1, 8 * EXT2_BLOCK_SIZE(sb));
+       check_super_value(ctx, "blocks_per_group", sb->s_blocks_per_group,
+                         MIN_CHECK | MAX_CHECK, 1, 8 * EXT2_BLOCK_SIZE(sb));
+       check_super_value(ctx, "inodes_per_group", sb->s_inodes_per_group,
                          MIN_CHECK | MAX_CHECK, 1,
                          inodes_per_block * blocks_per_group);
-       check_super_value(ctx, "r_blocks_count", s->s_r_blocks_count,
-                         MAX_CHECK, 0, s->s_blocks_count);
+       check_super_value(ctx, "r_blocks_count", sb->s_r_blocks_count,
+                         MAX_CHECK, 0, sb->s_blocks_count);
 
        if (!ctx->num_blocks) {
                pctx.errcode = e2fsck_get_device_size(ctx);
@@ -345,8 +345,8 @@ void check_super_block(e2fsck_t ctx)
                        return;
                }
                if ((pctx.errcode != EXT2_ET_UNIMPLEMENTED) &&
-                   (ctx->num_blocks < s->s_blocks_count)) {
-                       pctx.blk = s->s_blocks_count;
+                   (ctx->num_blocks < sb->s_blocks_count)) {
+                       pctx.blk = sb->s_blocks_count;
                        pctx.blk2 = ctx->num_blocks;
                        if (fix_problem(ctx, PR_0_FS_SIZE_WRONG, &pctx)) {
                                ctx->flags |= E2F_FLAG_ABORT;
@@ -355,39 +355,39 @@ void check_super_block(e2fsck_t ctx)
                }
        }
 
-       if (s->s_log_block_size != s->s_log_frag_size) {
-               pctx.blk = EXT2_BLOCK_SIZE(s);
-               pctx.blk2 = EXT2_FRAG_SIZE(s);
+       if (sb->s_log_block_size != sb->s_log_frag_size) {
+               pctx.blk = EXT2_BLOCK_SIZE(sb);
+               pctx.blk2 = EXT2_FRAG_SIZE(sb);
                fix_problem(ctx, PR_0_NO_FRAGMENTS, &pctx);
                ctx->flags |= E2F_FLAG_ABORT;
                return;
        }
 
-       should_be = s->s_frags_per_group >>
-               (s->s_log_block_size - s->s_log_frag_size);             
-       if (s->s_blocks_per_group != should_be) {
-               pctx.blk = s->s_blocks_per_group;
+       should_be = sb->s_frags_per_group >>
+               (sb->s_log_block_size - sb->s_log_frag_size);           
+       if (sb->s_blocks_per_group != should_be) {
+               pctx.blk = sb->s_blocks_per_group;
                pctx.blk2 = should_be;
                fix_problem(ctx, PR_0_BLOCKS_PER_GROUP, &pctx);
                ctx->flags |= E2F_FLAG_ABORT;
                return;
        }
 
-       should_be = (s->s_log_block_size == 0) ? 1 : 0;
-       if (s->s_first_data_block != should_be) {
-               pctx.blk = s->s_first_data_block;
+       should_be = (sb->s_log_block_size == 0) ? 1 : 0;
+       if (sb->s_first_data_block != should_be) {
+               pctx.blk = sb->s_first_data_block;
                pctx.blk2 = should_be;
                fix_problem(ctx, PR_0_FIRST_DATA_BLOCK, &pctx);
                ctx->flags |= E2F_FLAG_ABORT;
                return;
        }
 
-       should_be = s->s_inodes_per_group * fs->group_desc_count;
-       if (s->s_inodes_count != should_be) {
-               pctx.ino = s->s_inodes_count;
+       should_be = sb->s_inodes_per_group * fs->group_desc_count;
+       if (sb->s_inodes_count != should_be) {
+               pctx.ino = sb->s_inodes_count;
                pctx.ino2 = should_be;
                if (fix_problem(ctx, PR_0_INODE_COUNT_WRONG, &pctx)) {
-                       s->s_inodes_count = should_be;
+                       sb->s_inodes_count = should_be;
                        ext2fs_mark_super_dirty(fs);
                }
        }
@@ -449,9 +449,9 @@ void check_super_block(e2fsck_t ctx)
        /*
         * If the UUID field isn't assigned, assign it.
         */
-       if (!(ctx->options & E2F_OPT_READONLY) && uuid_is_null(s->s_uuid)) {
+       if (!(ctx->options & E2F_OPT_READONLY) && uuid_is_null(sb->s_uuid)) {
                if (fix_problem(ctx, PR_0_ADD_UUID, &pctx)) {
-                       uuid_generate(s->s_uuid);
+                       uuid_generate(sb->s_uuid);
                        ext2fs_mark_super_dirty(fs);
                }
        }
index c19a289..a22a19d 100644 (file)
@@ -637,7 +637,7 @@ int main (int argc, char *argv[])
        int             i;
        ext2_filsys     fs = 0;
        io_manager      io_ptr;
-       struct ext2fs_sb *s;
+       struct ext2_super_block *sb;
        const char      *lib_ver_date;
        int             my_ver, lib_ver;
        e2fsck_t        ctx;
@@ -766,28 +766,26 @@ restart:
        }
        ctx->fs = fs;
        fs->priv_data = ctx;
-#ifdef EXT2_CURRENT_REV
-       if (fs->super->s_rev_level > E2FSCK_CURRENT_REV) {
+       sb = fs->super;
+       if (sb->s_rev_level > E2FSCK_CURRENT_REV) {
                com_err(ctx->program_name, EXT2_ET_REV_TOO_HIGH,
                        _("while trying to open %s"),
                        ctx->filesystem_name);
        get_newer:
                fatal_error(ctx, _("Get a newer version of e2fsck!"));
        }
-#endif
-       s = (struct ext2fs_sb *) fs->super;
 
        /*
         * Set the device name, which is used whenever we print error
         * or informational messages to the user.
         */
        if (ctx->device_name == 0 &&
-           (s->s_volume_name[0] != 0)) {
-               char *cp = malloc(sizeof(s->s_volume_name)+1);
+           (sb->s_volume_name[0] != 0)) {
+               char *cp = malloc(sizeof(sb->s_volume_name)+1);
                if (cp) {
-                       strncpy(cp, s->s_volume_name,
-                               sizeof(s->s_volume_name));
-                       cp[sizeof(s->s_volume_name)] = 0;
+                       strncpy(cp, sb->s_volume_name,
+                               sizeof(sb->s_volume_name));
+                       cp[sizeof(sb->s_volume_name)] = 0;
                        ctx->device_name = cp;
                }
        }
@@ -810,7 +808,7 @@ restart:
         * Check to see if we need to do ext3-style recovery.  If so,
         * do it, and then restart the fsck.
         */
-       if (s->s_feature_incompat & EXT3_FEATURE_INCOMPAT_RECOVER) {
+       if (sb->s_feature_incompat & EXT3_FEATURE_INCOMPAT_RECOVER) {
                if (ctx->options & E2F_OPT_READONLY) {
                        printf(_("Warning: skipping journal recovery "
                                 "because doing a read-only filesystem "
@@ -834,19 +832,19 @@ restart:
         * Check for compatibility with the feature sets.  We need to
         * be more stringent than ext2fs_open().
         */
-       if ((s->s_feature_compat & ~EXT2_LIB_FEATURE_COMPAT_SUPP) ||
-           (s->s_feature_incompat & ~EXT2_LIB_FEATURE_INCOMPAT_SUPP)) {
+       if ((sb->s_feature_compat & ~EXT2_LIB_FEATURE_COMPAT_SUPP) ||
+           (sb->s_feature_incompat & ~EXT2_LIB_FEATURE_INCOMPAT_SUPP)) {
                com_err(ctx->program_name, EXT2_ET_UNSUPP_FEATURE,
                        "(%s)", ctx->device_name);
                goto get_newer;
        }
-       if (s->s_feature_ro_compat & ~EXT2_LIB_FEATURE_RO_COMPAT_SUPP) {
+       if (sb->s_feature_ro_compat & ~EXT2_LIB_FEATURE_RO_COMPAT_SUPP) {
                com_err(ctx->program_name, EXT2_ET_RO_UNSUPP_FEATURE,
                        "(%s)", ctx->device_name);
                goto get_newer;
        }
 #ifdef ENABLE_COMPRESSION
-       if (s->s_feature_incompat & EXT2_FEATURE_INCOMPAT_COMPRESSION)
+       if (sb->s_feature_incompat & EXT2_FEATURE_INCOMPAT_COMPRESSION)
                com_err(ctx->program_name, 0,
                        _("Warning: compression support is experimental.\n"));
 #endif
@@ -947,13 +945,13 @@ restart:
                exit_value = FSCK_UNCORRECTED;
        if (!(ctx->options & E2F_OPT_READONLY)) {
                if (ext2fs_test_valid(fs)) {
-                       if (!(fs->super->s_state & EXT2_VALID_FS))
+                       if (!(sb->s_state & EXT2_VALID_FS))
                                exit_value = FSCK_NONDESTRUCT;
-                       fs->super->s_state = EXT2_VALID_FS;
+                       sb->s_state = EXT2_VALID_FS;
                } else
-                       fs->super->s_state &= ~EXT2_VALID_FS;
-               fs->super->s_mnt_count = 0;
-               fs->super->s_lastcheck = time(NULL);
+                       sb->s_state &= ~EXT2_VALID_FS;
+               sb->s_mnt_count = 0;
+               sb->s_lastcheck = time(NULL);
                ext2fs_mark_super_dirty(fs);
        }
        show_stats(ctx);