No logic changes. Signed-off-by: Gao Xiang <hsiang...@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