From: Gao Xiang <[email protected]>

This patch adapts erofs-utils to the latest kernel ondisk definitions,
especially the following kernel commits:

4b66eb51d2c4 erofs: remove all the byte offset comments
60a49ba8fee1 erofs: on-disk format should have explicitly assigned numbers
b6796abd3cc1 erofs: some macros are much more readable as a function
ed34aa4a8a7d erofs: kill __packed for on-disk structures
c39747f770be erofs: update erofs_inode_is_data_compressed helper
426a930891cf erofs: use feature_incompat rather than requirements
8a76568225de erofs: better naming for erofs inode related stuffs
ea559e7b8451 erofs: update erofs_fs.h comments

Signed-off-by: Gao Xiang <[email protected]>
---
 include/erofs/cache.h    |   2 +-
 include/erofs/internal.h |   6 +-
 include/erofs_fs.h       | 198 ++++++++++++++++++++-------------------
 lib/compress.c           |   9 +-
 lib/config.c             |   2 +-
 lib/inode.c              |  42 ++++-----
 mkfs/main.c              |   5 +-
 7 files changed, 137 insertions(+), 127 deletions(-)

diff --git a/include/erofs/cache.h b/include/erofs/cache.h
index 108757a..71df811 100644
--- a/include/erofs/cache.h
+++ b/include/erofs/cache.h
@@ -53,7 +53,7 @@ static inline const int get_alignsize(int type, int *type_ret)
 
        if (type == INODE) {
                *type_ret = META;
-               return sizeof(struct erofs_inode_v1);
+               return sizeof(struct erofs_inode_compact);
        } else if (type == XATTR) {
                *type_ret = META;
                return sizeof(struct erofs_xattr_entry);
diff --git a/include/erofs/internal.h b/include/erofs/internal.h
index b7ce6f8..07a32d2 100644
--- a/include/erofs/internal.h
+++ b/include/erofs/internal.h
@@ -52,7 +52,7 @@ struct erofs_sb_info {
        erofs_blk_t meta_blkaddr;
        erofs_blk_t xattr_blkaddr;
 
-       u32 requirements;
+       u32 feature_incompat;
 };
 
 /* global sbi */
@@ -82,7 +82,7 @@ struct erofs_inode {
 
        char i_srcpath[PATH_MAX + 1];
 
-       unsigned char data_mapping_mode;
+       unsigned char datalayout;
        unsigned char inode_isize;
        /* inline tail-end packing size */
        unsigned short idata_size;
@@ -100,7 +100,7 @@ struct erofs_inode {
 
 static inline bool is_inode_layout_compression(struct erofs_inode *inode)
 {
-       return erofs_inode_is_data_compressed(inode->data_mapping_mode);
+       return erofs_inode_is_data_compressed(inode->datalayout);
 }
 
 #define IS_ROOT(x)     ((x) == (x)->i_parent)
diff --git a/include/erofs_fs.h b/include/erofs_fs.h
index 601b477..f29aa25 100644
--- a/include/erofs_fs.h
+++ b/include/erofs_fs.h
@@ -1,6 +1,7 @@
 /* SPDX-License-Identifier: GPL-2.0-only OR Apache-2.0 */
 /*
  * erofs_utils/include/erofs_fs.h
+ * EROFS (Enhanced ROM File System) on-disk format definition
  *
  * Copyright (C) 2017-2018 HUAWEI, Inc.
  *             http://www.huawei.com/
@@ -9,41 +10,41 @@
 #ifndef __EROFS_FS_H
 #define __EROFS_FS_H
 
-/* Enhanced(Extended) ROM File System */
 #define EROFS_SUPER_MAGIC_V1    0xE0F5E1E2
 #define EROFS_SUPER_OFFSET      1024
 
 /*
- * Any bits that aren't in EROFS_ALL_REQUIREMENTS should be
- * incompatible with this kernel version.
+ * Any bits that aren't in EROFS_ALL_FEATURE_INCOMPAT should
+ * be incompatible with this kernel version.
  */
-#define EROFS_REQUIREMENT_LZ4_0PADDING 0x00000001
-#define EROFS_ALL_REQUIREMENTS         EROFS_REQUIREMENT_LZ4_0PADDING
+#define EROFS_FEATURE_INCOMPAT_LZ4_0PADDING    0x00000001
+#define EROFS_ALL_FEATURE_INCOMPAT             
EROFS_FEATURE_INCOMPAT_LZ4_0PADDING
 
+/* 128-byte erofs on-disk super block */
 struct erofs_super_block {
-/*  0 */__le32 magic;           /* in the little endian */
-/*  4 */__le32 checksum;        /* crc32c(super_block) */
-/*  8 */__le32 features;        /* (aka. feature_compat) */
-/* 12 */__u8 blkszbits;         /* support block_size == PAGE_SIZE only */
-/* 13 */__u8 reserved;
-
-/* 14 */__le16 root_nid;
-/* 16 */__le64 inos;            /* total valid ino # (== f_files - f_favail) */
-
-/* 24 */__le64 build_time;      /* inode v1 time derivation */
-/* 32 */__le32 build_time_nsec;
-/* 36 */__le32 blocks;          /* used for statfs */
-/* 40 */__le32 meta_blkaddr;
-/* 44 */__le32 xattr_blkaddr;
-/* 48 */__u8 uuid[16];          /* 128-bit uuid for volume */
-/* 64 */__u8 volume_name[16];   /* volume name */
-/* 80 */__le32 requirements;    /* (aka. feature_incompat) */
-
-/* 84 */__u8 reserved2[44];
-} __packed;                     /* 128 bytes */
+       __le32 magic;           /* file system magic number */
+       __le32 checksum;        /* crc32c(super_block) */
+       __le32 feature_compat;
+       __u8 blkszbits;         /* support block_size == PAGE_SIZE only */
+       __u8 reserved;
+
+       __le16 root_nid;        /* nid of root directory */
+       __le64 inos;            /* total valid ino # (== f_files - f_favail) */
+
+       __le64 build_time;      /* inode v1 time derivation */
+       __le32 build_time_nsec; /* inode v1 time derivation in nano scale */
+       __le32 blocks;          /* used for statfs */
+       __le32 meta_blkaddr;    /* start block address of metadata area */
+       __le32 xattr_blkaddr;   /* start block address of shared xattr area */
+       __u8 uuid[16];          /* 128-bit uuid for volume */
+       __u8 volume_name[16];   /* volume name */
+       __le32 feature_incompat;
+
+       __u8 reserved2[44];
+};
 
 /*
- * erofs inode data mapping:
+ * erofs inode datalayout (i_format in on-disk inode):
  * 0 - inode plain without inline data A:
  * inode, [xattrs], ... | ... | no-holed data
  * 1 - inode VLE compression B (legacy):
@@ -55,82 +56,83 @@ struct erofs_super_block {
  * 4~7 - reserved
  */
 enum {
-       EROFS_INODE_FLAT_PLAIN,
-       EROFS_INODE_FLAT_COMPRESSION_LEGACY,
-       EROFS_INODE_FLAT_INLINE,
-       EROFS_INODE_FLAT_COMPRESSION,
-       EROFS_INODE_LAYOUT_MAX
+       EROFS_INODE_FLAT_PLAIN                  = 0,
+       EROFS_INODE_FLAT_COMPRESSION_LEGACY     = 1,
+       EROFS_INODE_FLAT_INLINE                 = 2,
+       EROFS_INODE_FLAT_COMPRESSION            = 3,
+       EROFS_INODE_DATALAYOUT_MAX
 };
 
 static inline bool erofs_inode_is_data_compressed(unsigned int datamode)
 {
-       if (datamode == EROFS_INODE_FLAT_COMPRESSION)
-               return true;
-       return datamode == EROFS_INODE_FLAT_COMPRESSION_LEGACY;
+       return datamode == EROFS_INODE_FLAT_COMPRESSION ||
+               datamode == EROFS_INODE_FLAT_COMPRESSION_LEGACY;
 }
 
 /* bit definitions of inode i_advise */
 #define EROFS_I_VERSION_BITS            1
-#define EROFS_I_DATA_MAPPING_BITS       3
+#define EROFS_I_DATALAYOUT_BITS         3
 
 #define EROFS_I_VERSION_BIT             0
-#define EROFS_I_DATA_MAPPING_BIT        1
+#define EROFS_I_DATALAYOUT_BIT          1
 
-struct erofs_inode_v1 {
-/*  0 */__le16 i_advise;
+/* 32-byte reduced form of an ondisk inode */
+struct erofs_inode_compact {
+       __le16 i_format;        /* inode format hints */
 
 /* 1 header + n-1 * 4 bytes inline xattr to keep continuity */
-/*  2 */__le16 i_xattr_icount;
-/*  4 */__le16 i_mode;
-/*  6 */__le16 i_nlink;
-/*  8 */__le32 i_size;
-/* 12 */__le32 i_reserved;
-/* 16 */union {
+       __le16 i_xattr_icount;
+       __le16 i_mode;
+       __le16 i_nlink;
+       __le32 i_size;
+       __le32 i_reserved;
+       union {
                /* file total compressed blocks for data mapping 1 */
                __le32 compressed_blocks;
                __le32 raw_blkaddr;
 
                /* for device files, used to indicate old/new device # */
                __le32 rdev;
-       } i_u __packed;
-/* 20 */__le32 i_ino;           /* only used for 32-bit stat compatibility */
-/* 24 */__le16 i_uid;
-/* 26 */__le16 i_gid;
-/* 28 */__le32 i_reserved2;
-} __packed;
+       } i_u;
+       __le32 i_ino;           /* only used for 32-bit stat compatibility */
+       __le16 i_uid;
+       __le16 i_gid;
+       __le32 i_reserved2;
+};
 
 /* 32 bytes on-disk inode */
-#define EROFS_INODE_LAYOUT_V1   0
+#define EROFS_INODE_LAYOUT_COMPACT     0
 /* 64 bytes on-disk inode */
-#define EROFS_INODE_LAYOUT_V2   1
+#define EROFS_INODE_LAYOUT_EXTENDED    1
 
-struct erofs_inode_v2 {
-/*  0 */__le16 i_advise;
+/* 64-byte complete form of an ondisk inode */
+struct erofs_inode_extended {
+       __le16 i_format;        /* inode format hints */
 
 /* 1 header + n-1 * 4 bytes inline xattr to keep continuity */
-/*  2 */__le16 i_xattr_icount;
-/*  4 */__le16 i_mode;
-/*  6 */__le16 i_reserved;
-/*  8 */__le64 i_size;
-/* 16 */union {
+       __le16 i_xattr_icount;
+       __le16 i_mode;
+       __le16 i_reserved;
+       __le64 i_size;
+       union {
                /* file total compressed blocks for data mapping 1 */
                __le32 compressed_blocks;
                __le32 raw_blkaddr;
 
                /* for device files, used to indicate old/new device # */
                __le32 rdev;
-       } i_u __packed;
+       } i_u;
 
        /* only used for 32-bit stat compatibility */
-/* 20 */__le32 i_ino;
-
-/* 24 */__le32 i_uid;
-/* 28 */__le32 i_gid;
-/* 32 */__le64 i_ctime;
-/* 40 */__le32 i_ctime_nsec;
-/* 44 */__le32 i_nlink;
-/* 48 */__u8   i_reserved2[16];
-} __packed;                     /* 64 bytes */
+       __le32 i_ino;
+
+       __le32 i_uid;
+       __le32 i_gid;
+       __le64 i_ctime;
+       __le32 i_ctime_nsec;
+       __le32 i_nlink;
+       __u8   i_reserved2[16];
+};
 
 #define EROFS_MAX_SHARED_XATTRS         (128)
 /* h_shared_count between 129 ... 255 are special # */
@@ -152,7 +154,7 @@ struct erofs_xattr_ibody_header {
        __u8   h_shared_count;
        __u8   h_reserved2[7];
        __le32 h_shared_xattrs[0];      /* shared xattr id array */
-} __packed;
+};
 
 /* Name indexes */
 #define EROFS_XATTR_INDEX_USER              1
@@ -169,22 +171,28 @@ struct erofs_xattr_entry {
        __le16 e_value_size;    /* size of attribute value */
        /* followed by e_name and e_value */
        char   e_name[0];       /* attribute name */
-} __packed;
+};
 
