From: kernel test robot <lkp@intel.com>
To: Eric Sandeen <sandeen@redhat.com>,
linux-f2fs-devel@lists.sourceforge.net
Cc: Eric Sandeen <sandeen@redhat.com>,
llvm@lists.linux.dev, lihongbo22@huawei.com,
oe-kbuild-all@lists.linux.dev, linux-fsdevel@vger.kernel.org,
jaegeuk@kernel.org
Subject: Re: [f2fs-dev] [PATCH 5/7] f2fs: separate the options parsing and options checking
Date: Tue, 22 Apr 2025 01:37:43 +0800 [thread overview]
Message-ID: <202504220117.vULD83Cm-lkp@intel.com> (raw)
In-Reply-To: <20250420154647.1233033-6-sandeen@redhat.com>
Hi Eric,
kernel test robot noticed the following build warnings:
[auto build test WARNING on v6.15-rc3]
[also build test WARNING on linus/master]
[cannot apply to jaegeuk-f2fs/dev-test jaegeuk-f2fs/dev next-20250417]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch#_base_tree_information]
url: https://github.com/intel-lab-lkp/linux/commits/Eric-Sandeen/f2fs-Add-fs-parameter-specifications-for-mount-options/20250421-220156
base: v6.15-rc3
patch link: https://lore.kernel.org/r/20250420154647.1233033-6-sandeen%40redhat.com
patch subject: [PATCH 5/7] f2fs: separate the options parsing and options checking
config: i386-buildonly-randconfig-003-20250421 (https://download.01.org/0day-ci/archive/20250422/202504220117.vULD83Cm-lkp@intel.com/config)
compiler: clang version 20.1.2 (https://github.com/llvm/llvm-project 58df0ef89dd64126512e4ee27b4ac3fd8ddf6247)
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20250422/202504220117.vULD83Cm-lkp@intel.com/reproduce)
If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@intel.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202504220117.vULD83Cm-lkp@intel.com/
All warnings (new ones prefixed by >>):
>> fs/f2fs/super.c:764:5: warning: format specifies type 'unsigned long' but the argument has type 'unsigned int' [-Wformat]
763 | f2fs_err(NULL, "inline xattr size is out of range: %lu ~ %lu",
| ~~~
| %u
764 | MIN_INLINE_XATTR_SIZE, MAX_INLINE_XATTR_SIZE);
| ^~~~~~~~~~~~~~~~~~~~~
fs/f2fs/f2fs.h:1871:42: note: expanded from macro 'f2fs_err'
1871 | f2fs_printk(sbi, false, KERN_ERR fmt, ##__VA_ARGS__)
| ~~~ ^~~~~~~~~~~
fs/f2fs/xattr.h:86:31: note: expanded from macro 'MIN_INLINE_XATTR_SIZE'
86 | #define MIN_INLINE_XATTR_SIZE (sizeof(struct f2fs_xattr_header) / sizeof(__le32))
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
fs/f2fs/super.c:964:8: warning: variable 'arg' is used uninitialized whenever '&&' condition is false [-Wsometimes-uninitialized]
964 | if (args->from && match_int(args, &arg))
| ^~~~~~~~~~
fs/f2fs/super.c:966:8: note: uninitialized use occurs here
966 | if (arg < 0 || arg > 100)
| ^~~
fs/f2fs/super.c:964:8: note: remove the '&&' if its condition is always true
964 | if (args->from && match_int(args, &arg))
| ^~~~~~~~~~~~~
fs/f2fs/super.c:719:21: note: initialize the variable 'arg' to silence this warning
719 | int token, ret, arg;
| ^
| = 0
fs/f2fs/super.c:1285:20: error: use of undeclared identifier 'sbi'
1285 | if (f2fs_readonly(sbi->sb))
| ^
fs/f2fs/super.c:1287:28: error: use of undeclared identifier 'sbi'; did you mean 'sb'?
1287 | if (f2fs_sb_has_quota_ino(sbi)) {
| ^~~
| sb
fs/f2fs/super.c:1187:26: note: 'sb' declared here
1187 | struct super_block *sb)
| ^
fs/f2fs/super.c:1288:13: error: use of undeclared identifier 'sbi'; did you mean 'sb'?
1288 | f2fs_info(sbi, "Filesystem with quota feature cannot be mounted RDWR without CONFIG_QUOTA");
| ^~~
| sb
fs/f2fs/f2fs.h:1877:14: note: expanded from macro 'f2fs_info'
1877 | f2fs_printk(sbi, false, KERN_INFO fmt, ##__VA_ARGS__)
| ^
fs/f2fs/super.c:1187:26: note: 'sb' declared here
1187 | struct super_block *sb)
| ^
fs/f2fs/super.c:1291:32: error: use of undeclared identifier 'sbi'; did you mean 'sb'?
1291 | if (f2fs_sb_has_project_quota(sbi)) {
| ^~~
| sb
fs/f2fs/super.c:1187:26: note: 'sb' declared here
1187 | struct super_block *sb)
| ^
fs/f2fs/super.c:1292:12: error: use of undeclared identifier 'sbi'; did you mean 'sb'?
1292 | f2fs_err(sbi, "Filesystem with project quota feature cannot be mounted RDWR without CONFIG_QUOTA");
| ^~~
| sb
fs/f2fs/f2fs.h:1871:14: note: expanded from macro 'f2fs_err'
1871 | f2fs_printk(sbi, false, KERN_ERR fmt, ##__VA_ARGS__)
| ^
fs/f2fs/super.c:1187:26: note: 'sb' declared here
1187 | struct super_block *sb)
| ^
2 warnings and 5 errors generated.
vim +764 fs/f2fs/super.c
707
708 static int handle_mount_opt(struct fs_context *fc, struct fs_parameter *param)
709 {
710 struct f2fs_fs_context *ctx = fc->fs_private;
711 #ifdef CONFIG_F2FS_FS_COMPRESSION
712 unsigned char (*ext)[F2FS_EXTENSION_LEN];
713 unsigned char (*noext)[F2FS_EXTENSION_LEN];
714 int ext_cnt, noext_cnt;
715 #endif
716 substring_t args[MAX_OPT_ARGS];
717 struct fs_parse_result result;
718 char *name;
719 int token, ret, arg;
720
721 token = fs_parse(fc, f2fs_param_specs, param, &result);
722 if (token < 0)
723 return token;
724
725 switch (token) {
726 case Opt_gc_background:
727 F2FS_CTX_INFO(ctx).bggc_mode = result.uint_32;
728 ctx->spec_mask |= F2FS_SPEC_background_gc;
729 break;
730 case Opt_disable_roll_forward:
731 ctx_set_opt(ctx, F2FS_MOUNT_DISABLE_ROLL_FORWARD);
732 break;
733 case Opt_norecovery:
734 /* requires ro mount, checked in f2fs_validate_options */
735 ctx_set_opt(ctx, F2FS_MOUNT_NORECOVERY);
736 break;
737 case Opt_discard:
738 if (result.negated)
739 ctx_clear_opt(ctx, F2FS_MOUNT_DISCARD);
740 else
741 ctx_set_opt(ctx, F2FS_MOUNT_DISCARD);
742 break;
743 case Opt_noheap:
744 case Opt_heap:
745 f2fs_warn(NULL, "heap/no_heap options were deprecated");
746 break;
747 #ifdef CONFIG_F2FS_FS_XATTR
748 case Opt_user_xattr:
749 if (result.negated)
750 ctx_clear_opt(ctx, F2FS_MOUNT_XATTR_USER);
751 else
752 ctx_set_opt(ctx, F2FS_MOUNT_XATTR_USER);
753 break;
754 case Opt_inline_xattr:
755 if (result.negated)
756 ctx_clear_opt(ctx, F2FS_MOUNT_INLINE_XATTR);
757 else
758 ctx_set_opt(ctx, F2FS_MOUNT_INLINE_XATTR);
759 break;
760 case Opt_inline_xattr_size:
761 if (result.int_32 < MIN_INLINE_XATTR_SIZE ||
762 result.int_32 > MAX_INLINE_XATTR_SIZE) {
763 f2fs_err(NULL, "inline xattr size is out of range: %lu ~ %lu",
> 764 MIN_INLINE_XATTR_SIZE, MAX_INLINE_XATTR_SIZE);
765 return -EINVAL;
766 }
767 ctx_set_opt(ctx, F2FS_MOUNT_INLINE_XATTR_SIZE);
768 F2FS_CTX_INFO(ctx).inline_xattr_size = result.int_32;
769 ctx->spec_mask |= F2FS_SPEC_inline_xattr_size;
770 break;
771 #else
772 case Opt_user_xattr:
773 case Opt_inline_xattr:
774 case Opt_inline_xattr_size:
775 f2fs_info(NULL, "%s options not supported", param->key);
776 break;
777 #endif
778 #ifdef CONFIG_F2FS_FS_POSIX_ACL
779 case Opt_acl:
780 if (result.negated)
781 ctx_clear_opt(ctx, F2FS_MOUNT_POSIX_ACL);
782 else
783 ctx_set_opt(ctx, F2FS_MOUNT_POSIX_ACL);
784 break;
785 #else
786 case Opt_acl:
787 f2fs_info(NULL, "%s options not supported", param->key);
788 break;
789 #endif
790 case Opt_active_logs:
791 if (result.int_32 != 2 && result.int_32 != 4 &&
792 result.int_32 != NR_CURSEG_PERSIST_TYPE)
793 return -EINVAL;
794 ctx->spec_mask |= F2FS_SPEC_active_logs;
795 F2FS_CTX_INFO(ctx).active_logs = result.int_32;
796 break;
797 case Opt_disable_ext_identify:
798 ctx_set_opt(ctx, F2FS_MOUNT_DISABLE_EXT_IDENTIFY);
799 break;
800 case Opt_inline_data:
801 if (result.negated)
802 ctx_clear_opt(ctx, F2FS_MOUNT_INLINE_DATA);
803 else
804 ctx_set_opt(ctx, F2FS_MOUNT_INLINE_DATA);
805 break;
806 case Opt_inline_dentry:
807 if (result.negated)
808 ctx_clear_opt(ctx, F2FS_MOUNT_INLINE_DENTRY);
809 else
810 ctx_set_opt(ctx, F2FS_MOUNT_INLINE_DENTRY);
811 break;
812 case Opt_flush_merge:
813 if (result.negated)
814 ctx_clear_opt(ctx, F2FS_MOUNT_FLUSH_MERGE);
815 else
816 ctx_set_opt(ctx, F2FS_MOUNT_FLUSH_MERGE);
817 break;
818 case Opt_barrier:
819 if (result.negated)
820 ctx_set_opt(ctx, F2FS_MOUNT_NOBARRIER);
821 else
822 ctx_clear_opt(ctx, F2FS_MOUNT_NOBARRIER);
823 break;
824 case Opt_fastboot:
825 ctx_set_opt(ctx, F2FS_MOUNT_FASTBOOT);
826 break;
827 case Opt_extent_cache:
828 if (result.negated)
829 ctx_clear_opt(ctx, F2FS_MOUNT_READ_EXTENT_CACHE);
830 else
831 ctx_set_opt(ctx, F2FS_MOUNT_READ_EXTENT_CACHE);
832 break;
833 case Opt_data_flush:
834 ctx_set_opt(ctx, F2FS_MOUNT_DATA_FLUSH);
835 break;
836 case Opt_reserve_root:
837 ctx_set_opt(ctx, F2FS_MOUNT_RESERVE_ROOT);
838 F2FS_CTX_INFO(ctx).root_reserved_blocks = result.uint_32;
839 ctx->spec_mask |= F2FS_SPEC_reserve_root;
840 break;
841 case Opt_resuid:
842 F2FS_CTX_INFO(ctx).s_resuid = result.uid;
843 ctx->spec_mask |= F2FS_SPEC_resuid;
844 break;
845 case Opt_resgid:
846 F2FS_CTX_INFO(ctx).s_resgid = result.gid;
847 ctx->spec_mask |= F2FS_SPEC_resgid;
848 break;
849 case Opt_mode:
850 F2FS_CTX_INFO(ctx).fs_mode = result.uint_32;
851 ctx->spec_mask |= F2FS_SPEC_mode;
852 break;
853 #ifdef CONFIG_F2FS_FAULT_INJECTION
854 case Opt_fault_injection:
855 if (result.int_32 > INT_MAX)
856 return -EINVAL;
857 F2FS_CTX_INFO(ctx).fault_info.inject_rate = result.int_32;
858 ctx->spec_mask |= F2FS_SPEC_fault_injection;
859 ctx_set_opt(ctx, F2FS_MOUNT_FAULT_INJECTION);
860 break;
861
862 case Opt_fault_type:
863 if (result.uint_32 > BIT(FAULT_MAX))
864 return -EINVAL;
865 F2FS_CTX_INFO(ctx).fault_info.inject_type = result.uint_32;
866 ctx->spec_mask |= F2FS_SPEC_fault_type;
867 ctx_set_opt(ctx, F2FS_MOUNT_FAULT_INJECTION);
868 break;
869 #else
870 case Opt_fault_injection:
871 case Opt_fault_type:
872 f2fs_info(NULL, "%s options not supported", param->key);
873 break;
874 #endif
875 case Opt_lazytime:
876 if (result.negated)
877 ctx_clear_opt(ctx, F2FS_MOUNT_LAZYTIME);
878 else
879 ctx_set_opt(ctx, F2FS_MOUNT_LAZYTIME);
880 break;
881 #ifdef CONFIG_QUOTA
882 case Opt_quota:
883 if (result.negated) {
884 ctx_clear_opt(ctx, F2FS_MOUNT_QUOTA);
885 ctx_clear_opt(ctx, F2FS_MOUNT_USRQUOTA);
886 ctx_clear_opt(ctx, F2FS_MOUNT_GRPQUOTA);
887 ctx_clear_opt(ctx, F2FS_MOUNT_PRJQUOTA);
888 } else
889 ctx_set_opt(ctx, F2FS_MOUNT_USRQUOTA);
890 break;
891 case Opt_usrquota:
892 ctx_set_opt(ctx, F2FS_MOUNT_USRQUOTA);
893 break;
894 case Opt_grpquota:
895 ctx_set_opt(ctx, F2FS_MOUNT_GRPQUOTA);
896 break;
897 case Opt_prjquota:
898 ctx_set_opt(ctx, F2FS_MOUNT_PRJQUOTA);
899 break;
900 case Opt_usrjquota:
901 if (!*param->string)
902 ret = f2fs_unnote_qf_name(fc, USRQUOTA);
903 else
904 ret = f2fs_note_qf_name(fc, USRQUOTA, param);
905 if (ret)
906 return ret;
907 break;
908 case Opt_grpjquota:
909 if (!*param->string)
910 ret = f2fs_unnote_qf_name(fc, GRPQUOTA);
911 else
912 ret = f2fs_note_qf_name(fc, GRPQUOTA, param);
913 if (ret)
914 return ret;
915 break;
916 case Opt_prjjquota:
917 if (!*param->string)
918 ret = f2fs_unnote_qf_name(fc, PRJQUOTA);
919 else
920 ret = f2fs_note_qf_name(fc, PRJQUOTA, param);
921 if (ret)
922 return ret;
923 break;
924 case Opt_jqfmt:
925 F2FS_CTX_INFO(ctx).s_jquota_fmt = result.int_32;
926 ctx->spec_mask |= F2FS_SPEC_jqfmt;
927 break;
928 #else
929 case Opt_quota:
930 case Opt_usrquota:
931 case Opt_grpquota:
932 case Opt_prjquota:
933 case Opt_usrjquota:
934 case Opt_grpjquota:
935 case Opt_prjjquota:
936 f2fs_info(NULL, "quota operations not supported");
937 break;
938 #endif
939 case Opt_alloc:
940 F2FS_CTX_INFO(ctx).alloc_mode = result.uint_32;
941 ctx->spec_mask |= F2FS_SPEC_alloc_mode;
942 break;
943 case Opt_fsync:
944 F2FS_CTX_INFO(ctx).fsync_mode = result.uint_32;
945 ctx->spec_mask |= F2FS_SPEC_fsync_mode;
946 break;
947 case Opt_test_dummy_encryption:
948 ret = f2fs_parse_test_dummy_encryption(param, ctx);
949 if (ret)
950 return ret;
951 break;
952 case Opt_inlinecrypt:
953 #ifdef CONFIG_FS_ENCRYPTION_INLINE_CRYPT
954 ctx_set_opt(ctx, F2FS_MOUNT_INLINECRYPT);
955 #else
956 f2fs_info(NULL, "inline encryption not supported");
957 #endif
958 break;
959 case Opt_checkpoint:
960 /* revert to match_table for checkpoint= options */
961 token = match_token(param->string, f2fs_checkpoint_tokens, args);
962 switch (token) {
963 case Opt_checkpoint_disable_cap_perc:
964 if (args->from && match_int(args, &arg))
965 return -EINVAL;
966 if (arg < 0 || arg > 100)
967 return -EINVAL;
968 F2FS_CTX_INFO(ctx).unusable_cap_perc = arg;
969 ctx->spec_mask |= F2FS_SPEC_checkpoint_disable_cap_perc;
970 ctx_set_opt(ctx, F2FS_MOUNT_DISABLE_CHECKPOINT);
971 break;
972 case Opt_checkpoint_disable_cap:
973 if (args->from && match_int(args, &arg))
974 return -EINVAL;
975 F2FS_CTX_INFO(ctx).unusable_cap = arg;
976 ctx->spec_mask |= F2FS_SPEC_checkpoint_disable_cap;
977 ctx_set_opt(ctx, F2FS_MOUNT_DISABLE_CHECKPOINT);
978 break;
979 case Opt_checkpoint_disable:
980 ctx_set_opt(ctx, F2FS_MOUNT_DISABLE_CHECKPOINT);
981 break;
982 case Opt_checkpoint_enable:
983 ctx_clear_opt(ctx, F2FS_MOUNT_DISABLE_CHECKPOINT);
984 break;
985 default:
986 return -EINVAL;
987 }
988 break;
989 case Opt_checkpoint_merge:
990 if (result.negated)
991 ctx_clear_opt(ctx, F2FS_MOUNT_MERGE_CHECKPOINT);
992 else
993 ctx_set_opt(ctx, F2FS_MOUNT_MERGE_CHECKPOINT);
994 break;
995 #ifdef CONFIG_F2FS_FS_COMPRESSION
996 case Opt_compress_algorithm:
997 name = param->string;
998 if (!strcmp(name, "lzo")) {
999 #ifdef CONFIG_F2FS_FS_LZO
1000 F2FS_CTX_INFO(ctx).compress_level = 0;
1001 F2FS_CTX_INFO(ctx).compress_algorithm = COMPRESS_LZO;
1002 ctx->spec_mask |= F2FS_SPEC_compress_level;
1003 ctx->spec_mask |= F2FS_SPEC_compress_algorithm;
1004 #else
1005 f2fs_info(NULL, "kernel doesn't support lzo compression");
1006 #endif
1007 } else if (!strncmp(name, "lz4", 3)) {
1008 #ifdef CONFIG_F2FS_FS_LZ4
1009 ret = f2fs_set_lz4hc_level(ctx, name);
1010 if (ret)
1011 return -EINVAL;
1012 F2FS_CTX_INFO(ctx).compress_algorithm = COMPRESS_LZ4;
1013 ctx->spec_mask |= F2FS_SPEC_compress_algorithm;
1014 #else
1015 f2fs_info(NULL, "kernel doesn't support lz4 compression");
1016 #endif
1017 } else if (!strncmp(name, "zstd", 4)) {
1018 #ifdef CONFIG_F2FS_FS_ZSTD
1019 ret = f2fs_set_zstd_level(ctx, name);
1020 if (ret)
1021 return -EINVAL;
1022 F2FS_CTX_INFO(ctx).compress_algorithm = COMPRESS_ZSTD;
1023 ctx->spec_mask |= F2FS_SPEC_compress_algorithm;
1024 #else
1025 f2fs_info(NULL, "kernel doesn't support zstd compression");
1026 #endif
1027 } else if (!strcmp(name, "lzo-rle")) {
1028 #ifdef CONFIG_F2FS_FS_LZORLE
1029 F2FS_CTX_INFO(ctx).compress_level = 0;
1030 F2FS_CTX_INFO(ctx).compress_algorithm = COMPRESS_LZORLE;
1031 ctx->spec_mask |= F2FS_SPEC_compress_level;
1032 ctx->spec_mask |= F2FS_SPEC_compress_algorithm;
1033 #else
1034 f2fs_info(NULL, "kernel doesn't support lzorle compression");
1035 #endif
1036 } else
1037 return -EINVAL;
1038 break;
1039 case Opt_compress_log_size:
1040 if (result.uint_32 < MIN_COMPRESS_LOG_SIZE ||
1041 result.uint_32 > MAX_COMPRESS_LOG_SIZE) {
1042 f2fs_err(NULL,
1043 "Compress cluster log size is out of range");
1044 return -EINVAL;
1045 }
1046 F2FS_CTX_INFO(ctx).compress_log_size = result.uint_32;
1047 ctx->spec_mask |= F2FS_SPEC_compress_log_size;
1048 break;
1049 case Opt_compress_extension:
1050 name = param->string;
1051 ext = F2FS_CTX_INFO(ctx).extensions;
1052 ext_cnt = F2FS_CTX_INFO(ctx).compress_ext_cnt;
1053
1054 if (strlen(name) >= F2FS_EXTENSION_LEN ||
1055 ext_cnt >= COMPRESS_EXT_NUM) {
1056 f2fs_err(NULL, "invalid extension length/number");
1057 return -EINVAL;
1058 }
1059
1060 if (is_compress_extension_exist(&ctx->info, name, true))
1061 break;
1062
1063 ret = strscpy(ext[ext_cnt], name, F2FS_EXTENSION_LEN);
1064 if (ret < 0)
1065 return ret;
1066 F2FS_CTX_INFO(ctx).compress_ext_cnt++;
1067 ctx->spec_mask |= F2FS_SPEC_compress_extension;
1068 break;
1069 case Opt_nocompress_extension:
1070 name = param->string;
1071 noext = F2FS_CTX_INFO(ctx).noextensions;
1072 noext_cnt = F2FS_CTX_INFO(ctx).nocompress_ext_cnt;
1073
1074 if (strlen(name) >= F2FS_EXTENSION_LEN ||
1075 noext_cnt >= COMPRESS_EXT_NUM) {
1076 f2fs_err(NULL, "invalid extension length/number");
1077 return -EINVAL;
1078 }
1079
1080 if (is_compress_extension_exist(&ctx->info, name, false))
1081 break;
1082
1083 ret = strscpy(noext[noext_cnt], name, F2FS_EXTENSION_LEN);
1084 if (ret < 0)
1085 return ret;
1086 F2FS_CTX_INFO(ctx).nocompress_ext_cnt++;
1087 ctx->spec_mask |= F2FS_SPEC_nocompress_extension;
1088 break;
1089 case Opt_compress_chksum:
1090 F2FS_CTX_INFO(ctx).compress_chksum = true;
1091 ctx->spec_mask |= F2FS_SPEC_compress_chksum;
1092 break;
1093 case Opt_compress_mode:
1094 F2FS_CTX_INFO(ctx).compress_mode = result.uint_32;
1095 ctx->spec_mask |= F2FS_SPEC_compress_mode;
1096 break;
1097 case Opt_compress_cache:
1098 ctx_set_opt(ctx, F2FS_MOUNT_COMPRESS_CACHE);
1099 break;
1100 #else
1101 case Opt_compress_algorithm:
1102 case Opt_compress_log_size:
1103 case Opt_compress_extension:
1104 case Opt_nocompress_extension:
1105 case Opt_compress_chksum:
1106 case Opt_compress_mode:
1107 case Opt_compress_cache:
1108 f2fs_info(NULL, "compression options not supported");
1109 break;
1110 #endif
1111 case Opt_atgc:
1112 ctx_set_opt(ctx, F2FS_MOUNT_ATGC);
1113 break;
1114 case Opt_gc_merge:
1115 if (result.negated)
1116 ctx_clear_opt(ctx, F2FS_MOUNT_GC_MERGE);
1117 else
1118 ctx_set_opt(ctx, F2FS_MOUNT_GC_MERGE);
1119 break;
1120 case Opt_discard_unit:
1121 F2FS_CTX_INFO(ctx).discard_unit = result.uint_32;
1122 ctx->spec_mask |= F2FS_SPEC_discard_unit;
1123 break;
1124 case Opt_memory_mode:
1125 F2FS_CTX_INFO(ctx).memory_mode = result.uint_32;
1126 ctx->spec_mask |= F2FS_SPEC_memory_mode;
1127 break;
1128 case Opt_age_extent_cache:
1129 ctx_set_opt(ctx, F2FS_MOUNT_AGE_EXTENT_CACHE);
1130 break;
1131 case Opt_errors:
1132 F2FS_CTX_INFO(ctx).errors = result.uint_32;
1133 ctx->spec_mask |= F2FS_SPEC_errors;
1134 break;
1135 case Opt_nat_bits:
1136 ctx_set_opt(ctx, F2FS_MOUNT_NAT_BITS);
1137 break;
1138 }
1139 return 0;
1140 }
1141
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
_______________________________________________
Linux-f2fs-devel mailing list
Linux-f2fs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel
WARNING: multiple messages have this Message-ID (diff)
From: kernel test robot <lkp@intel.com>
To: Eric Sandeen <sandeen@redhat.com>,
linux-f2fs-devel@lists.sourceforge.net
Cc: llvm@lists.linux.dev, oe-kbuild-all@lists.linux.dev,
linux-fsdevel@vger.kernel.org, jaegeuk@kernel.org,
chao@kernel.org, lihongbo22@huawei.com,
Eric Sandeen <sandeen@redhat.com>
Subject: Re: [PATCH 5/7] f2fs: separate the options parsing and options checking
Date: Tue, 22 Apr 2025 01:37:43 +0800 [thread overview]
Message-ID: <202504220117.vULD83Cm-lkp@intel.com> (raw)
In-Reply-To: <20250420154647.1233033-6-sandeen@redhat.com>
Hi Eric,
kernel test robot noticed the following build warnings:
[auto build test WARNING on v6.15-rc3]
[also build test WARNING on linus/master]
[cannot apply to jaegeuk-f2fs/dev-test jaegeuk-f2fs/dev next-20250417]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch#_base_tree_information]
url: https://github.com/intel-lab-lkp/linux/commits/Eric-Sandeen/f2fs-Add-fs-parameter-specifications-for-mount-options/20250421-220156
base: v6.15-rc3
patch link: https://lore.kernel.org/r/20250420154647.1233033-6-sandeen%40redhat.com
patch subject: [PATCH 5/7] f2fs: separate the options parsing and options checking
config: i386-buildonly-randconfig-003-20250421 (https://download.01.org/0day-ci/archive/20250422/202504220117.vULD83Cm-lkp@intel.com/config)
compiler: clang version 20.1.2 (https://github.com/llvm/llvm-project 58df0ef89dd64126512e4ee27b4ac3fd8ddf6247)
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20250422/202504220117.vULD83Cm-lkp@intel.com/reproduce)
If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@intel.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202504220117.vULD83Cm-lkp@intel.com/
All warnings (new ones prefixed by >>):
>> fs/f2fs/super.c:764:5: warning: format specifies type 'unsigned long' but the argument has type 'unsigned int' [-Wformat]
763 | f2fs_err(NULL, "inline xattr size is out of range: %lu ~ %lu",
| ~~~
| %u
764 | MIN_INLINE_XATTR_SIZE, MAX_INLINE_XATTR_SIZE);
| ^~~~~~~~~~~~~~~~~~~~~
fs/f2fs/f2fs.h:1871:42: note: expanded from macro 'f2fs_err'
1871 | f2fs_printk(sbi, false, KERN_ERR fmt, ##__VA_ARGS__)
| ~~~ ^~~~~~~~~~~
fs/f2fs/xattr.h:86:31: note: expanded from macro 'MIN_INLINE_XATTR_SIZE'
86 | #define MIN_INLINE_XATTR_SIZE (sizeof(struct f2fs_xattr_header) / sizeof(__le32))
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
fs/f2fs/super.c:964:8: warning: variable 'arg' is used uninitialized whenever '&&' condition is false [-Wsometimes-uninitialized]
964 | if (args->from && match_int(args, &arg))
| ^~~~~~~~~~
fs/f2fs/super.c:966:8: note: uninitialized use occurs here
966 | if (arg < 0 || arg > 100)
| ^~~
fs/f2fs/super.c:964:8: note: remove the '&&' if its condition is always true
964 | if (args->from && match_int(args, &arg))
| ^~~~~~~~~~~~~
fs/f2fs/super.c:719:21: note: initialize the variable 'arg' to silence this warning
719 | int token, ret, arg;
| ^
| = 0
fs/f2fs/super.c:1285:20: error: use of undeclared identifier 'sbi'
1285 | if (f2fs_readonly(sbi->sb))
| ^
fs/f2fs/super.c:1287:28: error: use of undeclared identifier 'sbi'; did you mean 'sb'?
1287 | if (f2fs_sb_has_quota_ino(sbi)) {
| ^~~
| sb
fs/f2fs/super.c:1187:26: note: 'sb' declared here
1187 | struct super_block *sb)
| ^
fs/f2fs/super.c:1288:13: error: use of undeclared identifier 'sbi'; did you mean 'sb'?
1288 | f2fs_info(sbi, "Filesystem with quota feature cannot be mounted RDWR without CONFIG_QUOTA");
| ^~~
| sb
fs/f2fs/f2fs.h:1877:14: note: expanded from macro 'f2fs_info'
1877 | f2fs_printk(sbi, false, KERN_INFO fmt, ##__VA_ARGS__)
| ^
fs/f2fs/super.c:1187:26: note: 'sb' declared here
1187 | struct super_block *sb)
| ^
fs/f2fs/super.c:1291:32: error: use of undeclared identifier 'sbi'; did you mean 'sb'?
1291 | if (f2fs_sb_has_project_quota(sbi)) {
| ^~~
| sb
fs/f2fs/super.c:1187:26: note: 'sb' declared here
1187 | struct super_block *sb)
| ^
fs/f2fs/super.c:1292:12: error: use of undeclared identifier 'sbi'; did you mean 'sb'?
1292 | f2fs_err(sbi, "Filesystem with project quota feature cannot be mounted RDWR without CONFIG_QUOTA");
| ^~~
| sb
fs/f2fs/f2fs.h:1871:14: note: expanded from macro 'f2fs_err'
1871 | f2fs_printk(sbi, false, KERN_ERR fmt, ##__VA_ARGS__)
| ^
fs/f2fs/super.c:1187:26: note: 'sb' declared here
1187 | struct super_block *sb)
| ^
2 warnings and 5 errors generated.
vim +764 fs/f2fs/super.c
707
708 static int handle_mount_opt(struct fs_context *fc, struct fs_parameter *param)
709 {
710 struct f2fs_fs_context *ctx = fc->fs_private;
711 #ifdef CONFIG_F2FS_FS_COMPRESSION
712 unsigned char (*ext)[F2FS_EXTENSION_LEN];
713 unsigned char (*noext)[F2FS_EXTENSION_LEN];
714 int ext_cnt, noext_cnt;
715 #endif
716 substring_t args[MAX_OPT_ARGS];
717 struct fs_parse_result result;
718 char *name;
719 int token, ret, arg;
720
721 token = fs_parse(fc, f2fs_param_specs, param, &result);
722 if (token < 0)
723 return token;
724
725 switch (token) {
726 case Opt_gc_background:
727 F2FS_CTX_INFO(ctx).bggc_mode = result.uint_32;
728 ctx->spec_mask |= F2FS_SPEC_background_gc;
729 break;
730 case Opt_disable_roll_forward:
731 ctx_set_opt(ctx, F2FS_MOUNT_DISABLE_ROLL_FORWARD);
732 break;
733 case Opt_norecovery:
734 /* requires ro mount, checked in f2fs_validate_options */
735 ctx_set_opt(ctx, F2FS_MOUNT_NORECOVERY);
736 break;
737 case Opt_discard:
738 if (result.negated)
739 ctx_clear_opt(ctx, F2FS_MOUNT_DISCARD);
740 else
741 ctx_set_opt(ctx, F2FS_MOUNT_DISCARD);
742 break;
743 case Opt_noheap:
744 case Opt_heap:
745 f2fs_warn(NULL, "heap/no_heap options were deprecated");
746 break;
747 #ifdef CONFIG_F2FS_FS_XATTR
748 case Opt_user_xattr:
749 if (result.negated)
750 ctx_clear_opt(ctx, F2FS_MOUNT_XATTR_USER);
751 else
752 ctx_set_opt(ctx, F2FS_MOUNT_XATTR_USER);
753 break;
754 case Opt_inline_xattr:
755 if (result.negated)
756 ctx_clear_opt(ctx, F2FS_MOUNT_INLINE_XATTR);
757 else
758 ctx_set_opt(ctx, F2FS_MOUNT_INLINE_XATTR);
759 break;
760 case Opt_inline_xattr_size:
761 if (result.int_32 < MIN_INLINE_XATTR_SIZE ||
762 result.int_32 > MAX_INLINE_XATTR_SIZE) {
763 f2fs_err(NULL, "inline xattr size is out of range: %lu ~ %lu",
> 764 MIN_INLINE_XATTR_SIZE, MAX_INLINE_XATTR_SIZE);
765 return -EINVAL;
766 }
767 ctx_set_opt(ctx, F2FS_MOUNT_INLINE_XATTR_SIZE);
768 F2FS_CTX_INFO(ctx).inline_xattr_size = result.int_32;
769 ctx->spec_mask |= F2FS_SPEC_inline_xattr_size;
770 break;
771 #else
772 case Opt_user_xattr:
773 case Opt_inline_xattr:
774 case Opt_inline_xattr_size:
775 f2fs_info(NULL, "%s options not supported", param->key);
776 break;
777 #endif
778 #ifdef CONFIG_F2FS_FS_POSIX_ACL
779 case Opt_acl:
780 if (result.negated)
781 ctx_clear_opt(ctx, F2FS_MOUNT_POSIX_ACL);
782 else
783 ctx_set_opt(ctx, F2FS_MOUNT_POSIX_ACL);
784 break;
785 #else
786 case Opt_acl:
787 f2fs_info(NULL, "%s options not supported", param->key);
788 break;
789 #endif
790 case Opt_active_logs:
791 if (result.int_32 != 2 && result.int_32 != 4 &&
792 result.int_32 != NR_CURSEG_PERSIST_TYPE)
793 return -EINVAL;
794 ctx->spec_mask |= F2FS_SPEC_active_logs;
795 F2FS_CTX_INFO(ctx).active_logs = result.int_32;
796 break;
797 case Opt_disable_ext_identify:
798 ctx_set_opt(ctx, F2FS_MOUNT_DISABLE_EXT_IDENTIFY);
799 break;
800 case Opt_inline_data:
801 if (result.negated)
802 ctx_clear_opt(ctx, F2FS_MOUNT_INLINE_DATA);
803 else
804 ctx_set_opt(ctx, F2FS_MOUNT_INLINE_DATA);
805 break;
806 case Opt_inline_dentry:
807 if (result.negated)
808 ctx_clear_opt(ctx, F2FS_MOUNT_INLINE_DENTRY);
809 else
810 ctx_set_opt(ctx, F2FS_MOUNT_INLINE_DENTRY);
811 break;
812 case Opt_flush_merge:
813 if (result.negated)
814 ctx_clear_opt(ctx, F2FS_MOUNT_FLUSH_MERGE);
815 else
816 ctx_set_opt(ctx, F2FS_MOUNT_FLUSH_MERGE);
817 break;
818 case Opt_barrier:
819 if (result.negated)
820 ctx_set_opt(ctx, F2FS_MOUNT_NOBARRIER);
821 else
822 ctx_clear_opt(ctx, F2FS_MOUNT_NOBARRIER);
823 break;
824 case Opt_fastboot:
825 ctx_set_opt(ctx, F2FS_MOUNT_FASTBOOT);
826 break;
827 case Opt_extent_cache:
828 if (result.negated)
829 ctx_clear_opt(ctx, F2FS_MOUNT_READ_EXTENT_CACHE);
830 else
831 ctx_set_opt(ctx, F2FS_MOUNT_READ_EXTENT_CACHE);
832 break;
833 case Opt_data_flush:
834 ctx_set_opt(ctx, F2FS_MOUNT_DATA_FLUSH);
835 break;
836 case Opt_reserve_root:
837 ctx_set_opt(ctx, F2FS_MOUNT_RESERVE_ROOT);
838 F2FS_CTX_INFO(ctx).root_reserved_blocks = result.uint_32;
839 ctx->spec_mask |= F2FS_SPEC_reserve_root;
840 break;
841 case Opt_resuid:
842 F2FS_CTX_INFO(ctx).s_resuid = result.uid;
843 ctx->spec_mask |= F2FS_SPEC_resuid;
844 break;
845 case Opt_resgid:
846 F2FS_CTX_INFO(ctx).s_resgid = result.gid;
847 ctx->spec_mask |= F2FS_SPEC_resgid;
848 break;
849 case Opt_mode:
850 F2FS_CTX_INFO(ctx).fs_mode = result.uint_32;
851 ctx->spec_mask |= F2FS_SPEC_mode;
852 break;
853 #ifdef CONFIG_F2FS_FAULT_INJECTION
854 case Opt_fault_injection:
855 if (result.int_32 > INT_MAX)
856 return -EINVAL;
857 F2FS_CTX_INFO(ctx).fault_info.inject_rate = result.int_32;
858 ctx->spec_mask |= F2FS_SPEC_fault_injection;
859 ctx_set_opt(ctx, F2FS_MOUNT_FAULT_INJECTION);
860 break;
861
862 case Opt_fault_type:
863 if (result.uint_32 > BIT(FAULT_MAX))
864 return -EINVAL;
865 F2FS_CTX_INFO(ctx).fault_info.inject_type = result.uint_32;
866 ctx->spec_mask |= F2FS_SPEC_fault_type;
867 ctx_set_opt(ctx, F2FS_MOUNT_FAULT_INJECTION);
868 break;
869 #else
870 case Opt_fault_injection:
871 case Opt_fault_type:
872 f2fs_info(NULL, "%s options not supported", param->key);
873 break;
874 #endif
875 case Opt_lazytime:
876 if (result.negated)
877 ctx_clear_opt(ctx, F2FS_MOUNT_LAZYTIME);
878 else
879 ctx_set_opt(ctx, F2FS_MOUNT_LAZYTIME);
880 break;
881 #ifdef CONFIG_QUOTA
882 case Opt_quota:
883 if (result.negated) {
884 ctx_clear_opt(ctx, F2FS_MOUNT_QUOTA);
885 ctx_clear_opt(ctx, F2FS_MOUNT_USRQUOTA);
886 ctx_clear_opt(ctx, F2FS_MOUNT_GRPQUOTA);
887 ctx_clear_opt(ctx, F2FS_MOUNT_PRJQUOTA);
888 } else
889 ctx_set_opt(ctx, F2FS_MOUNT_USRQUOTA);
890 break;
891 case Opt_usrquota:
892 ctx_set_opt(ctx, F2FS_MOUNT_USRQUOTA);
893 break;
894 case Opt_grpquota:
895 ctx_set_opt(ctx, F2FS_MOUNT_GRPQUOTA);
896 break;
897 case Opt_prjquota:
898 ctx_set_opt(ctx, F2FS_MOUNT_PRJQUOTA);
899 break;
900 case Opt_usrjquota:
901 if (!*param->string)
902 ret = f2fs_unnote_qf_name(fc, USRQUOTA);
903 else
904 ret = f2fs_note_qf_name(fc, USRQUOTA, param);
905 if (ret)
906 return ret;
907 break;
908 case Opt_grpjquota:
909 if (!*param->string)
910 ret = f2fs_unnote_qf_name(fc, GRPQUOTA);
911 else
912 ret = f2fs_note_qf_name(fc, GRPQUOTA, param);
913 if (ret)
914 return ret;
915 break;
916 case Opt_prjjquota:
917 if (!*param->string)
918 ret = f2fs_unnote_qf_name(fc, PRJQUOTA);
919 else
920 ret = f2fs_note_qf_name(fc, PRJQUOTA, param);
921 if (ret)
922 return ret;
923 break;
924 case Opt_jqfmt:
925 F2FS_CTX_INFO(ctx).s_jquota_fmt = result.int_32;
926 ctx->spec_mask |= F2FS_SPEC_jqfmt;
927 break;
928 #else
929 case Opt_quota:
930 case Opt_usrquota:
931 case Opt_grpquota:
932 case Opt_prjquota:
933 case Opt_usrjquota:
934 case Opt_grpjquota:
935 case Opt_prjjquota:
936 f2fs_info(NULL, "quota operations not supported");
937 break;
938 #endif
939 case Opt_alloc:
940 F2FS_CTX_INFO(ctx).alloc_mode = result.uint_32;
941 ctx->spec_mask |= F2FS_SPEC_alloc_mode;
942 break;
943 case Opt_fsync:
944 F2FS_CTX_INFO(ctx).fsync_mode = result.uint_32;
945 ctx->spec_mask |= F2FS_SPEC_fsync_mode;
946 break;
947 case Opt_test_dummy_encryption:
948 ret = f2fs_parse_test_dummy_encryption(param, ctx);
949 if (ret)
950 return ret;
951 break;
952 case Opt_inlinecrypt:
953 #ifdef CONFIG_FS_ENCRYPTION_INLINE_CRYPT
954 ctx_set_opt(ctx, F2FS_MOUNT_INLINECRYPT);
955 #else
956 f2fs_info(NULL, "inline encryption not supported");
957 #endif
958 break;
959 case Opt_checkpoint:
960 /* revert to match_table for checkpoint= options */
961 token = match_token(param->string, f2fs_checkpoint_tokens, args);
962 switch (token) {
963 case Opt_checkpoint_disable_cap_perc:
964 if (args->from && match_int(args, &arg))
965 return -EINVAL;
966 if (arg < 0 || arg > 100)
967 return -EINVAL;
968 F2FS_CTX_INFO(ctx).unusable_cap_perc = arg;
969 ctx->spec_mask |= F2FS_SPEC_checkpoint_disable_cap_perc;
970 ctx_set_opt(ctx, F2FS_MOUNT_DISABLE_CHECKPOINT);
971 break;
972 case Opt_checkpoint_disable_cap:
973 if (args->from && match_int(args, &arg))
974 return -EINVAL;
975 F2FS_CTX_INFO(ctx).unusable_cap = arg;
976 ctx->spec_mask |= F2FS_SPEC_checkpoint_disable_cap;
977 ctx_set_opt(ctx, F2FS_MOUNT_DISABLE_CHECKPOINT);
978 break;
979 case Opt_checkpoint_disable:
980 ctx_set_opt(ctx, F2FS_MOUNT_DISABLE_CHECKPOINT);
981 break;
982 case Opt_checkpoint_enable:
983 ctx_clear_opt(ctx, F2FS_MOUNT_DISABLE_CHECKPOINT);
984 break;
985 default:
986 return -EINVAL;
987 }
988 break;
989 case Opt_checkpoint_merge:
990 if (result.negated)
991 ctx_clear_opt(ctx, F2FS_MOUNT_MERGE_CHECKPOINT);
992 else
993 ctx_set_opt(ctx, F2FS_MOUNT_MERGE_CHECKPOINT);
994 break;
995 #ifdef CONFIG_F2FS_FS_COMPRESSION
996 case Opt_compress_algorithm:
997 name = param->string;
998 if (!strcmp(name, "lzo")) {
999 #ifdef CONFIG_F2FS_FS_LZO
1000 F2FS_CTX_INFO(ctx).compress_level = 0;
1001 F2FS_CTX_INFO(ctx).compress_algorithm = COMPRESS_LZO;
1002 ctx->spec_mask |= F2FS_SPEC_compress_level;
1003 ctx->spec_mask |= F2FS_SPEC_compress_algorithm;
1004 #else
1005 f2fs_info(NULL, "kernel doesn't support lzo compression");
1006 #endif
1007 } else if (!strncmp(name, "lz4", 3)) {
1008 #ifdef CONFIG_F2FS_FS_LZ4
1009 ret = f2fs_set_lz4hc_level(ctx, name);
1010 if (ret)
1011 return -EINVAL;
1012 F2FS_CTX_INFO(ctx).compress_algorithm = COMPRESS_LZ4;
1013 ctx->spec_mask |= F2FS_SPEC_compress_algorithm;
1014 #else
1015 f2fs_info(NULL, "kernel doesn't support lz4 compression");
1016 #endif
1017 } else if (!strncmp(name, "zstd", 4)) {
1018 #ifdef CONFIG_F2FS_FS_ZSTD
1019 ret = f2fs_set_zstd_level(ctx, name);
1020 if (ret)
1021 return -EINVAL;
1022 F2FS_CTX_INFO(ctx).compress_algorithm = COMPRESS_ZSTD;
1023 ctx->spec_mask |= F2FS_SPEC_compress_algorithm;
1024 #else
1025 f2fs_info(NULL, "kernel doesn't support zstd compression");
1026 #endif
1027 } else if (!strcmp(name, "lzo-rle")) {
1028 #ifdef CONFIG_F2FS_FS_LZORLE
1029 F2FS_CTX_INFO(ctx).compress_level = 0;
1030 F2FS_CTX_INFO(ctx).compress_algorithm = COMPRESS_LZORLE;
1031 ctx->spec_mask |= F2FS_SPEC_compress_level;
1032 ctx->spec_mask |= F2FS_SPEC_compress_algorithm;
1033 #else
1034 f2fs_info(NULL, "kernel doesn't support lzorle compression");
1035 #endif
1036 } else
1037 return -EINVAL;
1038 break;
1039 case Opt_compress_log_size:
1040 if (result.uint_32 < MIN_COMPRESS_LOG_SIZE ||
1041 result.uint_32 > MAX_COMPRESS_LOG_SIZE) {
1042 f2fs_err(NULL,
1043 "Compress cluster log size is out of range");
1044 return -EINVAL;
1045 }
1046 F2FS_CTX_INFO(ctx).compress_log_size = result.uint_32;
1047 ctx->spec_mask |= F2FS_SPEC_compress_log_size;
1048 break;
1049 case Opt_compress_extension:
1050 name = param->string;
1051 ext = F2FS_CTX_INFO(ctx).extensions;
1052 ext_cnt = F2FS_CTX_INFO(ctx).compress_ext_cnt;
1053
1054 if (strlen(name) >= F2FS_EXTENSION_LEN ||
1055 ext_cnt >= COMPRESS_EXT_NUM) {
1056 f2fs_err(NULL, "invalid extension length/number");
1057 return -EINVAL;
1058 }
1059
1060 if (is_compress_extension_exist(&ctx->info, name, true))
1061 break;
1062
1063 ret = strscpy(ext[ext_cnt], name, F2FS_EXTENSION_LEN);
1064 if (ret < 0)
1065 return ret;
1066 F2FS_CTX_INFO(ctx).compress_ext_cnt++;
1067 ctx->spec_mask |= F2FS_SPEC_compress_extension;
1068 break;
1069 case Opt_nocompress_extension:
1070 name = param->string;
1071 noext = F2FS_CTX_INFO(ctx).noextensions;
1072 noext_cnt = F2FS_CTX_INFO(ctx).nocompress_ext_cnt;
1073
1074 if (strlen(name) >= F2FS_EXTENSION_LEN ||
1075 noext_cnt >= COMPRESS_EXT_NUM) {
1076 f2fs_err(NULL, "invalid extension length/number");
1077 return -EINVAL;
1078 }
1079
1080 if (is_compress_extension_exist(&ctx->info, name, false))
1081 break;
1082
1083 ret = strscpy(noext[noext_cnt], name, F2FS_EXTENSION_LEN);
1084 if (ret < 0)
1085 return ret;
1086 F2FS_CTX_INFO(ctx).nocompress_ext_cnt++;
1087 ctx->spec_mask |= F2FS_SPEC_nocompress_extension;
1088 break;
1089 case Opt_compress_chksum:
1090 F2FS_CTX_INFO(ctx).compress_chksum = true;
1091 ctx->spec_mask |= F2FS_SPEC_compress_chksum;
1092 break;
1093 case Opt_compress_mode:
1094 F2FS_CTX_INFO(ctx).compress_mode = result.uint_32;
1095 ctx->spec_mask |= F2FS_SPEC_compress_mode;
1096 break;
1097 case Opt_compress_cache:
1098 ctx_set_opt(ctx, F2FS_MOUNT_COMPRESS_CACHE);
1099 break;
1100 #else
1101 case Opt_compress_algorithm:
1102 case Opt_compress_log_size:
1103 case Opt_compress_extension:
1104 case Opt_nocompress_extension:
1105 case Opt_compress_chksum:
1106 case Opt_compress_mode:
1107 case Opt_compress_cache:
1108 f2fs_info(NULL, "compression options not supported");
1109 break;
1110 #endif
1111 case Opt_atgc:
1112 ctx_set_opt(ctx, F2FS_MOUNT_ATGC);
1113 break;
1114 case Opt_gc_merge:
1115 if (result.negated)
1116 ctx_clear_opt(ctx, F2FS_MOUNT_GC_MERGE);
1117 else
1118 ctx_set_opt(ctx, F2FS_MOUNT_GC_MERGE);
1119 break;
1120 case Opt_discard_unit:
1121 F2FS_CTX_INFO(ctx).discard_unit = result.uint_32;
1122 ctx->spec_mask |= F2FS_SPEC_discard_unit;
1123 break;
1124 case Opt_memory_mode:
1125 F2FS_CTX_INFO(ctx).memory_mode = result.uint_32;
1126 ctx->spec_mask |= F2FS_SPEC_memory_mode;
1127 break;
1128 case Opt_age_extent_cache:
1129 ctx_set_opt(ctx, F2FS_MOUNT_AGE_EXTENT_CACHE);
1130 break;
1131 case Opt_errors:
1132 F2FS_CTX_INFO(ctx).errors = result.uint_32;
1133 ctx->spec_mask |= F2FS_SPEC_errors;
1134 break;
1135 case Opt_nat_bits:
1136 ctx_set_opt(ctx, F2FS_MOUNT_NAT_BITS);
1137 break;
1138 }
1139 return 0;
1140 }
1141
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
next prev parent reply other threads:[~2025-04-21 17:38 UTC|newest]
Thread overview: 40+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-04-20 15:24 [f2fs-dev] [PATCH 0/7 V2] f2fs: new mount API conversion Eric Sandeen via Linux-f2fs-devel
2025-04-20 15:24 ` Eric Sandeen
2025-04-20 15:25 ` [f2fs-dev] [PATCH 1/7] f2fs: Add fs parameter specifications for mount options Eric Sandeen via Linux-f2fs-devel
2025-04-20 15:25 ` Eric Sandeen
2025-05-07 9:54 ` [f2fs-dev] " Chao Yu via Linux-f2fs-devel
2025-05-07 9:54 ` Chao Yu
2025-04-20 15:25 ` [f2fs-dev] [PATCH 2/7] f2fs: move the option parser into handle_mount_opt Eric Sandeen via Linux-f2fs-devel
2025-04-20 15:25 ` Eric Sandeen
2025-05-07 11:26 ` [f2fs-dev] " Chao Yu via Linux-f2fs-devel
2025-05-07 11:26 ` Chao Yu
2025-05-07 12:31 ` [f2fs-dev] " Eric Sandeen via Linux-f2fs-devel
2025-05-07 12:31 ` Eric Sandeen
2025-05-07 15:02 ` [f2fs-dev] " Jaegeuk Kim via Linux-f2fs-devel
2025-05-07 15:02 ` Jaegeuk Kim
2025-05-08 3:29 ` [f2fs-dev] " Chao Yu via Linux-f2fs-devel
2025-05-08 3:29 ` Chao Yu
2025-05-08 3:28 ` [f2fs-dev] " Chao Yu via Linux-f2fs-devel
2025-05-08 3:28 ` Chao Yu
2025-04-20 15:25 ` [f2fs-dev] [PATCH 3/7] f2fs: Allow sbi to be NULL in f2fs_printk Eric Sandeen via Linux-f2fs-devel
2025-04-20 15:25 ` Eric Sandeen
2025-05-07 11:29 ` [f2fs-dev] " Chao Yu via Linux-f2fs-devel
2025-05-07 11:29 ` Chao Yu
2025-04-20 15:25 ` [f2fs-dev] [PATCH 4/7] f2fs: Add f2fs_fs_context to record the mount options Eric Sandeen via Linux-f2fs-devel
2025-04-20 15:25 ` Eric Sandeen
2025-04-20 15:25 ` [f2fs-dev] [PATCH 5/7] f2fs: separate the options parsing and options checking Eric Sandeen via Linux-f2fs-devel
2025-04-20 15:25 ` Eric Sandeen
2025-04-21 16:34 ` [f2fs-dev] " kernel test robot
2025-04-21 16:34 ` kernel test robot
2025-04-21 17:37 ` kernel test robot [this message]
2025-04-21 17:37 ` kernel test robot
2025-04-21 17:37 ` [f2fs-dev] " kernel test robot
2025-04-21 17:37 ` kernel test robot
2025-04-20 15:25 ` [f2fs-dev] [PATCH 6/7] f2fs: introduce fs_context_operation structure Eric Sandeen via Linux-f2fs-devel
2025-04-20 15:25 ` Eric Sandeen
2025-04-20 15:25 ` [f2fs-dev] [PATCH 7/7] f2fs: switch to the new mount api Eric Sandeen via Linux-f2fs-devel
2025-04-20 15:25 ` Eric Sandeen
2025-04-22 2:39 ` [f2fs-dev] [PATCH 0/7 V2] f2fs: new mount API conversion Eric Sandeen via Linux-f2fs-devel
2025-04-22 2:39 ` Eric Sandeen
2025-07-11 16:30 ` [f2fs-dev] " patchwork-bot+f2fs--- via Linux-f2fs-devel
2025-07-11 16:30 ` patchwork-bot+f2fs
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=202504220117.vULD83Cm-lkp@intel.com \
--to=lkp@intel.com \
--cc=jaegeuk@kernel.org \
--cc=lihongbo22@huawei.com \
--cc=linux-f2fs-devel@lists.sourceforge.net \
--cc=linux-fsdevel@vger.kernel.org \
--cc=llvm@lists.linux.dev \
--cc=oe-kbuild-all@lists.linux.dev \
--cc=sandeen@redhat.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.