[PATCH] erofs-utils: mkfs: error return if meets an unknown extended option

Yifan Zhao zhaoyifan at sjtu.edu.cn
Sat Sep 9 22:36:50 AEST 2023


Currently mkfs would ignore any unknown extended option, which keeps
silent if a mistyped option is given. Return failure in this case allows
users to catch their errors more easily.
---
 mkfs/main.c | 27 ++++++++++++++++-----------
 1 file changed, 16 insertions(+), 11 deletions(-)

diff --git a/mkfs/main.c b/mkfs/main.c
index 607c883..4caf267 100644
--- a/mkfs/main.c
+++ b/mkfs/main.c
@@ -186,55 +186,55 @@ static int parse_extended_opts(const char *opts)
 			cfg.c_legacy_compress = true;
 		}
 
-		if (MATCH_EXTENTED_OPT("force-inode-compact", token, keylen)) {
+		else if (MATCH_EXTENTED_OPT("force-inode-compact", token, keylen)) {
 			if (vallen)
 				return -EINVAL;
 			cfg.c_force_inodeversion = FORCE_INODE_COMPACT;
 			cfg.c_ignore_mtime = true;
 		}
 
-		if (MATCH_EXTENTED_OPT("force-inode-extended", token, keylen)) {
+		else if (MATCH_EXTENTED_OPT("force-inode-extended", token, keylen)) {
 			if (vallen)
 				return -EINVAL;
 			cfg.c_force_inodeversion = FORCE_INODE_EXTENDED;
 		}
 
-		if (MATCH_EXTENTED_OPT("nosbcrc", token, keylen)) {
+		else if (MATCH_EXTENTED_OPT("nosbcrc", token, keylen)) {
 			if (vallen)
 				return -EINVAL;
 			erofs_sb_clear_sb_chksum(&sbi);
 		}
 
-		if (MATCH_EXTENTED_OPT("noinline_data", token, keylen)) {
+		else if (MATCH_EXTENTED_OPT("noinline_data", token, keylen)) {
 			if (vallen)
 				return -EINVAL;
 			cfg.c_noinline_data = true;
 		}
 
-		if (MATCH_EXTENTED_OPT("force-inode-blockmap", token, keylen)) {
+		else if (MATCH_EXTENTED_OPT("force-inode-blockmap", token, keylen)) {
 			if (vallen)
 				return -EINVAL;
 			cfg.c_force_chunkformat = FORCE_INODE_BLOCK_MAP;
 		}
 
-		if (MATCH_EXTENTED_OPT("force-chunk-indexes", token, keylen)) {
+		else if (MATCH_EXTENTED_OPT("force-chunk-indexes", token, keylen)) {
 			if (vallen)
 				return -EINVAL;
 			cfg.c_force_chunkformat = FORCE_INODE_CHUNK_INDEXES;
 		}
 
-		if (MATCH_EXTENTED_OPT("ztailpacking", token, keylen)) {
+		else if (MATCH_EXTENTED_OPT("ztailpacking", token, keylen)) {
 			if (vallen)
 				return -EINVAL;
 			cfg.c_ztailpacking = true;
 		}
 
-		if (MATCH_EXTENTED_OPT("all-fragments", token, keylen)) {
+		else if (MATCH_EXTENTED_OPT("all-fragments", token, keylen)) {
 			cfg.c_all_fragments = true;
 			goto handle_fragment;
 		}
 
-		if (MATCH_EXTENTED_OPT("fragments", token, keylen)) {
+		else if (MATCH_EXTENTED_OPT("fragments", token, keylen)) {
 			char *endptr;
 			u64 i;
 
@@ -251,17 +251,22 @@ handle_fragment:
 			}
 		}
 
-		if (MATCH_EXTENTED_OPT("dedupe", token, keylen)) {
+		else if (MATCH_EXTENTED_OPT("dedupe", token, keylen)) {
 			if (vallen)
 				return -EINVAL;
 			cfg.c_dedupe = true;
 		}
 
-		if (MATCH_EXTENTED_OPT("xattr-name-filter", token, keylen)) {
+		else if (MATCH_EXTENTED_OPT("xattr-name-filter", token, keylen)) {
 			if (vallen)
 				return -EINVAL;
 			cfg.c_xattr_name_filter = !clear;
 		}
+
+		else {
+			erofs_err("unknown extended option %s", token);
+			return -EINVAL;
+		}
 	}
 	return 0;
 }
-- 
2.42.0



More information about the Linux-erofs mailing list