-#define ondisk_xattr_ibody_size(count) ({\
-       u32 __count = le16_to_cpu(count); \
-       ((__count) == 0) ? 0 : \
-       sizeof(struct erofs_xattr_ibody_header) + \
-               sizeof(__u32) * ((__count) - 1); })
+static inline unsigned int erofs_xattr_ibody_size(__le16 i_xattr_icount)
+{
+       if (!i_xattr_icount)
+               return 0;
+
+       return sizeof(struct erofs_xattr_ibody_header) +
+               sizeof(__u32) * (le16_to_cpu(i_xattr_icount) - 1);
+}
 
 #define EROFS_XATTR_ALIGN(size) round_up(size, sizeof(struct 
erofs_xattr_entry))
-#define EROFS_XATTR_ENTRY_SIZE(entry) EROFS_XATTR_ALIGN( \
-       sizeof(struct erofs_xattr_entry) + \
-       (entry)->e_name_len + le16_to_cpu((entry)->e_value_size))
 
-/* available compression algorithm types */
+static inline unsigned int erofs_xattr_entry_size(struct erofs_xattr_entry *e)
+{
+       return EROFS_XATTR_ALIGN(sizeof(struct erofs_xattr_entry) +
+                                e->e_name_len + le16_to_cpu(e->e_value_size));
+}
+
+/* available compression algorithm types (for h_algorithmtype) */
 enum {
-       Z_EROFS_COMPRESSION_LZ4,
+       Z_EROFS_COMPRESSION_LZ4 = 0,
        Z_EROFS_COMPRESSION_MAX
 };
 
