Hi Lizhi, kernel test robot noticed the following build warnings:
[auto build test WARNING on linus/master] [also build test WARNING on v6.11-rc4 next-20240819] [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/Lizhi-Xu/bcachefs-Fix-oob-in-bch2_dev_journal_init/20240819-145031 base: linus/master patch link: https://lore.kernel.org/r/20240819064754.35606-1-lizhi.xu%40windriver.com patch subject: [PATCH] bcachefs: Fix oob in bch2_dev_journal_init config: arm-randconfig-003-20240819 (https://download.01.org/0day-ci/archive/20240819/202408192244.cghqczq3-...@intel.com/config) compiler: clang version 17.0.6 (https://github.com/llvm/llvm-project 6009708b4367171ccdbf4b5905cb6a803753fe18) reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20240819/202408192244.cghqczq3-...@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 <l...@intel.com> | Closes: https://lore.kernel.org/oe-kbuild-all/202408192244.cghqczq3-...@intel.com/ All warnings (new ones prefixed by >>): >> fs/bcachefs/journal.c:1317:6: warning: format specifies type 'unsigned long' >> but the argument has type '__u64' (aka 'unsigned long long') [-Wformat] 1316 | prt_printf(&buf, "journal v2 entry d[%u].nr %lu overflow!\n", i, | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | %llu 1317 | le64_to_cpu(journal_buckets_v2->d[i].nr)); | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ include/linux/byteorder/generic.h:87:21: note: expanded from macro 'le64_to_cpu' 87 | #define le64_to_cpu __le64_to_cpu | ^ include/uapi/linux/byteorder/little_endian.h:33:26: note: expanded from macro '__le64_to_cpu' 33 | #define __le64_to_cpu(x) ((__force __u64)(__le64)(x)) | ^ fs/bcachefs/util.h:78:54: note: expanded from macro 'prt_printf' 78 | #define prt_printf(_out, ...) bch2_prt_printf(_out, __VA_ARGS__) | ^~~~~~~~~~~ 1 warning generated. vim +1317 fs/bcachefs/journal.c 1297 1298 int bch2_dev_journal_init(struct bch_dev *ca, struct bch_sb *sb) 1299 { 1300 struct journal_device *ja = &ca->journal; 1301 struct bch_sb_field_journal *journal_buckets = 1302 bch2_sb_field_get(sb, journal); 1303 struct bch_sb_field_journal_v2 *journal_buckets_v2 = 1304 bch2_sb_field_get(sb, journal_v2); 1305 1306 ja->nr = 0; 1307 1308 if (journal_buckets_v2) { 1309 unsigned nr = bch2_sb_field_journal_v2_nr_entries(journal_buckets_v2); 1310 1311 for (unsigned i = 0; i < nr; i++) { 1312 ja->nr += le64_to_cpu(journal_buckets_v2->d[i].nr); 1313 if (le64_to_cpu(journal_buckets_v2->d[i].nr) > UINT_MAX) { 1314 struct bch_fs *c = ca->fs; 1315 struct printbuf buf = PRINTBUF; 1316 prt_printf(&buf, "journal v2 entry d[%u].nr %lu overflow!\n", i, > 1317 > le64_to_cpu(journal_buckets_v2->d[i].nr)); 1318 bch_info(c, "%s", buf.buf); 1319 printbuf_exit(&buf); 1320 return -BCH_ERR_ENOMEM_dev_journal_init; 1321 } 1322 } 1323 } else if (journal_buckets) { 1324 ja->nr = bch2_nr_journal_buckets(journal_buckets); 1325 } 1326 1327 ja->bucket_seq = kcalloc(ja->nr, sizeof(u64), GFP_KERNEL); 1328 if (!ja->bucket_seq) 1329 return -BCH_ERR_ENOMEM_dev_journal_init; 1330 1331 unsigned nr_bvecs = DIV_ROUND_UP(JOURNAL_ENTRY_SIZE_MAX, PAGE_SIZE); 1332 1333 for (unsigned i = 0; i < ARRAY_SIZE(ja->bio); i++) { 1334 ja->bio[i] = kmalloc(struct_size(ja->bio[i], bio.bi_inline_vecs, 1335 nr_bvecs), GFP_KERNEL); 1336 if (!ja->bio[i]) 1337 return -BCH_ERR_ENOMEM_dev_journal_init; 1338 1339 ja->bio[i]->ca = ca; 1340 ja->bio[i]->buf_idx = i; 1341 bio_init(&ja->bio[i]->bio, NULL, ja->bio[i]->bio.bi_inline_vecs, nr_bvecs, 0); 1342 } 1343 1344 ja->buckets = kcalloc(ja->nr, sizeof(u64), GFP_KERNEL); 1345 if (!ja->buckets) 1346 return -BCH_ERR_ENOMEM_dev_journal_init; 1347 1348 if (journal_buckets_v2) { 1349 unsigned nr = bch2_sb_field_journal_v2_nr_entries(journal_buckets_v2); 1350 unsigned dst = 0; 1351 1352 for (unsigned i = 0; i < nr; i++) 1353 for (unsigned j = 0; j < le64_to_cpu(journal_buckets_v2->d[i].nr); j++) 1354 ja->buckets[dst++] = 1355 le64_to_cpu(journal_buckets_v2->d[i].start) + j; 1356 } else if (journal_buckets) { 1357 for (unsigned i = 0; i < ja->nr; i++) 1358 ja->buckets[i] = le64_to_cpu(journal_buckets->buckets[i]); 1359 } 1360 1361 return 0; 1362 } 1363 -- 0-DAY CI Kernel Test Service https://github.com/intel/lkp-tests/wiki