Blame SOURCES/e2fsprogs-1.45.6-libext2fs-don-t-needlessly-byte-swap-the-group-descr.patch

e427d2
From 1aecdcc5c805e5e2114dd14877e9e1771fb519bf Mon Sep 17 00:00:00 2001
e427d2
From: Theodore Ts'o <tytso@mit.edu>
e427d2
Date: Thu, 16 Jan 2020 19:17:26 -0500
e427d2
Subject: [PATCH 04/46] libext2fs: don't needlessly byte swap the group
e427d2
 descriptors in ext2fs_flush
e427d2
Content-Type: text/plain
e427d2
e427d2
If the EXT2_FLAG_SUPER_ONLY is set, there's no reason to allocate the
e427d2
shadow block group descriptors and byte swap the group descriptors.
e427d2
e427d2
Signed-off-by: Theodore Ts'o <tytso@mit.edu>
e427d2
Signed-off-by: Lukas Czerner <lczerner@redhat.com>
e427d2
---
e427d2
 lib/ext2fs/closefs.c | 24 ++++++++++++++----------
e427d2
 1 file changed, 14 insertions(+), 10 deletions(-)
e427d2
e427d2
diff --git a/lib/ext2fs/closefs.c b/lib/ext2fs/closefs.c
e427d2
index 6814cdc3..69cbdd8c 100644
e427d2
--- a/lib/ext2fs/closefs.c
e427d2
+++ b/lib/ext2fs/closefs.c
e427d2
@@ -331,20 +331,24 @@ errcode_t ext2fs_flush2(ext2_filsys fs, int flags)
e427d2
 #ifdef WORDS_BIGENDIAN
e427d2
 	retval = EXT2_ET_NO_MEMORY;
e427d2
 	retval = ext2fs_get_mem(SUPERBLOCK_SIZE, &super_shadow);
e427d2
-	if (retval)
e427d2
-		goto errout;
e427d2
-	retval = ext2fs_get_array(fs->desc_blocks, fs->blocksize,
e427d2
-				  &group_shadow);
e427d2
 	if (retval)
e427d2
 		goto errout;
e427d2
 	memcpy(super_shadow, fs->super, sizeof(struct ext2_super_block));
e427d2
-	memcpy(group_shadow, fs->group_desc, (size_t) fs->blocksize *
e427d2
-	       fs->desc_blocks);
e427d2
-
e427d2
 	ext2fs_swap_super(super_shadow);
e427d2
-	for (j = 0; j < fs->group_desc_count; j++) {
e427d2
-		gdp = ext2fs_group_desc(fs, group_shadow, j);
e427d2
-		ext2fs_swap_group_desc2(fs, gdp);
e427d2
+
e427d2
+	if (((fs->flags & EXT2_FLAG_SUPER_ONLY) == 0) &&
e427d2
+	    !ext2fs_has_feature_journal_dev(fs->super)) {
e427d2
+		retval = ext2fs_get_array(fs->desc_blocks, fs->blocksize,
e427d2
+					  &group_shadow);
e427d2
+		if (retval)
e427d2
+			goto errout;
e427d2
+		memcpy(group_shadow, fs->group_desc, (size_t) fs->blocksize *
e427d2
+		       fs->desc_blocks);
e427d2
+
e427d2
+		for (j = 0; j < fs->group_desc_count; j++) {
e427d2
+			gdp = ext2fs_group_desc(fs, group_shadow, j);
e427d2
+			ext2fs_swap_group_desc2(fs, gdp);
e427d2
+		}
e427d2
 	}
e427d2
 #else
e427d2
 	super_shadow = fs->super;
e427d2
-- 
e427d2
2.35.1
e427d2