@@ -212,12 +220,12 @@ struct z_erofs_map_header {
         * bit 5-7 : (physical - logical) cluster bits of head 2.
         */
        __u8    h_clusterbits;
-} __packed;
+};
 
 #define Z_EROFS_VLE_LEGACY_HEADER_PADDING       8
 
 /*
- * Z_EROFS Variable-sized Logical Extent cluster type:
+ * Fixed-sized output compression ondisk Logical Extent cluster type:
  *    0 - literal (uncompressed) cluster
  *    1 - compressed cluster (for the head logical cluster)
  *    2 - compressed cluster (for the other logical clusters)
@@ -242,10 +250,10 @@ struct z_erofs_map_header {
  *                (di_advise could be 0, 1 or 2)
  */
 enum {
-       Z_EROFS_VLE_CLUSTER_TYPE_PLAIN,
-       Z_EROFS_VLE_CLUSTER_TYPE_HEAD,
-       Z_EROFS_VLE_CLUSTER_TYPE_NONHEAD,
-       Z_EROFS_VLE_CLUSTER_TYPE_RESERVED,
+       Z_EROFS_VLE_CLUSTER_TYPE_PLAIN          = 0,
+       Z_EROFS_VLE_CLUSTER_TYPE_HEAD           = 1,
+       Z_EROFS_VLE_CLUSTER_TYPE_NONHEAD        = 2,
+       Z_EROFS_VLE_CLUSTER_TYPE_RESERVED       = 3,
        Z_EROFS_VLE_CLUSTER_TYPE_MAX
 };
 
