All of lore.kernel.org
 help / color / mirror / Atom feed
* [chao:feature/cache 6/13] fs/f2fs/gc.c:1897 do_garbage_collect() error: 'sum_entry' dereferencing possible ERR_PTR()
@ 2026-08-19  5:55 kernel test robot
  0 siblings, 0 replies; only message in thread
From: kernel test robot @ 2026-08-19  5:55 UTC (permalink / raw)
  To: oe-kbuild; +Cc: lkp, Dan Carpenter

BCC: lkp@intel.com
CC: oe-kbuild-all@lists.linux.dev
CC: Chao Yu <chao@kernel.org>
TO: Chao Yu <chao@kernel.org>

tree:   https://git.kernel.org/pub/scm/linux/kernel/git/chao/linux.git feature/cache
head:   cc6a23d8c232f588f3a5415d1b10a19e1e4ce860
commit: 843ddf01eb4efc800bdac9de795bdeb57940a3e0 [6/13] f2fs: cache: use meta cache
:::::: branch date: 18 hours ago
:::::: commit date: 18 hours ago
config: x86_64-randconfig-161-20260819 (https://download.01.org/0day-ci/archive/20260819/202608191338.E8L1n0k3-lkp@intel.com/config)
compiler: clang version 22.1.3 (https://github.com/llvm/llvm-project e9846648fd6183ee6d8cbdb4502213fcf902a211)
smatch: v0.5.0-9187-g5189e3fb

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>
| Reported-by: Dan Carpenter <error27@gmail.com>
| Closes: https://lore.kernel.org/r/202608191338.E8L1n0k3-lkp@intel.com/

New smatch warnings:
fs/f2fs/gc.c:1897 do_garbage_collect() error: 'sum_entry' dereferencing possible ERR_PTR()
fs/f2fs/segment.c:4617 write_compacted_summaries() warn: variable dereferenced before check 'entry' (see line 4600)

Old smatch warnings:
fs/f2fs/gc.c:819 f2fs_get_victim() warn: check sign expansion for '-1'
fs/f2fs/gc.c:1298 ra_data_block() warn: missing error code 'err'
fs/f2fs/segment.c:874 __remove_dirty_segment() warn: check sign expansion for '-1'

vim +/sum_entry +1897 fs/f2fs/gc.c

7bc0900347e069 Jaegeuk Kim    2012-11-02  1772  
718e53fa633f84 Chao Yu        2016-01-23  1773  static int do_garbage_collect(struct f2fs_sb_info *sbi,
718e53fa633f84 Chao Yu        2016-01-23  1774  				unsigned int start_segno,
7dede88659df38 Chao Yu        2021-02-20  1775  				struct gc_inode_list *gc_list, int gc_type,
9748c2ddea4a3f Daeho Jeong    2024-09-09  1776  				bool force_migrate, bool one_time)
7bc0900347e069 Jaegeuk Kim    2012-11-02  1777  {
c718379b6b0954 Jaegeuk Kim    2013-04-24  1778  	struct blk_plug plug;
718e53fa633f84 Chao Yu        2016-01-23  1779  	unsigned int segno = start_segno;
a60108f7dfb586 Jaegeuk Kim    2024-02-06  1780  	unsigned int end_segno = start_segno + SEGS_PER_SEC(sbi);
8c890c4c603427 Daeho Jeong    2024-09-09  1781  	unsigned int sec_end_segno;
e3080b0120a15e Chao Yu        2018-10-24  1782  	int seg_freed = 0, migrated = 0;
5dfb768326b95c Daeho Jeong    2026-05-14  1783  	unsigned char type;
5dfb768326b95c Daeho Jeong    2026-05-14  1784  	unsigned char data_type;
7ee8bc3942f209 Daeho Jeong    2025-11-11  1785  	int submitted = 0, sum_blk_cnt;
7bc0900347e069 Jaegeuk Kim    2012-11-02  1786  
8c890c4c603427 Daeho Jeong    2024-09-09  1787  	if (__is_large_section(sbi)) {
8c890c4c603427 Daeho Jeong    2024-09-09  1788  		sec_end_segno = rounddown(end_segno, SEGS_PER_SEC(sbi));
e3080b0120a15e Chao Yu        2018-10-24  1789  
de881df97768d0 Aravind Ramesh 2020-07-16  1790  		/*
de881df97768d0 Aravind Ramesh 2020-07-16  1791  		 * zone-capacity can be less than zone-size in zoned devices,
de881df97768d0 Aravind Ramesh 2020-07-16  1792  		 * resulting in less than expected usable segments in the zone,
8c890c4c603427 Daeho Jeong    2024-09-09  1793  		 * calculate the end segno in the zone which can be garbage
8c890c4c603427 Daeho Jeong    2024-09-09  1794  		 * collected
de881df97768d0 Aravind Ramesh 2020-07-16  1795  		 */
de881df97768d0 Aravind Ramesh 2020-07-16  1796  		if (f2fs_sb_has_blkzoned(sbi))
8c890c4c603427 Daeho Jeong    2024-09-09  1797  			sec_end_segno -= SEGS_PER_SEC(sbi) -
2af583afcf9d54 liuderong      2024-09-11  1798  					f2fs_usable_segs_in_sec(sbi);
de881df97768d0 Aravind Ramesh 2020-07-16  1799  
9748c2ddea4a3f Daeho Jeong    2024-09-09  1800  		if (gc_type == BG_GC || one_time) {
2223fe652f7596 Daeho Jeong    2024-09-09  1801  			unsigned int window_granularity =
8c890c4c603427 Daeho Jeong    2024-09-09  1802  				sbi->migration_window_granularity;
8c890c4c603427 Daeho Jeong    2024-09-09  1803  
2223fe652f7596 Daeho Jeong    2024-09-09  1804  			if (f2fs_sb_has_blkzoned(sbi) &&
2223fe652f7596 Daeho Jeong    2024-09-09  1805  					!has_enough_free_blocks(sbi,
3d7bca9d583793 Chao Yu        2026-07-06  1806  					sbi->gc_thread.boost_zoned_gc_percent))
9a481a1c16f465 Daeho Jeong    2024-09-09  1807  				window_granularity *=
3d7bca9d583793 Chao Yu        2026-07-06  1808  					sbi->gc_thread.boost_gc_multiple;
2223fe652f7596 Daeho Jeong    2024-09-09  1809  
2223fe652f7596 Daeho Jeong    2024-09-09  1810  			end_segno = start_segno + window_granularity;
2223fe652f7596 Daeho Jeong    2024-09-09  1811  		}
2223fe652f7596 Daeho Jeong    2024-09-09  1812  
8c890c4c603427 Daeho Jeong    2024-09-09  1813  		if (end_segno > sec_end_segno)
8c890c4c603427 Daeho Jeong    2024-09-09  1814  			end_segno = sec_end_segno;
8c890c4c603427 Daeho Jeong    2024-09-09  1815  	}
8c890c4c603427 Daeho Jeong    2024-09-09  1816  
093749e296e29a Chao Yu        2020-08-04  1817  	sanity_check_seg_type(sbi, get_seg_entry(sbi, segno)->type);
093749e296e29a Chao Yu        2020-08-04  1818  
e48e16f3e37fac Daeho Jeong    2026-01-10  1819  	segno = rounddown(segno, sbi->sums_per_block);
e48e16f3e37fac Daeho Jeong    2026-01-10  1820  	sum_blk_cnt = DIV_ROUND_UP(end_segno - segno, sbi->sums_per_block);
718e53fa633f84 Chao Yu        2016-01-23  1821  	/* readahead multi ssa blocks those have contiguous address */
2c70c5e3874e8c Chao Yu        2018-10-24  1822  	if (__is_large_section(sbi))
843ddf01eb4efc Chao Yu        2026-08-18  1823  		f2fs_ra_meta_caches(sbi, GET_SUM_BLOCK(sbi, segno),
7ee8bc3942f209 Daeho Jeong    2025-11-11  1824  					sum_blk_cnt, META_SSA, true);
718e53fa633f84 Chao Yu        2016-01-23  1825  
718e53fa633f84 Chao Yu        2016-01-23  1826  	/* reference all summary page */
718e53fa633f84 Chao Yu        2016-01-23  1827  	while (segno < end_segno) {
843ddf01eb4efc Chao Yu        2026-08-18  1828  		struct f2fs_cached_block *sum_entry =
843ddf01eb4efc Chao Yu        2026-08-18  1829  				f2fs_get_sum_cache(sbi, segno);
7ee8bc3942f209 Daeho Jeong    2025-11-11  1830  
e48e16f3e37fac Daeho Jeong    2026-01-10  1831  		segno += sbi->sums_per_block;
843ddf01eb4efc Chao Yu        2026-08-18  1832  		if (IS_ERR(sum_entry)) {
843ddf01eb4efc Chao Yu        2026-08-18  1833  			int err = PTR_ERR(sum_entry);
edc55aaf0d1712 Jaegeuk Kim    2018-09-17  1834  
e48e16f3e37fac Daeho Jeong    2026-01-10  1835  			end_segno = segno - sbi->sums_per_block;
e48e16f3e37fac Daeho Jeong    2026-01-10  1836  			segno = rounddown(start_segno, sbi->sums_per_block);
7ee8bc3942f209 Daeho Jeong    2025-11-11  1837  			while (segno < end_segno) {
843ddf01eb4efc Chao Yu        2026-08-18  1838  				sum_entry = f2fs_find_meta_cache(sbi,
edc55aaf0d1712 Jaegeuk Kim    2018-09-17  1839  						GET_SUM_BLOCK(sbi, segno));
843ddf01eb4efc Chao Yu        2026-08-18  1840  				f2fs_put_cache(sum_entry, false);
843ddf01eb4efc Chao Yu        2026-08-18  1841  				f2fs_put_cache(sum_entry, false);
e48e16f3e37fac Daeho Jeong    2026-01-10  1842  				segno += sbi->sums_per_block;
edc55aaf0d1712 Jaegeuk Kim    2018-09-17  1843  			}
edc55aaf0d1712 Jaegeuk Kim    2018-09-17  1844  			return err;
edc55aaf0d1712 Jaegeuk Kim    2018-09-17  1845  		}
843ddf01eb4efc Chao Yu        2026-08-18  1846  		f2fs_unlock_cache(sum_entry);
843ddf01eb4efc Chao Yu        2026-08-18  1847  
718e53fa633f84 Chao Yu        2016-01-23  1848  	}
7bc0900347e069 Jaegeuk Kim    2012-11-02  1849  
c718379b6b0954 Jaegeuk Kim    2013-04-24  1850  	blk_start_plug(&plug);
c718379b6b0954 Jaegeuk Kim    2013-04-24  1851  
7ee8bc3942f209 Daeho Jeong    2025-11-11  1852  	segno = start_segno;
7ee8bc3942f209 Daeho Jeong    2025-11-11  1853  	while (segno < end_segno) {
7ee8bc3942f209 Daeho Jeong    2025-11-11  1854  		unsigned int cur_segno;
843ddf01eb4efc Chao Yu        2026-08-18  1855  		unsigned int block_end_segno;
aa987273290d20 Jaegeuk Kim    2016-06-06  1856  
718e53fa633f84 Chao Yu        2016-01-23  1857  		/* find segment summary of victim */
843ddf01eb4efc Chao Yu        2026-08-18  1858  		struct f2fs_cached_block *sum_entry =
843ddf01eb4efc Chao Yu        2026-08-18  1859  				f2fs_find_meta_cache(sbi,
718e53fa633f84 Chao Yu        2016-01-23  1860  					GET_SUM_BLOCK(sbi, segno));
843ddf01eb4efc Chao Yu        2026-08-18  1861  
843ddf01eb4efc Chao Yu        2026-08-18  1862  		f2fs_bug_on(sbi, IS_ERR(sum_entry));
843ddf01eb4efc Chao Yu        2026-08-18  1863  
843ddf01eb4efc Chao Yu        2026-08-18  1864  		block_end_segno = rounddown(segno, sbi->sums_per_block)
e48e16f3e37fac Daeho Jeong    2026-01-10  1865  					+ sbi->sums_per_block;
7ee8bc3942f209 Daeho Jeong    2025-11-11  1866  
7ee8bc3942f209 Daeho Jeong    2025-11-11  1867  		if (block_end_segno > end_segno)
7ee8bc3942f209 Daeho Jeong    2025-11-11  1868  			block_end_segno = end_segno;
718e53fa633f84 Chao Yu        2016-01-23  1869  
d625a2b08c0893 Chao Yu        2025-09-01  1870  		if (is_cursec(sbi, GET_SEC_FROM_SEG(sbi, segno))) {
d625a2b08c0893 Chao Yu        2025-09-01  1871  			f2fs_err(sbi, "%s: segment %u is used by log",
d625a2b08c0893 Chao Yu        2025-09-01  1872  							__func__, segno);
d625a2b08c0893 Chao Yu        2025-09-01  1873  			f2fs_bug_on(sbi, 1);
7ee8bc3942f209 Daeho Jeong    2025-11-11  1874  			goto next_block;
d625a2b08c0893 Chao Yu        2025-09-01  1875  		}
d625a2b08c0893 Chao Yu        2025-09-01  1876  
843ddf01eb4efc Chao Yu        2026-08-18  1877  		if (!f2fs_cache_test_uptodate(sum_entry) ||
7ee8bc3942f209 Daeho Jeong    2025-11-11  1878  			unlikely(f2fs_cp_error(sbi)))
7ee8bc3942f209 Daeho Jeong    2025-11-11  1879  			goto next_block;
7ee8bc3942f209 Daeho Jeong    2025-11-11  1880  
7ee8bc3942f209 Daeho Jeong    2025-11-11  1881  		for (cur_segno = segno; cur_segno < block_end_segno;
7ee8bc3942f209 Daeho Jeong    2025-11-11  1882  				cur_segno++) {
7ee8bc3942f209 Daeho Jeong    2025-11-11  1883  			struct f2fs_summary_block *sum;
7ee8bc3942f209 Daeho Jeong    2025-11-11  1884  
7ee8bc3942f209 Daeho Jeong    2025-11-11  1885  			if (get_valid_blocks(sbi, cur_segno, false) == 0)
d6c66cd19ef322 Yunlong Song   2018-10-24  1886  				goto freed;
dabfbbc8f91450 Jaegeuk Kim    2020-02-09  1887  			if (gc_type == BG_GC && __is_large_section(sbi) &&
e3080b0120a15e Chao Yu        2018-10-24  1888  					migrated >= sbi->migration_granularity)
7ee8bc3942f209 Daeho Jeong    2025-11-11  1889  				continue;
de0dcc40f6e24d Jaegeuk Kim    2016-10-12  1890  
5dfb768326b95c Daeho Jeong    2026-05-14  1891  			if (migrated == 0) {
5dfb768326b95c Daeho Jeong    2026-05-14  1892  				type = IS_DATASEG(get_seg_entry(sbi, cur_segno)->type) ?
5dfb768326b95c Daeho Jeong    2026-05-14  1893  							SUM_TYPE_DATA : SUM_TYPE_NODE;
5dfb768326b95c Daeho Jeong    2026-05-14  1894  				data_type = (type == SUM_TYPE_DATA) ? DATA : NODE;
5dfb768326b95c Daeho Jeong    2026-05-14  1895  			}
5dfb768326b95c Daeho Jeong    2026-05-14  1896  
843ddf01eb4efc Chao Yu        2026-08-18 @1897  			sum = SUM_BLK_ENTRY_ADDR(sbi, sum_entry, cur_segno);
e48e16f3e37fac Daeho Jeong    2026-01-10  1898  			if (type != GET_SUM_TYPE(sum_footer(sbi, sum))) {
7ee8bc3942f209 Daeho Jeong    2025-11-11  1899  				f2fs_err(sbi, "Inconsistent segment (%u) type "
98fd20b9cf472d Chao Yu        2026-06-15  1900  						"[%d, %d] in SIT and SSA",
7ee8bc3942f209 Daeho Jeong    2025-11-11  1901  						cur_segno, type,
e48e16f3e37fac Daeho Jeong    2026-01-10  1902  						GET_SUM_TYPE(
e48e16f3e37fac Daeho Jeong    2026-01-10  1903  						sum_footer(sbi, sum)));
a9cfee0ef98e99 Chao Yu        2022-09-28  1904  				f2fs_stop_checkpoint(sbi, false,
a9cfee0ef98e99 Chao Yu        2022-09-28  1905  						STOP_CP_REASON_CORRUPTED_SUMMARY);
7ee8bc3942f209 Daeho Jeong    2025-11-11  1906  				continue;
10d255c3540239 Chao Yu        2018-07-04  1907  			}
7bc0900347e069 Jaegeuk Kim    2012-11-02  1908  
9236cac5666ea8 Jaegeuk Kim    2015-05-28  1909  			/*
9236cac5666ea8 Jaegeuk Kim    2015-05-28  1910  			 * this is to avoid deadlock:
9236cac5666ea8 Jaegeuk Kim    2015-05-28  1911  			 *  - lock_page(sum_page)     - f2fs_replace_block
3d26fa6be3c487 Chao Yu        2017-10-30  1912  			 *   - check_valid_map()        - down_write(sentry_lock)
3d26fa6be3c487 Chao Yu        2017-10-30  1913  			 *    - down_read(sentry_lock) - change_curseg()
9236cac5666ea8 Jaegeuk Kim    2015-05-28  1914  			 *                               - lock_page(sum_page)
9236cac5666ea8 Jaegeuk Kim    2015-05-28  1915  			 */
718e53fa633f84 Chao Yu        2016-01-23  1916  			if (type == SUM_TYPE_NODE)
7ee8bc3942f209 Daeho Jeong    2025-11-11  1917  				submitted += gc_node_segment(sbi, sum->entries,
7ec199117c3254 Daeho Jeong    2025-12-30  1918  						cur_segno, gc_type, &plug);
48018b4cfd07dd Chao Yu        2018-09-13  1919  			else
7ee8bc3942f209 Daeho Jeong    2025-11-11  1920  				submitted += gc_data_segment(sbi, sum->entries,
7ee8bc3942f209 Daeho Jeong    2025-11-11  1921  						gc_list, cur_segno,
7ec199117c3254 Daeho Jeong    2025-12-30  1922  						gc_type, force_migrate, &plug);
c718379b6b0954 Jaegeuk Kim    2013-04-24  1923  
9bf1dcbdfdc889 Chao Yu        2023-08-08  1924  			stat_inc_gc_seg_count(sbi, data_type, gc_type);
07c6b5933ebf58 Daeho Jeong    2021-07-09  1925  			sbi->gc_reclaimed_segs[sbi->gc_mode]++;
8c7b9ac129d096 Jaegeuk Kim    2020-02-09  1926  			migrated++;
c56f16dab0dfc8 Chao Yu        2017-08-11  1927  
d6c66cd19ef322 Yunlong Song   2018-10-24  1928  freed:
c56f16dab0dfc8 Chao Yu        2017-08-11  1929  			if (gc_type == FG_GC &&
7ee8bc3942f209 Daeho Jeong    2025-11-11  1930  					get_valid_blocks(sbi, cur_segno, false) == 0)
c56f16dab0dfc8 Chao Yu        2017-08-11  1931  				seg_freed++;
e3080b0120a15e Chao Yu        2018-10-24  1932  
e219aecfd4b766 Yonggil Song   2022-11-22  1933  			if (__is_large_section(sbi))
e219aecfd4b766 Yonggil Song   2022-11-22  1934  				sbi->next_victim_seg[gc_type] =
7ee8bc3942f209 Daeho Jeong    2025-11-11  1935  					(cur_segno + 1 < sec_end_segno) ?
7ee8bc3942f209 Daeho Jeong    2025-11-11  1936  					cur_segno + 1 : NULL_SEGNO;
02d91398a602c3 Daeho Jeong    2026-03-16  1937  
02d91398a602c3 Daeho Jeong    2026-03-16  1938  			if (unlikely(freezing(current))) {
843ddf01eb4efc Chao Yu        2026-08-18  1939  				f2fs_put_cache(sum_entry, false);
843ddf01eb4efc Chao Yu        2026-08-18  1940  				f2fs_put_cache(sum_entry, false);
02d91398a602c3 Daeho Jeong    2026-03-16  1941  				goto stop;
02d91398a602c3 Daeho Jeong    2026-03-16  1942  			}
7ee8bc3942f209 Daeho Jeong    2025-11-11  1943  		}
7ee8bc3942f209 Daeho Jeong    2025-11-11  1944  next_block:
843ddf01eb4efc Chao Yu        2026-08-18  1945  		f2fs_put_cache(sum_entry, false);
843ddf01eb4efc Chao Yu        2026-08-18  1946  		f2fs_put_cache(sum_entry, false);
7ee8bc3942f209 Daeho Jeong    2025-11-11  1947  		segno = block_end_segno;
718e53fa633f84 Chao Yu        2016-01-23  1948  	}
718e53fa633f84 Chao Yu        2016-01-23  1949  
02d91398a602c3 Daeho Jeong    2026-03-16  1950  stop:
48018b4cfd07dd Chao Yu        2018-09-13  1951  	if (submitted)
9bf1dcbdfdc889 Chao Yu        2023-08-08  1952  		f2fs_submit_merged_write(sbi, data_type);
718e53fa633f84 Chao Yu        2016-01-23  1953  
718e53fa633f84 Chao Yu        2016-01-23  1954  	blk_finish_plug(&plug);
718e53fa633f84 Chao Yu        2016-01-23  1955  
9bf1dcbdfdc889 Chao Yu        2023-08-08  1956  	if (migrated)
9bf1dcbdfdc889 Chao Yu        2023-08-08  1957  		stat_inc_gc_sec_count(sbi, data_type, gc_type);
17d899df4678a1 Chao Yu        2016-02-22  1958  
c56f16dab0dfc8 Chao Yu        2017-08-11  1959  	return seg_freed;
7bc0900347e069 Jaegeuk Kim    2012-11-02  1960  }
7bc0900347e069 Jaegeuk Kim    2012-11-02  1961  

--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki

^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2026-08-19  5:55 UTC | newest]

Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-08-19  5:55 [chao:feature/cache 6/13] fs/f2fs/gc.c:1897 do_garbage_collect() error: 'sum_entry' dereferencing possible ERR_PTR() kernel test robot

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.