tree: https://git.kernel.org/pub/scm/linux/kernel/git/jaegeuk/f2fs.git dev-test head: 96bc5abf22b2308817c557c08d6cffff9607955f commit: 05e65c14ea59a401cec4284e9d612f9d5dc1b3f8 [1/43] f2fs: support large folio for immutable non-compressed case config: i386-randconfig-061-20260113 (https://download.01.org/0day-ci/archive/20260114/[email protected]/config) compiler: gcc-14 (Debian 14.2.0-19) 14.2.0 reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20260114/[email protected]/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 <[email protected]> | Closes: https://lore.kernel.org/oe-kbuild-all/[email protected]/ sparse warnings: (new ones prefixed by >>) >> fs/f2fs/data.c:2406:39: sparse: sparse: Using plain integer as NULL pointer vim +2406 fs/f2fs/data.c 2400 2401 static int f2fs_read_data_large_folio(struct inode *inode, 2402 struct readahead_control *rac, struct folio *folio) 2403 { 2404 struct bio *bio = NULL; 2405 sector_t last_block_in_bio = 0; > 2406 struct f2fs_map_blocks map = {0, }; 2407 pgoff_t index, offset; 2408 unsigned max_nr_pages = rac ? readahead_count(rac) : 2409 folio_nr_pages(folio); 2410 unsigned nrpages; 2411 struct f2fs_folio_state *ffs; 2412 int ret = 0; 2413 2414 if (!IS_IMMUTABLE(inode)) 2415 return -EOPNOTSUPP; 2416 2417 if (f2fs_compressed_file(inode)) 2418 return -EOPNOTSUPP; 2419 2420 map.m_seg_type = NO_CHECK_TYPE; 2421 2422 if (rac) 2423 folio = readahead_folio(rac); 2424 next_folio: 2425 if (!folio) 2426 goto out; 2427 2428 index = folio->index; 2429 offset = 0; 2430 ffs = NULL; 2431 nrpages = folio_nr_pages(folio); 2432 2433 for (; nrpages; nrpages--) { 2434 sector_t block_nr; 2435 /* 2436 * Map blocks using the previous result first. 2437 */ 2438 if ((map.m_flags & F2FS_MAP_MAPPED) && 2439 index > map.m_lblk && 2440 index < (map.m_lblk + map.m_len)) 2441 goto got_it; 2442 2443 /* 2444 * Then do more f2fs_map_blocks() calls until we are 2445 * done with this page. 2446 */ 2447 memset(&map, 0, sizeof(map)); 2448 map.m_seg_type = NO_CHECK_TYPE; 2449 map.m_lblk = index; 2450 map.m_len = max_nr_pages; 2451 2452 ret = f2fs_map_blocks(inode, &map, F2FS_GET_BLOCK_DEFAULT); 2453 if (ret) 2454 goto err_out; 2455 got_it: 2456 if ((map.m_flags & F2FS_MAP_MAPPED)) { 2457 block_nr = map.m_pblk + index - map.m_lblk; 2458 if (!f2fs_is_valid_blkaddr(F2FS_I_SB(inode), block_nr, 2459 DATA_GENERIC_ENHANCE_READ)) { 2460 ret = -EFSCORRUPTED; 2461 goto err_out; 2462 } 2463 } else { 2464 folio_zero_range(folio, offset << PAGE_SHIFT, PAGE_SIZE); 2465 if (f2fs_need_verity(inode, index) && 2466 !fsverity_verify_page(folio_file_page(folio, 2467 index))) { 2468 ret = -EIO; 2469 goto err_out; 2470 } 2471 continue; 2472 } 2473 2474 /* 2475 * This page will go to BIO. Do we need to send this 2476 * BIO off first? 2477 */ 2478 if (bio && (!page_is_mergeable(F2FS_I_SB(inode), bio, 2479 last_block_in_bio, block_nr) || 2480 !f2fs_crypt_mergeable_bio(bio, inode, index, NULL))) { 2481 submit_and_realloc: 2482 f2fs_submit_read_bio(F2FS_I_SB(inode), bio, DATA); 2483 bio = NULL; 2484 } 2485 if (bio == NULL) 2486 bio = f2fs_grab_read_bio(inode, block_nr, 2487 max_nr_pages, 2488 f2fs_ra_op_flags(rac), 2489 index, false); 2490 2491 /* 2492 * If the page is under writeback, we need to wait for 2493 * its completion to see the correct decrypted data. 2494 */ 2495 f2fs_wait_on_block_writeback(inode, block_nr); 2496 2497 if (!bio_add_folio(bio, folio, F2FS_BLKSIZE, 2498 offset << PAGE_SHIFT)) 2499 goto submit_and_realloc; 2500 2501 if (folio_test_large(folio)) { 2502 ffs = ffs_find_or_alloc(folio); 2503 2504 /* set the bitmap to wait */ 2505 spin_lock_irq(&ffs->state_lock); 2506 ffs->read_pages_pending++; 2507 spin_unlock_irq(&ffs->state_lock); 2508 } 2509 2510 inc_page_count(F2FS_I_SB(inode), F2FS_RD_DATA); 2511 f2fs_update_iostat(F2FS_I_SB(inode), NULL, FS_DATA_READ_IO, 2512 F2FS_BLKSIZE); 2513 last_block_in_bio = block_nr; 2514 index++; 2515 offset++; 2516 } 2517 if (rac) { 2518 folio = readahead_folio(rac); 2519 goto next_folio; 2520 } 2521 err_out: 2522 /* Nothing was submitted. */ 2523 if (!bio) { 2524 if (!ret) 2525 folio_mark_uptodate(folio); 2526 folio_unlock(folio); 2527 return ret; 2528 } 2529 2530 if (ret) { 2531 f2fs_submit_read_bio(F2FS_I_SB(inode), bio, DATA); 2532 2533 /* Wait bios and clear uptodate. */ 2534 folio_lock(folio); 2535 folio_clear_uptodate(folio); 2536 folio_unlock(folio); 2537 } 2538 out: 2539 f2fs_submit_read_bio(F2FS_I_SB(inode), bio, DATA); 2540 return ret; 2541 } 2542 -- 0-DAY CI Kernel Test Service https://github.com/intel/lkp-tests/wiki _______________________________________________ Linux-f2fs-devel mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel
