tree: https://github.com/konis/nilfs2 for-akpm head: 69812977939c7895ede256e122284c19d4d83aef commit: 69812977939c7895ede256e122284c19d4d83aef [4/4] nilfs2: convert to use the new mount API config: s390-defconfig (https://download.01.org/0day-ci/archive/20240425/202404251609.B6CCB7ts-lkp@xxxxxxxxx/config) compiler: clang version 19.0.0git (https://github.com/llvm/llvm-project 5ef5eb66fb428aaf61fb51b709f065c069c11242) reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20240425/202404251609.B6CCB7ts-lkp@xxxxxxxxx/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@xxxxxxxxx> | Closes: https://lore.kernel.org/oe-kbuild-all/202404251609.B6CCB7ts-lkp@xxxxxxxxx/ All warnings (new ones prefixed by >>): In file included from fs/nilfs2/super.c:27: In file included from include/linux/module.h:19: In file included from include/linux/elf.h:6: In file included from arch/s390/include/asm/elf.h:173: In file included from arch/s390/include/asm/mmu_context.h:11: In file included from arch/s390/include/asm/pgalloc.h:18: In file included from include/linux/mm.h:2208: include/linux/vmstat.h:508:43: warning: arithmetic between different enumeration types ('enum zone_stat_item' and 'enum numa_stat_item') [-Wenum-enum-conversion] 508 | return vmstat_text[NR_VM_ZONE_STAT_ITEMS + | ~~~~~~~~~~~~~~~~~~~~~ ^ 509 | item]; | ~~~~ include/linux/vmstat.h:515:43: warning: arithmetic between different enumeration types ('enum zone_stat_item' and 'enum numa_stat_item') [-Wenum-enum-conversion] 515 | return vmstat_text[NR_VM_ZONE_STAT_ITEMS + | ~~~~~~~~~~~~~~~~~~~~~ ^ 516 | NR_VM_NUMA_EVENT_ITEMS + | ~~~~~~~~~~~~~~~~~~~~~~ include/linux/vmstat.h:522:36: warning: arithmetic between different enumeration types ('enum node_stat_item' and 'enum lru_list') [-Wenum-enum-conversion] 522 | return node_stat_name(NR_LRU_BASE + lru) + 3; // skip "nr_" | ~~~~~~~~~~~ ^ ~~~ include/linux/vmstat.h:527:43: warning: arithmetic between different enumeration types ('enum zone_stat_item' and 'enum numa_stat_item') [-Wenum-enum-conversion] 527 | return vmstat_text[NR_VM_ZONE_STAT_ITEMS + | ~~~~~~~~~~~~~~~~~~~~~ ^ 528 | NR_VM_NUMA_EVENT_ITEMS + | ~~~~~~~~~~~~~~~~~~~~~~ include/linux/vmstat.h:536:43: warning: arithmetic between different enumeration types ('enum zone_stat_item' and 'enum numa_stat_item') [-Wenum-enum-conversion] 536 | return vmstat_text[NR_VM_ZONE_STAT_ITEMS + | ~~~~~~~~~~~~~~~~~~~~~ ^ 537 | NR_VM_NUMA_EVENT_ITEMS + | ~~~~~~~~~~~~~~~~~~~~~~ >> fs/nilfs2/super.c:1196:13: warning: variable 's' is uninitialized when used here [-Wuninitialized] 1196 | nilfs_err(s, "invalid option \"cp=%llu\": read-only option is not specified", | ^ fs/nilfs2/nilfs.h:330:12: note: expanded from macro 'nilfs_err' 330 | nilfs_msg(sb, KERN_ERR, fmt, ##__VA_ARGS__) | ^~ fs/nilfs2/nilfs.h:308:14: note: expanded from macro 'nilfs_msg' 308 | __nilfs_msg(sb, level fmt, ##__VA_ARGS__) | ^~ fs/nilfs2/super.c:1191:23: note: initialize the variable 's' to silence this warning 1191 | struct super_block *s; | ^ | = NULL 6 warnings generated. -- >> fs/nilfs2/the_nilfs.c:672: warning: Excess function parameter 'data' description in 'init_nilfs' -- fs/nilfs2/super.c:122: warning: Function parameter or struct member 'sb' not described in '__nilfs_error' fs/nilfs2/super.c:122: warning: Function parameter or struct member 'function' not described in '__nilfs_error' fs/nilfs2/super.c:122: warning: Function parameter or struct member 'fmt' not described in '__nilfs_error' >> fs/nilfs2/super.c:1036: warning: Function parameter or struct member 'fc' not described in 'nilfs_fill_super' >> fs/nilfs2/super.c:1036: warning: Excess function parameter 'data' description in 'nilfs_fill_super' >> fs/nilfs2/super.c:1036: warning: Excess function parameter 'silent' description in 'nilfs_fill_super' vim +/s +1196 fs/nilfs2/super.c 1024 1025 /** 1026 * nilfs_fill_super() - initialize a super block instance 1027 * @sb: super_block 1028 * @data: mount options 1029 * @silent: silent mode flag 1030 * 1031 * This function is called exclusively by nilfs->ns_mount_mutex. 1032 * So, the recovery process is protected from other simultaneous mounts. 1033 */ 1034 static int 1035 nilfs_fill_super(struct super_block *sb, struct fs_context *fc) > 1036 { 1037 struct the_nilfs *nilfs; 1038 struct nilfs_root *fsroot; 1039 struct nilfs_fs_context *ctx = fc->fs_private; 1040 __u64 cno; 1041 int err; 1042 1043 nilfs = alloc_nilfs(sb); 1044 if (!nilfs) 1045 return -ENOMEM; 1046 1047 sb->s_fs_info = nilfs; 1048 1049 err = init_nilfs(nilfs, sb); 1050 if (err) 1051 goto failed_nilfs; 1052 1053 /* Copy in parsed mount options */ 1054 nilfs->ns_mount_opt = ctx->ns_mount_opt; 1055 1056 sb->s_op = &nilfs_sops; 1057 sb->s_export_op = &nilfs_export_ops; 1058 sb->s_root = NULL; 1059 sb->s_time_gran = 1; 1060 sb->s_max_links = NILFS_LINK_MAX; 1061 1062 sb->s_bdi = bdi_get(sb->s_bdev->bd_disk->bdi); 1063 1064 err = load_nilfs(nilfs, sb); 1065 if (err) 1066 goto failed_nilfs; 1067 1068 cno = nilfs_last_cno(nilfs); 1069 err = nilfs_attach_checkpoint(sb, cno, true, &fsroot); 1070 if (err) { 1071 nilfs_err(sb, 1072 "error %d while loading last checkpoint (checkpoint number=%llu)", 1073 err, (unsigned long long)cno); 1074 goto failed_unload; 1075 } 1076 1077 if (!sb_rdonly(sb)) { 1078 err = nilfs_attach_log_writer(sb, fsroot); 1079 if (err) 1080 goto failed_checkpoint; 1081 } 1082 1083 err = nilfs_get_root_dentry(sb, fsroot, &sb->s_root); 1084 if (err) 1085 goto failed_segctor; 1086 1087 nilfs_put_root(fsroot); 1088 1089 if (!sb_rdonly(sb)) { 1090 down_write(&nilfs->ns_sem); 1091 nilfs_setup_super(sb, true); 1092 up_write(&nilfs->ns_sem); 1093 } 1094 1095 return 0; 1096 1097 failed_segctor: 1098 nilfs_detach_log_writer(sb); 1099 1100 failed_checkpoint: 1101 nilfs_put_root(fsroot); 1102 1103 failed_unload: 1104 nilfs_sysfs_delete_device_group(nilfs); 1105 iput(nilfs->ns_sufile); 1106 iput(nilfs->ns_cpfile); 1107 iput(nilfs->ns_dat); 1108 1109 failed_nilfs: 1110 destroy_nilfs(nilfs); 1111 return err; 1112 } 1113 1114 static int nilfs_reconfigure(struct fs_context *fc) 1115 { 1116 struct nilfs_fs_context *ctx = fc->fs_private; 1117 struct super_block *sb = fc->root->d_sb; 1118 struct the_nilfs *nilfs = sb->s_fs_info; 1119 int err; 1120 1121 sync_filesystem(sb); 1122 1123 err = -EINVAL; 1124 1125 if (!nilfs_valid_fs(nilfs)) { 1126 nilfs_warn(sb, 1127 "couldn't remount because the filesystem is in an incomplete recovery state"); 1128 goto ignore_opts; 1129 } 1130 if ((bool)(fc->sb_flags & SB_RDONLY) == sb_rdonly(sb)) 1131 goto out; 1132 if (fc->sb_flags & SB_RDONLY) { 1133 sb->s_flags |= SB_RDONLY; 1134 1135 /* 1136 * Remounting a valid RW partition RDONLY, so set 1137 * the RDONLY flag and then mark the partition as valid again. 1138 */ 1139 down_write(&nilfs->ns_sem); 1140 nilfs_cleanup_super(sb); 1141 up_write(&nilfs->ns_sem); 1142 } else { 1143 __u64 features; 1144 struct nilfs_root *root; 1145 1146 /* 1147 * Mounting a RDONLY partition read-write, so reread and 1148 * store the current valid flag. (It may have been changed 1149 * by fsck since we originally mounted the partition.) 1150 */ 1151 down_read(&nilfs->ns_sem); 1152 features = le64_to_cpu(nilfs->ns_sbp[0]->s_feature_compat_ro) & 1153 ~NILFS_FEATURE_COMPAT_RO_SUPP; 1154 up_read(&nilfs->ns_sem); 1155 if (features) { 1156 nilfs_warn(sb, 1157 "couldn't remount RDWR because of unsupported optional features (%llx)", 1158 (unsigned long long)features); 1159 err = -EROFS; 1160 goto ignore_opts; 1161 } 1162 1163 sb->s_flags &= ~SB_RDONLY; 1164 1165 root = NILFS_I(d_inode(sb->s_root))->i_root; 1166 err = nilfs_attach_log_writer(sb, root); 1167 if (err) { 1168 sb->s_flags |= SB_RDONLY; 1169 goto ignore_opts; 1170 } 1171 1172 down_write(&nilfs->ns_sem); 1173 nilfs_setup_super(sb, true); 1174 up_write(&nilfs->ns_sem); 1175 } 1176 out: 1177 sb->s_flags = (sb->s_flags & ~SB_POSIXACL); 1178 /* Copy over parsed remount options */ 1179 nilfs->ns_mount_opt = ctx->ns_mount_opt; 1180 1181 return 0; 1182 1183 ignore_opts: 1184 return err; 1185 } 1186 1187 static int 1188 nilfs_get_tree(struct fs_context *fc) 1189 { 1190 struct nilfs_fs_context *ctx = fc->fs_private; 1191 struct super_block *s; 1192 dev_t dev; 1193 int err; 1194 1195 if (ctx->cno && !(fc->sb_flags & SB_RDONLY)) { > 1196 nilfs_err(s, "invalid option \"cp=%llu\": read-only option is not specified", 1197 ctx->cno); 1198 return -EINVAL; 1199 } 1200 1201 err = lookup_bdev(fc->source, &dev); 1202 if (err) 1203 return err; 1204 1205 s = sget_dev(fc, dev); 1206 if (IS_ERR(s)) 1207 return PTR_ERR(s); 1208 1209 if (!s->s_root) { 1210 err = setup_bdev_super(s, fc->sb_flags, fc); 1211 if (!err) 1212 err = nilfs_fill_super(s, fc); 1213 if (err) 1214 goto failed_super; 1215 1216 s->s_flags |= SB_ACTIVE; 1217 } else if (!ctx->cno) { 1218 if (nilfs_tree_is_busy(s->s_root)) { 1219 if ((fc->sb_flags ^ s->s_flags) & SB_RDONLY) { 1220 nilfs_err(s, 1221 "the device already has a %s mount.", 1222 sb_rdonly(s) ? "read-only" : "read/write"); 1223 err = -EBUSY; 1224 goto failed_super; 1225 } 1226 } else { 1227 /* 1228 * Try remount to setup mount states if the current 1229 * tree is not mounted and only snapshots use this sb. 1230 */ 1231 fc->root = s->s_root; 1232 err = nilfs_reconfigure(fc); 1233 if (err) 1234 goto failed_super; 1235 } 1236 } 1237 1238 if (ctx->cno) { 1239 struct dentry *root_dentry; 1240 1241 err = nilfs_attach_snapshot(s, ctx->cno, &root_dentry); 1242 if (err) 1243 goto failed_super; 1244 fc->root = root_dentry; 1245 return 0; 1246 } 1247 1248 fc->root = dget(s->s_root); 1249 return 0; 1250 1251 failed_super: 1252 deactivate_locked_super(s); 1253 return err; 1254 } 1255 -- 0-DAY CI Kernel Test Service https://github.com/intel/lkp-tests/wiki