summaryrefslogtreecommitdiffstats
path: root/e2fsprogs-1.41.9-s_jnl_blocks-swap.patch
diff options
context:
space:
mode:
Diffstat (limited to 'e2fsprogs-1.41.9-s_jnl_blocks-swap.patch')
-rw-r--r--e2fsprogs-1.41.9-s_jnl_blocks-swap.patch48
1 files changed, 48 insertions, 0 deletions
diff --git a/e2fsprogs-1.41.9-s_jnl_blocks-swap.patch b/e2fsprogs-1.41.9-s_jnl_blocks-swap.patch
new file mode 100644
index 0000000..4b594f9
--- /dev/null
+++ b/e2fsprogs-1.41.9-s_jnl_blocks-swap.patch
@@ -0,0 +1,48 @@
+libext2fs: don't swap extent-based journal backup on read
+
+The f_illitable_flexbg test was failing on ppc, because
+e2fsck_move_ext3_journal is doing a direct memcmp of i_block with
+s_jnl_blocks, and failing.
+
+This is because we don't swap extent data on read from disk; rather
+we do it when we access the extents. However, ext2fs_swap_super
+was swapping s_jnl_blocks unconditionally, so these didn't match.
+
+Looks like we need to treat s_jnl_blocks the same as i_block, and
+swap it on access, not on read. Except for the last i_size bit...
+
+Signed-off-by: Eric Sandeen <sandeen@redhat.com>
+---
+
+diff --git a/lib/ext2fs/swapfs.c b/lib/ext2fs/swapfs.c
+index 42bc01e..38f5f9b 100644
+--- a/lib/ext2fs/swapfs.c
++++ b/lib/ext2fs/swapfs.c
+@@ -73,9 +73,19 @@ void ext2fs_swap_super(struct ext2_super_block * sb)
+ sb->s_kbytes_written = ext2fs_swab64(sb->s_kbytes_written);
+ for (i=0; i < 4; i++)
+ sb->s_hash_seed[i] = ext2fs_swab32(sb->s_hash_seed[i]);
++
++ /* if journal backup is for a valid extent-based journal... */
++ if (!ext2fs_extent_header_verify(sb->s_jnl_blocks,
++ sizeof(sb->s_jnl_blocks))) {
++ /* ... swap only the journal i_size */
++ sb->s_jnl_blocks[16] = ext2fs_swab32(sb->s_jnl_blocks[16]);
++ /* and the extent data is not swapped on read */
++ return;
++ }
++
++ /* direct/indirect journal: swap it all */
+ for (i=0; i < 17; i++)
+ sb->s_jnl_blocks[i] = ext2fs_swab32(sb->s_jnl_blocks[i]);
+-
+ }
+
+ void ext2fs_swap_group_desc(struct ext2_group_desc *gdp)
+
+
+--
+To unsubscribe from this list: send the line "unsubscribe linux-ext4" in
+the body of a message to majordomo@vger.kernel.org
+More majordomo info at http://vger.kernel.org/majordomo-info.html
+