* [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.