erofs-utils: mkfs: add ^{inline_data,ztailpacking,dedupe} options
authorGao Xiang <hsiangkao@linux.alibaba.com>
Mon, 11 Sep 2023 07:18:19 +0000 (15:18 +0800)
committerGao Xiang <hsiangkao@linux.alibaba.com>
Tue, 12 Sep 2023 03:53:50 +0000 (11:53 +0800)
Later, some preset configurations will be added, which could enable
some of these features by default.

Let's add a way to turn each individual off too.

Signed-off-by: Gao Xiang <hsiangkao@linux.alibaba.com>
Link: https://lore.kernel.org/r/20230911071819.3714867-1-hsiangkao@linux.alibaba.com
include/erofs/config.h
lib/inode.c
mkfs/main.c

index c51f0cd07222842da6c2628bb972ea4a00e272b5..5d3bfba87843832121bcbf8fb52305c255a2b31f 100644 (file)
@@ -45,7 +45,7 @@ struct erofs_configure {
 #endif
        char c_timeinherit;
        char c_chunkbits;
-       bool c_noinline_data;
+       bool c_inline_data;
        bool c_ztailpacking;
        bool c_fragments;
        bool c_all_fragments;
index c976be3b9b4c9a140bd14d890bfe65442e96211f..92796c992b299f376382b804a401abdd3f5d3e54 100644 (file)
@@ -651,7 +651,7 @@ static int erofs_prepare_inode_buffer(struct erofs_inode *inode)
                goto noinline;
 
        if (!is_inode_layout_compression(inode)) {
-               if (cfg.c_noinline_data && S_ISREG(inode->i_mode)) {
+               if (!cfg.c_inline_data && S_ISREG(inode->i_mode)) {
                        inode->datalayout = EROFS_INODE_FLAT_PLAIN;
                        goto noinline;
                }
index 607c883a6261ebd03087a3e00bab11b156a3db44..8e3d6eab8b5fbb88485cdb412514c6b01aadd0a5 100644 (file)
@@ -208,7 +208,13 @@ static int parse_extended_opts(const char *opts)
                if (MATCH_EXTENTED_OPT("noinline_data", token, keylen)) {
                        if (vallen)
                                return -EINVAL;
-                       cfg.c_noinline_data = true;
+                       cfg.c_inline_data = false;
+               }
+
+               if (MATCH_EXTENTED_OPT("inline_data", token, keylen)) {
+                       if (vallen)
+                               return -EINVAL;
+                       cfg.c_inline_data = !clear;
                }
 
                if (MATCH_EXTENTED_OPT("force-inode-blockmap", token, keylen)) {
@@ -226,7 +232,7 @@ static int parse_extended_opts(const char *opts)
                if (MATCH_EXTENTED_OPT("ztailpacking", token, keylen)) {
                        if (vallen)
                                return -EINVAL;
-                       cfg.c_ztailpacking = true;
+                       cfg.c_ztailpacking = !clear;
                }
 
                if (MATCH_EXTENTED_OPT("all-fragments", token, keylen)) {
@@ -254,7 +260,7 @@ handle_fragment:
                if (MATCH_EXTENTED_OPT("dedupe", token, keylen)) {
                        if (vallen)
                                return -EINVAL;
-                       cfg.c_dedupe = true;
+                       cfg.c_dedupe = !clear;
                }
 
                if (MATCH_EXTENTED_OPT("xattr-name-filter", token, keylen)) {
@@ -706,6 +712,7 @@ static void erofs_mkfs_default_options(void)
 {
        cfg.c_showprogress = true;
        cfg.c_legacy_compress = false;
+       cfg.c_inline_data = true;
        cfg.c_xattr_name_filter = true;
        sbi.blkszbits = ilog2(min_t(u32, getpagesize(), EROFS_MAX_BLOCK_SIZE));
        sbi.feature_incompat = EROFS_FEATURE_INCOMPAT_ZERO_PADDING;