[PATCH 2/2] erofs-utils: cleanup redundant logic in erofs_iflush()

Gao Xiang hsiangkao at linux.alibaba.com
Thu Mar 6 04:39:29 AEDT 2025


No logic changes.

Signed-off-by: Gao Xiang <hsiangkao at linux.alibaba.com>
---
 lib/inode.c | 57 ++++++++++++-----------------------------------------
 1 file changed, 13 insertions(+), 44 deletions(-)

diff --git a/lib/inode.c b/lib/inode.c
index 434eafb..34c6128 100644
--- a/lib/inode.c
+++ b/lib/inode.c
@@ -592,6 +592,7 @@ int erofs_iflush(struct erofs_inode *inode)
 		struct erofs_inode_compact dic;
 		struct erofs_inode_extended die;
 	} u = {};
+	union erofs_inode_i_u u1;
 	int ret;
 
 	if (inode->bh)
@@ -599,6 +600,16 @@ int erofs_iflush(struct erofs_inode *inode)
 	else
 		off = erofs_iloc(inode);
 
+	if (S_ISCHR(inode->i_mode) || S_ISBLK(inode->i_mode) ||
+	    S_ISFIFO(inode->i_mode) || S_ISSOCK(inode->i_mode))
+		u1.rdev = cpu_to_le32(inode->u.i_rdev);
+	else if (is_inode_layout_compression(inode))
+		u1.compressed_blocks = cpu_to_le32(inode->u.i_blocks);
+	else if (inode->datalayout == EROFS_INODE_CHUNK_BASED)
+		u1.c.format = cpu_to_le16(inode->u.chunkformat);
+	else
+		u1.raw_blkaddr = cpu_to_le32(inode->u.i_blkaddr);
+
 	switch (inode->inode_isize) {
 	case sizeof(struct erofs_inode_compact):
 		u.dic.i_format = cpu_to_le16(0 | (inode->datalayout << 1));
@@ -611,28 +622,7 @@ int erofs_iflush(struct erofs_inode *inode)
 
 		u.dic.i_uid = cpu_to_le16((u16)inode->i_uid);
 		u.dic.i_gid = cpu_to_le16((u16)inode->i_gid);
-
-		switch (inode->i_mode & S_IFMT) {
-		case S_IFCHR:
-		case S_IFBLK:
-		case S_IFIFO:
-		case S_IFSOCK:
-			u.dic.i_u.rdev = cpu_to_le32(inode->u.i_rdev);
-			break;
-
-		default:
-			if (is_inode_layout_compression(inode))
-				u.dic.i_u.compressed_blocks =
-					cpu_to_le32(inode->u.i_blocks);
-			else if (inode->datalayout ==
-					EROFS_INODE_CHUNK_BASED)
-				u.dic.i_u.c.format =
-					cpu_to_le16(inode->u.chunkformat);
-			else
-				u.dic.i_u.raw_blkaddr =
-					cpu_to_le32(inode->u.i_blkaddr);
-			break;
-		}
+		u.dic.i_u = u1;
 		break;
 	case sizeof(struct erofs_inode_extended):
 		u.die.i_format = cpu_to_le16(1 | (inode->datalayout << 1));
@@ -648,28 +638,7 @@ int erofs_iflush(struct erofs_inode *inode)
 
 		u.die.i_mtime = cpu_to_le64(inode->i_mtime);
 		u.die.i_mtime_nsec = cpu_to_le32(inode->i_mtime_nsec);
-
-		switch (inode->i_mode & S_IFMT) {
-		case S_IFCHR:
-		case S_IFBLK:
-		case S_IFIFO:
-		case S_IFSOCK:
-			u.die.i_u.rdev = cpu_to_le32(inode->u.i_rdev);
-			break;
-
-		default:
-			if (is_inode_layout_compression(inode))
-				u.die.i_u.compressed_blocks =
-					cpu_to_le32(inode->u.i_blocks);
-			else if (inode->datalayout ==
-					EROFS_INODE_CHUNK_BASED)
-				u.die.i_u.c.format =
-					cpu_to_le16(inode->u.chunkformat);
-			else
-				u.die.i_u.raw_blkaddr =
-					cpu_to_le32(inode->u.i_blkaddr);
-			break;
-		}
+		u.die.i_u = u1;
 		break;
 	default:
 		erofs_err("unsupported on-disk inode version of nid %llu",
-- 
2.43.5



More information about the Linux-erofs mailing list