@@ -267,18 +275,18 @@ struct z_erofs_vle_decompressed_index {
                 * [1] - pointing to the tail cluster
                 */
                __le16 delta[2];
-       } di_u __packed;                /* 8 bytes */
-} __packed;
+       } di_u;
+};
 
 #define Z_EROFS_VLE_EXTENT_ALIGN(size) round_up(size, \
        sizeof(struct z_erofs_vle_decompressed_index))
 
 /* dirent sorts in alphabet order, thus we can do binary search */
 struct erofs_dirent {
-       __le64 nid;     /*  0, node number */
-       __le16 nameoff; /*  8, start offset of file name */
-       __u8 file_type; /* 10, file type */
-       __u8 reserved;  /* 11, reserved */
+       __le64 nid;     /* node number */
+       __le16 nameoff; /* start offset of file name */
+       __u8 file_type; /* file type */
+       __u8 reserved;  /* reserved */
 } __packed;
 
 /* file types used in inode_info->flags */
@@ -300,8 +308,8 @@ enum {
 static inline void erofs_check_ondisk_layout_definitions(void)
 {
        BUILD_BUG_ON(sizeof(struct erofs_super_block) != 128);
-       BUILD_BUG_ON(sizeof(struct erofs_inode_v1) != 32);
-       BUILD_BUG_ON(sizeof(struct erofs_inode_v2) != 64);
+       BUILD_BUG_ON(sizeof(struct erofs_inode_compact) != 32);
+       BUILD_BUG_ON(sizeof(struct erofs_inode_extended) != 64);
        BUILD_BUG_ON(sizeof(struct erofs_xattr_ibody_header) != 12);
        BUILD_BUG_ON(sizeof(struct erofs_xattr_entry) != 4);
        BUILD_BUG_ON(sizeof(struct z_erofs_map_header) != 8);
diff --git a/lib/compress.c b/lib/compress.c
index 1919609..7935fce 100644
--- a/lib/compress.c
+++ b/lib/compress.c
@@ -120,7 +120,7 @@ static int write_uncompressed_block(struct 
z_erofs_vle_compress_ctx *ctx,
        int ret;
        unsigned int count;
 
-       if (!(sbi.requirements & EROFS_REQUIREMENT_LZ4_0PADDING)) {
+       if (!(sbi.feature_incompat & EROFS_FEATURE_INCOMPAT_LZ4_0PADDING)) {
                /* fix up clusterofs to 0 if possable */
                if (ctx->head >= ctx->clusterofs) {
                        ctx->head -= ctx->clusterofs;
@@ -184,7 +184,8 @@ nocompression:
                        erofs_dbg("Writing %u compressed data to block %u",
                                  count, ctx->blkaddr);
 
-                       if (sbi.requirements & EROFS_REQUIREMENT_LZ4_0PADDING)
+                       if (sbi.feature_incompat &
+                           EROFS_FEATURE_INCOMPAT_LZ4_0PADDING)
                                ret = blk_write(dst - (EROFS_BLKSIZ - ret),
                                                ctx->blkaddr, 1);
                        else
@@ -382,7 +383,7 @@ int z_erofs_convert_to_compacted_format(struct erofs_inode 
*inode,
                                              4, logical_clusterbits, true);
        }
        inode->extent_isize = out - (u8 *)inode->compressmeta;
-       inode->data_mapping_mode = EROFS_INODE_FLAT_COMPRESSION;
+       inode->datalayout = EROFS_INODE_FLAT_COMPRESSION;
        return 0;
 }
 
@@ -473,7 +474,7 @@ int erofs_write_compressed_file(struct erofs_inode *inode)
        legacymetasize = ctx.metacur - compressmeta;
        if (cfg.c_legacy_compress) {
                inode->extent_isize = legacymetasize;
-               inode->data_mapping_mode = EROFS_INODE_FLAT_COMPRESSION_LEGACY;
+               inode->datalayout = EROFS_INODE_FLAT_COMPRESSION_LEGACY;
        } else {
                ret = z_erofs_convert_to_compacted_format(inode, blkaddr - 1,
                                                          legacymetasize, 12);
diff --git a/lib/config.c b/lib/config.c
index 2e91b92..9c78142 100644
--- a/lib/config.c
+++ b/lib/config.c
@@ -21,7 +21,7 @@ void erofs_init_configure(void)
        cfg.c_dry_run  = false;
        cfg.c_legacy_compress = false;
        cfg.c_compr_level_master = -1;
-       sbi.requirements = EROFS_REQUIREMENT_LZ4_0PADDING;
+       sbi.feature_incompat = EROFS_FEATURE_INCOMPAT_LZ4_0PADDING;
 }
 
 void erofs_show_config(void)
diff --git a/lib/inode.c b/lib/inode.c
index c8cf847..4e1e29f 100644
--- a/lib/inode.c
+++ b/lib/inode.c
@@ -179,7 +179,7 @@ int erofs_prepare_dir_file(struct erofs_inode *dir)
        dir->i_size = d_size;
 
        /* no compression for all dirs */
-       dir->data_mapping_mode = EROFS_INODE_FLAT_INLINE;
+       dir->datalayout = EROFS_INODE_FLAT_INLINE;
 
        /* allocate dir main data */
        ret = __allocate_inode_bh_data(dir, erofs_blknr(d_size));
@@ -274,7 +274,7 @@ int erofs_write_file_from_buffer(struct erofs_inode *inode, 
char *buf)
        const unsigned int nblocks = erofs_blknr(inode->i_size);
        int ret;
 
-       inode->data_mapping_mode = EROFS_INODE_FLAT_INLINE;
+       inode->datalayout = EROFS_INODE_FLAT_INLINE;
 
        ret = __allocate_inode_bh_data(inode, nblocks);
        if (ret)
@@ -303,7 +303,7 @@ int erofs_write_file(struct erofs_inode *inode)
        int ret, fd;
 
        if (!inode->i_size) {
-               inode->data_mapping_mode = EROFS_INODE_FLAT_PLAIN;
+               inode->datalayout = EROFS_INODE_FLAT_PLAIN;
                return 0;
        }
 
@@ -315,7 +315,7 @@ int erofs_write_file(struct erofs_inode *inode)
        }
 
        /* fallback to all data uncompressed */
-       inode->data_mapping_mode = EROFS_INODE_FLAT_INLINE;
+       inode->datalayout = EROFS_INODE_FLAT_INLINE;
        nblocks = inode->i_size / EROFS_BLKSIZ;
 
        ret = __allocate_inode_bh_data(inode, nblocks);
@@ -366,39 +366,39 @@ static bool erofs_bh_flush_write_inode(struct 
erofs_buffer_head *bh)
        struct erofs_inode *const inode = bh->fsprivate;
        erofs_off_t off = erofs_btell(bh, false);
 
-       /* let's support v1 currently */
-       struct erofs_inode_v1 v1 = {0};
+       /* let's support compact inode currently */
+       struct erofs_inode_compact dic = {0};
        int ret;
 
-       v1.i_advise = cpu_to_le16(0 | (inode->data_mapping_mode << 1));
-       v1.i_mode = cpu_to_le16(inode->i_mode);
-       v1.i_nlink = cpu_to_le16(inode->i_nlink);
-       v1.i_size = cpu_to_le32((u32)inode->i_size);
+       dic.i_format = cpu_to_le16(0 | (inode->datalayout << 1));
+       dic.i_mode = cpu_to_le16(inode->i_mode);
+       dic.i_nlink = cpu_to_le16(inode->i_nlink);
+       dic.i_size = cpu_to_le32((u32)inode->i_size);
 
-       v1.i_ino = cpu_to_le32(inode->i_ino[0]);
+       dic.i_ino = cpu_to_le32(inode->i_ino[0]);
 
-       v1.i_uid = cpu_to_le16((u16)inode->i_uid);
-       v1.i_gid = cpu_to_le16((u16)inode->i_gid);
+       dic.i_uid = cpu_to_le16((u16)inode->i_uid);
+       dic.i_gid = cpu_to_le16((u16)inode->i_gid);
 
        switch ((inode->i_mode) >> S_SHIFT) {
        case S_IFCHR:
        case S_IFBLK:
        case S_IFIFO:
        case S_IFSOCK:
-               v1.i_u.rdev = cpu_to_le32(inode->u.i_rdev);
+               dic.i_u.rdev = cpu_to_le32(inode->u.i_rdev);
                break;
 
        default:
                if (is_inode_layout_compression(inode))
-                       v1.i_u.compressed_blocks =
+                       dic.i_u.compressed_blocks =
                                cpu_to_le32(inode->u.i_blocks);
                else
-                       v1.i_u.raw_blkaddr =
+                       dic.i_u.raw_blkaddr =
                                cpu_to_le32(inode->u.i_blkaddr);
                break;
        }
 
-       ret = dev_write(&v1, off, sizeof(struct erofs_inode_v1));
+       ret = dev_write(&dic, off, sizeof(struct erofs_inode_compact));
        if (ret)
                return false;
        off += inode->inode_isize;
@@ -468,13 +468,13 @@ int erofs_prepare_inode_buffer(struct erofs_inode *inode)
         * should use EROFS_INODE_FLAT_PLAIN data mapping mode.
         */
        if (!inode->idata_size)
-               inode->data_mapping_mode = EROFS_INODE_FLAT_PLAIN;
+               inode->datalayout = EROFS_INODE_FLAT_PLAIN;
 
        bh = erofs_balloc(INODE, inodesize, 0, inode->idata_size);
        if (bh == ERR_PTR(-ENOSPC)) {
                int ret;
 
-               inode->data_mapping_mode = EROFS_INODE_FLAT_PLAIN;
+               inode->datalayout = EROFS_INODE_FLAT_PLAIN;
 noinline:
                /* expend an extra block for tail-end data */
                ret = erofs_prepare_tail_block(inode);
@@ -487,7 +487,7 @@ noinline:
        } else if (IS_ERR(bh)) {
                return PTR_ERR(bh);
        } else if (inode->idata_size) {
-               inode->data_mapping_mode = EROFS_INODE_FLAT_INLINE;
+               inode->datalayout = EROFS_INODE_FLAT_INLINE;
 
                /* allocate inline buffer */
                ibh = erofs_battach(bh, META, inode->idata_size);
@@ -616,7 +616,7 @@ int erofs_fill_inode(struct erofs_inode *inode,
        inode->i_srcpath[sizeof(inode->i_srcpath) - 1] = '\0';
 
        inode->i_ino[1] = st->st_ino;
-       inode->inode_isize = sizeof(struct erofs_inode_v1);
+       inode->inode_isize = sizeof(struct erofs_inode_compact);
 
        list_add(&inode->i_hash,
                 &inode_hashtable[st->st_ino % NR_INODE_HASHTABLE]);
diff --git a/mkfs/main.c b/mkfs/main.c
index 2dfd68e..effc26b 100644
--- a/mkfs/main.c
+++ b/mkfs/main.c
@@ -69,7 +69,8 @@ static int parse_extended_opts(const char *opts)
                                return -EINVAL;
                        /* disable compacted indexes and 0padding */
                        cfg.c_legacy_compress = true;
-                       sbi.requirements &= ~EROFS_REQUIREMENT_LZ4_0PADDING;
+                       sbi.feature_incompat &=
+                               ~EROFS_FEATURE_INCOMPAT_LZ4_0PADDING;
                }
        }
        return 0;
@@ -155,7 +156,7 @@ int erofs_mkfs_update_super_block(struct erofs_buffer_head 
*bh,
                .blocks = 0,
                .meta_blkaddr  = sbi.meta_blkaddr,
                .xattr_blkaddr = 0,
-               .requirements = cpu_to_le32(sbi.requirements),
+               .feature_incompat = cpu_to_le32(sbi.feature_incompat),
        };
        const unsigned int sb_blksize =
                round_up(EROFS_SUPER_END, EROFS_BLKSIZ);
-- 
2.17.1

Reply via email to