]> git.ipfire.org Git - thirdparty/e2fsprogs.git/commitdiff
Fix writing external journals on big-endian machines
authorTheodore Ts'o <tytso@mit.edu>
Sun, 13 Nov 2005 04:30:39 +0000 (23:30 -0500)
committerTheodore Ts'o <tytso@mit.edu>
Sun, 13 Nov 2005 04:30:39 +0000 (23:30 -0500)
Fix a bug when writing an external journal device on an big
endian machine (such as a S/390), where when the number of
block groups is zero, we never end up writing out the
primary superblock at all.

Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
lib/ext2fs/ChangeLog
lib/ext2fs/closefs.c

index 5e2530ea1979ea15ac30c93d21ae6244b6d47f5c..93eccb39e19335b3bb33171e12e2ba2111a4eb2e 100644 (file)
@@ -1,3 +1,10 @@
+2005-11-09  Theodore Ts'o  <tytso@mit.edu>
+
+       * Fix a bug when writing an external journal device on an big
+               endian machine (such as a S/390), where when the number of
+               block groups is zero, we never end up writing out the
+               primary superblock at all.
+
 2005-09-24  Theodore Ts'o  <tytso@mit.edu>
 
        * ext2fs.h, bb_inode.c, closefs.c, initialize.c, mkdir.c,
index 6a1519379406021fb55892172fad66137fe375df..58f1a8b1d44f04d2f564ad6719c9dbe5c4dcb638 100644 (file)
@@ -250,14 +250,6 @@ errcode_t ext2fs_flush(ext2_filsys fs)
        group_shadow = fs->group_desc;
 #endif
        
-       /*
-        * If this is an external journal device, don't write out the
-        * block group descriptors or any of the backup superblocks
-        */
-       if (fs->super->s_feature_incompat &
-           EXT3_FEATURE_INCOMPAT_JOURNAL_DEV)
-               goto write_primary_superblock_only;
-
        /*
         * Set the state of the FS to be non-valid.  (The state has
         * already been backed up earlier, and will be restored after
@@ -271,6 +263,14 @@ errcode_t ext2fs_flush(ext2_filsys fs)
        }
 #endif
 
+       /*
+        * If this is an external journal device, don't write out the
+        * block group descriptors or any of the backup superblocks
+        */
+       if (fs->super->s_feature_incompat &
+           EXT3_FEATURE_INCOMPAT_JOURNAL_DEV)
+               goto write_primary_superblock_only;
+
        /*
         * Write out the master group descriptors, and the backup
         * superblocks and group descriptors.
@@ -311,14 +311,6 @@ errcode_t ext2fs_flush(ext2_filsys fs)
                                goto errout;
                }
        }
-       fs->super->s_block_group_nr = 0;
-       fs->super->s_state = fs_state;
-#ifdef EXT2FS_ENABLE_SWAPFS
-       if (fs->flags & EXT2_FLAG_SWAP_BYTES) {
-               *super_shadow = *fs->super;
-               ext2fs_swap_super(super_shadow);
-       }
-#endif
 
        /*
         * If the write_bitmaps() function is present, call it to
@@ -340,6 +332,16 @@ write_primary_superblock_only:
         * out to disk first, just to avoid a race condition with an
         * insy-tinsy window....
         */
+
+       fs->super->s_block_group_nr = 0;
+       fs->super->s_state = fs_state;
+#ifdef EXT2FS_ENABLE_SWAPFS
+       if (fs->flags & EXT2_FLAG_SWAP_BYTES) {
+               *super_shadow = *fs->super;
+               ext2fs_swap_super(super_shadow);
+       }
+#endif
+
        retval = io_channel_flush(fs->io);
        retval = write_primary_superblock(fs, super_shadow);
        if (retval)