From: Chao Yu <yuchao0@huawei.com>
To: kernel test robot <lkp@intel.com>, Chao Yu <chao@kernel.org>
Cc: <kbuild-all@lists.01.org>, <clang-built-linux@googlegroups.com>,
<linux-kernel@vger.kernel.org>, Jaegeuk Kim <jaegeuk@kernel.org>
Subject: Re: fs/f2fs/gc.c:622:12: warning: stack frame size of 3056 bytes in function 'get_victim_by_default'
Date: Mon, 11 Jan 2021 16:23:28 +0800 [thread overview]
Message-ID: <c59ab262-4b64-794c-3dd9-fa571848562a@huawei.com> (raw)
In-Reply-To: <202101092153.mJkwUvtn-lkp@intel.com>
Hello,
Thanks for the report.
I replied for your previous report [1], could you please check that?
[1] https://lore.kernel.org/lkml/8a8ef6b8-84c2-abfe-e758-2fa52a989c72@huawei.com/
That says, in my environment, get_victim_by_default()'s frame size is less than
512 bytes, and also after going through related code, I don't see any obvious
large stack size usage.
Is that issue a powerpc specified issue?
Could you help to verify powerpc compiling with -Wframe-larger-than=512 after
reverting that atgc patch? I mean whether get_victim_by_default() already have
large frame size before applying atgc patch (commit 093749e296e2)?
On 2021/1/9 21:18, kernel test robot wrote:
> Hi Chao,
>
> FYI, the error/warning still remains.
>
> tree: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git master
> head: 996e435fd401de35df62ac943ab9402cfe85c430
> commit: 093749e296e29a4b0162eb925a6701a01e8c9a98 f2fs: support age threshold based garbage collection
> date: 4 months ago
> config: powerpc-randconfig-r033-20210109 (attached as .config)
> compiler: clang version 12.0.0 (https://github.com/llvm/llvm-project bc556e5685c0f97e79fb7b3c6f15cc5062db8e36)
> reproduce (this is a W=1 build):
> wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
> chmod +x ~/bin/make.cross
> # install powerpc cross compiling tool for clang build
> # apt-get install binutils-powerpc-linux-gnu
> # https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=093749e296e29a4b0162eb925a6701a01e8c9a98
> git remote add linus https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
> git fetch --no-tags linus master
> git checkout 093749e296e29a4b0162eb925a6701a01e8c9a98
> # save the attached .config to linux build tree
> COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross ARCH=powerpc
>
> If you fix the issue, kindly add following tag as appropriate
> Reported-by: kernel test robot <lkp@intel.com>
>
> All warnings (new ones prefixed by >>):
>
> arch/powerpc/include/asm/io-defs.h:45:1: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
> DEF_PCI_AC_NORET(insw, (unsigned long p, void *b, unsigned long c),
> ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> arch/powerpc/include/asm/io.h:601:3: note: expanded from macro 'DEF_PCI_AC_NORET'
> __do_##name al; \
> ^~~~~~~~~~~~~~
> <scratch space>:182:1: note: expanded from here
> __do_insw
> ^
> arch/powerpc/include/asm/io.h:542:56: note: expanded from macro '__do_insw'
> #define __do_insw(p, b, n) readsw((PCI_IO_ADDR)_IO_BASE+(p), (b), (n))
> ~~~~~~~~~~~~~~~~~~~~~^
> In file included from fs/f2fs/gc.c:10:
> In file included from include/linux/backing-dev.h:15:
> In file included from include/linux/blkdev.h:13:
> In file included from include/linux/pagemap.h:11:
> In file included from include/linux/highmem.h:10:
> In file included from include/linux/hardirq.h:10:
> In file included from arch/powerpc/include/asm/hardirq.h:6:
> In file included from include/linux/irq.h:20:
> In file included from include/linux/io.h:13:
> In file included from arch/powerpc/include/asm/io.h:604:
> arch/powerpc/include/asm/io-defs.h:47:1: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
> DEF_PCI_AC_NORET(insl, (unsigned long p, void *b, unsigned long c),
> ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> arch/powerpc/include/asm/io.h:601:3: note: expanded from macro 'DEF_PCI_AC_NORET'
> __do_##name al; \
> ^~~~~~~~~~~~~~
> <scratch space>:184:1: note: expanded from here
> __do_insl
> ^
> arch/powerpc/include/asm/io.h:543:56: note: expanded from macro '__do_insl'
> #define __do_insl(p, b, n) readsl((PCI_IO_ADDR)_IO_BASE+(p), (b), (n))
> ~~~~~~~~~~~~~~~~~~~~~^
> In file included from fs/f2fs/gc.c:10:
> In file included from include/linux/backing-dev.h:15:
> In file included from include/linux/blkdev.h:13:
> In file included from include/linux/pagemap.h:11:
> In file included from include/linux/highmem.h:10:
> In file included from include/linux/hardirq.h:10:
> In file included from arch/powerpc/include/asm/hardirq.h:6:
> In file included from include/linux/irq.h:20:
> In file included from include/linux/io.h:13:
> In file included from arch/powerpc/include/asm/io.h:604:
> arch/powerpc/include/asm/io-defs.h:49:1: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
> DEF_PCI_AC_NORET(outsb, (unsigned long p, const void *b, unsigned long c),
> ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> arch/powerpc/include/asm/io.h:601:3: note: expanded from macro 'DEF_PCI_AC_NORET'
> __do_##name al; \
> ^~~~~~~~~~~~~~
> <scratch space>:186:1: note: expanded from here
> __do_outsb
> ^
> arch/powerpc/include/asm/io.h:544:58: note: expanded from macro '__do_outsb'
> #define __do_outsb(p, b, n) writesb((PCI_IO_ADDR)_IO_BASE+(p),(b),(n))
> ~~~~~~~~~~~~~~~~~~~~~^
> In file included from fs/f2fs/gc.c:10:
> In file included from include/linux/backing-dev.h:15:
> In file included from include/linux/blkdev.h:13:
> In file included from include/linux/pagemap.h:11:
> In file included from include/linux/highmem.h:10:
> In file included from include/linux/hardirq.h:10:
> In file included from arch/powerpc/include/asm/hardirq.h:6:
> In file included from include/linux/irq.h:20:
> In file included from include/linux/io.h:13:
> In file included from arch/powerpc/include/asm/io.h:604:
> arch/powerpc/include/asm/io-defs.h:51:1: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
> DEF_PCI_AC_NORET(outsw, (unsigned long p, const void *b, unsigned long c),
> ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> arch/powerpc/include/asm/io.h:601:3: note: expanded from macro 'DEF_PCI_AC_NORET'
> __do_##name al; \
> ^~~~~~~~~~~~~~
> <scratch space>:188:1: note: expanded from here
> __do_outsw
> ^
> arch/powerpc/include/asm/io.h:545:58: note: expanded from macro '__do_outsw'
> #define __do_outsw(p, b, n) writesw((PCI_IO_ADDR)_IO_BASE+(p),(b),(n))
> ~~~~~~~~~~~~~~~~~~~~~^
> In file included from fs/f2fs/gc.c:10:
> In file included from include/linux/backing-dev.h:15:
> In file included from include/linux/blkdev.h:13:
> In file included from include/linux/pagemap.h:11:
> In file included from include/linux/highmem.h:10:
> In file included from include/linux/hardirq.h:10:
> In file included from arch/powerpc/include/asm/hardirq.h:6:
> In file included from include/linux/irq.h:20:
> In file included from include/linux/io.h:13:
> In file included from arch/powerpc/include/asm/io.h:604:
> arch/powerpc/include/asm/io-defs.h:53:1: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
> DEF_PCI_AC_NORET(outsl, (unsigned long p, const void *b, unsigned long c),
> ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> arch/powerpc/include/asm/io.h:601:3: note: expanded from macro 'DEF_PCI_AC_NORET'
> __do_##name al; \
> ^~~~~~~~~~~~~~
> <scratch space>:190:1: note: expanded from here
> __do_outsl
> ^
> arch/powerpc/include/asm/io.h:546:58: note: expanded from macro '__do_outsl'
> #define __do_outsl(p, b, n) writesl((PCI_IO_ADDR)_IO_BASE+(p),(b),(n))
> ~~~~~~~~~~~~~~~~~~~~~^
>>> fs/f2fs/gc.c:622:12: warning: stack frame size of 3056 bytes in function 'get_victim_by_default' [-Wframe-larger-than=]
> static int get_victim_by_default(struct f2fs_sb_info *sbi,
> ^
> 13 warnings generated.
>
>
> vim +/get_victim_by_default +622 fs/f2fs/gc.c
>
> 093749e296e29a4 Chao Yu 2020-08-04 613
> 0a8165d7c2cf139 Jaegeuk Kim 2012-11-29 614 /*
> 111d2495a8a8fbd Masanari Iida 2013-03-19 615 * This function is called from two paths.
> 7bc0900347e069a Jaegeuk Kim 2012-11-02 616 * One is garbage collection and the other is SSR segment selection.
> 7bc0900347e069a Jaegeuk Kim 2012-11-02 617 * When it is called during GC, it just gets a victim segment
> 7bc0900347e069a Jaegeuk Kim 2012-11-02 618 * and it does not remove it from dirty seglist.
> 7bc0900347e069a Jaegeuk Kim 2012-11-02 619 * When it is called from SSR segment selection, it finds a segment
> 7bc0900347e069a Jaegeuk Kim 2012-11-02 620 * which has minimum valid blocks and removes it from dirty seglist.
> 7bc0900347e069a Jaegeuk Kim 2012-11-02 621 */
> 7bc0900347e069a Jaegeuk Kim 2012-11-02 @622 static int get_victim_by_default(struct f2fs_sb_info *sbi,
> 093749e296e29a4 Chao Yu 2020-08-04 623 unsigned int *result, int gc_type, int type,
> 093749e296e29a4 Chao Yu 2020-08-04 624 char alloc_mode, unsigned long long age)
> 7bc0900347e069a Jaegeuk Kim 2012-11-02 625 {
> 7bc0900347e069a Jaegeuk Kim 2012-11-02 626 struct dirty_seglist_info *dirty_i = DIRTY_I(sbi);
> e066b83c9b40f3a Jaegeuk Kim 2017-04-13 627 struct sit_info *sm = SIT_I(sbi);
> 7bc0900347e069a Jaegeuk Kim 2012-11-02 628 struct victim_sel_policy p;
> 3fa565039e3338f Sheng Yong 2016-09-29 629 unsigned int secno, last_victim;
> 04f0b2eaa3b3ee2 Qiuyang Sun 2019-06-05 630 unsigned int last_segment;
> 093749e296e29a4 Chao Yu 2020-08-04 631 unsigned int nsearched;
> 093749e296e29a4 Chao Yu 2020-08-04 632 bool is_atgc;
> 97767500781fae9 Qilong Zhang 2020-06-28 633 int ret = 0;
> 7bc0900347e069a Jaegeuk Kim 2012-11-02 634
> 210f41bc048263d Chao Yu 2014-09-15 635 mutex_lock(&dirty_i->seglist_lock);
> 04f0b2eaa3b3ee2 Qiuyang Sun 2019-06-05 636 last_segment = MAIN_SECS(sbi) * sbi->segs_per_sec;
> 210f41bc048263d Chao Yu 2014-09-15 637
> 7bc0900347e069a Jaegeuk Kim 2012-11-02 638 p.alloc_mode = alloc_mode;
> 093749e296e29a4 Chao Yu 2020-08-04 639 p.age = age;
> 093749e296e29a4 Chao Yu 2020-08-04 640 p.age_threshold = sbi->am.age_threshold;
> 7bc0900347e069a Jaegeuk Kim 2012-11-02 641
> 093749e296e29a4 Chao Yu 2020-08-04 642 retry:
> 093749e296e29a4 Chao Yu 2020-08-04 643 select_policy(sbi, gc_type, type, &p);
> 7bc0900347e069a Jaegeuk Kim 2012-11-02 644 p.min_segno = NULL_SEGNO;
> 093749e296e29a4 Chao Yu 2020-08-04 645 p.oldest_age = 0;
> 3fa565039e3338f Sheng Yong 2016-09-29 646 p.min_cost = get_max_cost(sbi, &p);
> 7bc0900347e069a Jaegeuk Kim 2012-11-02 647
> 093749e296e29a4 Chao Yu 2020-08-04 648 is_atgc = (p.gc_mode == GC_AT || p.alloc_mode == AT_SSR);
> 093749e296e29a4 Chao Yu 2020-08-04 649 nsearched = 0;
> 093749e296e29a4 Chao Yu 2020-08-04 650
> 093749e296e29a4 Chao Yu 2020-08-04 651 if (is_atgc)
> 093749e296e29a4 Chao Yu 2020-08-04 652 SIT_I(sbi)->dirty_min_mtime = ULLONG_MAX;
> 093749e296e29a4 Chao Yu 2020-08-04 653
> e066b83c9b40f3a Jaegeuk Kim 2017-04-13 654 if (*result != NULL_SEGNO) {
> 97767500781fae9 Qilong Zhang 2020-06-28 655 if (!get_valid_blocks(sbi, *result, false)) {
> 97767500781fae9 Qilong Zhang 2020-06-28 656 ret = -ENODATA;
> 97767500781fae9 Qilong Zhang 2020-06-28 657 goto out;
> 97767500781fae9 Qilong Zhang 2020-06-28 658 }
> 97767500781fae9 Qilong Zhang 2020-06-28 659
> 97767500781fae9 Qilong Zhang 2020-06-28 660 if (sec_usage_check(sbi, GET_SEC_FROM_SEG(sbi, *result)))
> 97767500781fae9 Qilong Zhang 2020-06-28 661 ret = -EBUSY;
> 97767500781fae9 Qilong Zhang 2020-06-28 662 else
> e066b83c9b40f3a Jaegeuk Kim 2017-04-13 663 p.min_segno = *result;
> e066b83c9b40f3a Jaegeuk Kim 2017-04-13 664 goto out;
> e066b83c9b40f3a Jaegeuk Kim 2017-04-13 665 }
> e066b83c9b40f3a Jaegeuk Kim 2017-04-13 666
> 97767500781fae9 Qilong Zhang 2020-06-28 667 ret = -ENODATA;
> 3342bb303bf48dd Chao Yu 2015-10-05 668 if (p.max_search == 0)
> 3342bb303bf48dd Chao Yu 2015-10-05 669 goto out;
> 3342bb303bf48dd Chao Yu 2015-10-05 670
> e3080b0120a15e6 Chao Yu 2018-10-24 671 if (__is_large_section(sbi) && p.alloc_mode == LFS) {
> e3080b0120a15e6 Chao Yu 2018-10-24 672 if (sbi->next_victim_seg[BG_GC] != NULL_SEGNO) {
> e3080b0120a15e6 Chao Yu 2018-10-24 673 p.min_segno = sbi->next_victim_seg[BG_GC];
> e3080b0120a15e6 Chao Yu 2018-10-24 674 *result = p.min_segno;
> e3080b0120a15e6 Chao Yu 2018-10-24 675 sbi->next_victim_seg[BG_GC] = NULL_SEGNO;
> e3080b0120a15e6 Chao Yu 2018-10-24 676 goto got_result;
> e3080b0120a15e6 Chao Yu 2018-10-24 677 }
> e3080b0120a15e6 Chao Yu 2018-10-24 678 if (gc_type == FG_GC &&
> e3080b0120a15e6 Chao Yu 2018-10-24 679 sbi->next_victim_seg[FG_GC] != NULL_SEGNO) {
> e3080b0120a15e6 Chao Yu 2018-10-24 680 p.min_segno = sbi->next_victim_seg[FG_GC];
> e3080b0120a15e6 Chao Yu 2018-10-24 681 *result = p.min_segno;
> e3080b0120a15e6 Chao Yu 2018-10-24 682 sbi->next_victim_seg[FG_GC] = NULL_SEGNO;
> e3080b0120a15e6 Chao Yu 2018-10-24 683 goto got_result;
> e3080b0120a15e6 Chao Yu 2018-10-24 684 }
> e3080b0120a15e6 Chao Yu 2018-10-24 685 }
> e3080b0120a15e6 Chao Yu 2018-10-24 686
> e066b83c9b40f3a Jaegeuk Kim 2017-04-13 687 last_victim = sm->last_victim[p.gc_mode];
> 7bc0900347e069a Jaegeuk Kim 2012-11-02 688 if (p.alloc_mode == LFS && gc_type == FG_GC) {
> 7bc0900347e069a Jaegeuk Kim 2012-11-02 689 p.min_segno = check_bg_victims(sbi);
> 7bc0900347e069a Jaegeuk Kim 2012-11-02 690 if (p.min_segno != NULL_SEGNO)
> 7bc0900347e069a Jaegeuk Kim 2012-11-02 691 goto got_it;
> 7bc0900347e069a Jaegeuk Kim 2012-11-02 692 }
> 7bc0900347e069a Jaegeuk Kim 2012-11-02 693
> 7bc0900347e069a Jaegeuk Kim 2012-11-02 694 while (1) {
> da52f8ade40b032 Jack Qiu 2020-06-18 695 unsigned long cost, *dirty_bitmap;
> da52f8ade40b032 Jack Qiu 2020-06-18 696 unsigned int unit_no, segno;
> da52f8ade40b032 Jack Qiu 2020-06-18 697
> da52f8ade40b032 Jack Qiu 2020-06-18 698 dirty_bitmap = p.dirty_bitmap;
> da52f8ade40b032 Jack Qiu 2020-06-18 699 unit_no = find_next_bit(dirty_bitmap,
> da52f8ade40b032 Jack Qiu 2020-06-18 700 last_segment / p.ofs_unit,
> da52f8ade40b032 Jack Qiu 2020-06-18 701 p.offset / p.ofs_unit);
> da52f8ade40b032 Jack Qiu 2020-06-18 702 segno = unit_no * p.ofs_unit;
> a43f7ec327b0d86 Chao Yu 2015-10-05 703 if (segno >= last_segment) {
> e066b83c9b40f3a Jaegeuk Kim 2017-04-13 704 if (sm->last_victim[p.gc_mode]) {
> e066b83c9b40f3a Jaegeuk Kim 2017-04-13 705 last_segment =
> e066b83c9b40f3a Jaegeuk Kim 2017-04-13 706 sm->last_victim[p.gc_mode];
> e066b83c9b40f3a Jaegeuk Kim 2017-04-13 707 sm->last_victim[p.gc_mode] = 0;
> 7bc0900347e069a Jaegeuk Kim 2012-11-02 708 p.offset = 0;
> 7bc0900347e069a Jaegeuk Kim 2012-11-02 709 continue;
> 7bc0900347e069a Jaegeuk Kim 2012-11-02 710 }
> 7bc0900347e069a Jaegeuk Kim 2012-11-02 711 break;
> 7bc0900347e069a Jaegeuk Kim 2012-11-02 712 }
> a57e564d14d9d12 Jin Xu 2013-09-13 713
> a57e564d14d9d12 Jin Xu 2013-09-13 714 p.offset = segno + p.ofs_unit;
> 688159b6db47a9e Fan Li 2016-02-03 715 nsearched++;
> 688159b6db47a9e Fan Li 2016-02-03 716
>
> :::::: The code at line 622 was first introduced by commit
> :::::: 7bc0900347e069a1676d28ad6f98cafaf8cfd6e9 f2fs: add garbage collection functions
>
> :::::: TO: Jaegeuk Kim <jaegeuk.kim@samsung.com>
> :::::: CC: Jaegeuk Kim <jaegeuk.kim@samsung.com>
>
> ---
> 0-DAY CI Kernel Test Service, Intel Corporation
> https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org
>
WARNING: multiple messages have this Message-ID (diff)
From: Chao Yu <yuchao0@huawei.com>
To: kbuild-all@lists.01.org
Subject: Re: fs/f2fs/gc.c:622:12: warning: stack frame size of 3056 bytes in function 'get_victim_by_default'
Date: Mon, 11 Jan 2021 16:23:28 +0800 [thread overview]
Message-ID: <c59ab262-4b64-794c-3dd9-fa571848562a@huawei.com> (raw)
In-Reply-To: <202101092153.mJkwUvtn-lkp@intel.com>
[-- Attachment #1: Type: text/plain, Size: 17120 bytes --]
Hello,
Thanks for the report.
I replied for your previous report [1], could you please check that?
[1] https://lore.kernel.org/lkml/8a8ef6b8-84c2-abfe-e758-2fa52a989c72(a)huawei.com/
That says, in my environment, get_victim_by_default()'s frame size is less than
512 bytes, and also after going through related code, I don't see any obvious
large stack size usage.
Is that issue a powerpc specified issue?
Could you help to verify powerpc compiling with -Wframe-larger-than=512 after
reverting that atgc patch? I mean whether get_victim_by_default() already have
large frame size before applying atgc patch (commit 093749e296e2)?
On 2021/1/9 21:18, kernel test robot wrote:
> Hi Chao,
>
> FYI, the error/warning still remains.
>
> tree: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git master
> head: 996e435fd401de35df62ac943ab9402cfe85c430
> commit: 093749e296e29a4b0162eb925a6701a01e8c9a98 f2fs: support age threshold based garbage collection
> date: 4 months ago
> config: powerpc-randconfig-r033-20210109 (attached as .config)
> compiler: clang version 12.0.0 (https://github.com/llvm/llvm-project bc556e5685c0f97e79fb7b3c6f15cc5062db8e36)
> reproduce (this is a W=1 build):
> wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
> chmod +x ~/bin/make.cross
> # install powerpc cross compiling tool for clang build
> # apt-get install binutils-powerpc-linux-gnu
> # https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=093749e296e29a4b0162eb925a6701a01e8c9a98
> git remote add linus https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
> git fetch --no-tags linus master
> git checkout 093749e296e29a4b0162eb925a6701a01e8c9a98
> # save the attached .config to linux build tree
> COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross ARCH=powerpc
>
> If you fix the issue, kindly add following tag as appropriate
> Reported-by: kernel test robot <lkp@intel.com>
>
> All warnings (new ones prefixed by >>):
>
> arch/powerpc/include/asm/io-defs.h:45:1: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
> DEF_PCI_AC_NORET(insw, (unsigned long p, void *b, unsigned long c),
> ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> arch/powerpc/include/asm/io.h:601:3: note: expanded from macro 'DEF_PCI_AC_NORET'
> __do_##name al; \
> ^~~~~~~~~~~~~~
> <scratch space>:182:1: note: expanded from here
> __do_insw
> ^
> arch/powerpc/include/asm/io.h:542:56: note: expanded from macro '__do_insw'
> #define __do_insw(p, b, n) readsw((PCI_IO_ADDR)_IO_BASE+(p), (b), (n))
> ~~~~~~~~~~~~~~~~~~~~~^
> In file included from fs/f2fs/gc.c:10:
> In file included from include/linux/backing-dev.h:15:
> In file included from include/linux/blkdev.h:13:
> In file included from include/linux/pagemap.h:11:
> In file included from include/linux/highmem.h:10:
> In file included from include/linux/hardirq.h:10:
> In file included from arch/powerpc/include/asm/hardirq.h:6:
> In file included from include/linux/irq.h:20:
> In file included from include/linux/io.h:13:
> In file included from arch/powerpc/include/asm/io.h:604:
> arch/powerpc/include/asm/io-defs.h:47:1: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
> DEF_PCI_AC_NORET(insl, (unsigned long p, void *b, unsigned long c),
> ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> arch/powerpc/include/asm/io.h:601:3: note: expanded from macro 'DEF_PCI_AC_NORET'
> __do_##name al; \
> ^~~~~~~~~~~~~~
> <scratch space>:184:1: note: expanded from here
> __do_insl
> ^
> arch/powerpc/include/asm/io.h:543:56: note: expanded from macro '__do_insl'
> #define __do_insl(p, b, n) readsl((PCI_IO_ADDR)_IO_BASE+(p), (b), (n))
> ~~~~~~~~~~~~~~~~~~~~~^
> In file included from fs/f2fs/gc.c:10:
> In file included from include/linux/backing-dev.h:15:
> In file included from include/linux/blkdev.h:13:
> In file included from include/linux/pagemap.h:11:
> In file included from include/linux/highmem.h:10:
> In file included from include/linux/hardirq.h:10:
> In file included from arch/powerpc/include/asm/hardirq.h:6:
> In file included from include/linux/irq.h:20:
> In file included from include/linux/io.h:13:
> In file included from arch/powerpc/include/asm/io.h:604:
> arch/powerpc/include/asm/io-defs.h:49:1: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
> DEF_PCI_AC_NORET(outsb, (unsigned long p, const void *b, unsigned long c),
> ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> arch/powerpc/include/asm/io.h:601:3: note: expanded from macro 'DEF_PCI_AC_NORET'
> __do_##name al; \
> ^~~~~~~~~~~~~~
> <scratch space>:186:1: note: expanded from here
> __do_outsb
> ^
> arch/powerpc/include/asm/io.h:544:58: note: expanded from macro '__do_outsb'
> #define __do_outsb(p, b, n) writesb((PCI_IO_ADDR)_IO_BASE+(p),(b),(n))
> ~~~~~~~~~~~~~~~~~~~~~^
> In file included from fs/f2fs/gc.c:10:
> In file included from include/linux/backing-dev.h:15:
> In file included from include/linux/blkdev.h:13:
> In file included from include/linux/pagemap.h:11:
> In file included from include/linux/highmem.h:10:
> In file included from include/linux/hardirq.h:10:
> In file included from arch/powerpc/include/asm/hardirq.h:6:
> In file included from include/linux/irq.h:20:
> In file included from include/linux/io.h:13:
> In file included from arch/powerpc/include/asm/io.h:604:
> arch/powerpc/include/asm/io-defs.h:51:1: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
> DEF_PCI_AC_NORET(outsw, (unsigned long p, const void *b, unsigned long c),
> ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> arch/powerpc/include/asm/io.h:601:3: note: expanded from macro 'DEF_PCI_AC_NORET'
> __do_##name al; \
> ^~~~~~~~~~~~~~
> <scratch space>:188:1: note: expanded from here
> __do_outsw
> ^
> arch/powerpc/include/asm/io.h:545:58: note: expanded from macro '__do_outsw'
> #define __do_outsw(p, b, n) writesw((PCI_IO_ADDR)_IO_BASE+(p),(b),(n))
> ~~~~~~~~~~~~~~~~~~~~~^
> In file included from fs/f2fs/gc.c:10:
> In file included from include/linux/backing-dev.h:15:
> In file included from include/linux/blkdev.h:13:
> In file included from include/linux/pagemap.h:11:
> In file included from include/linux/highmem.h:10:
> In file included from include/linux/hardirq.h:10:
> In file included from arch/powerpc/include/asm/hardirq.h:6:
> In file included from include/linux/irq.h:20:
> In file included from include/linux/io.h:13:
> In file included from arch/powerpc/include/asm/io.h:604:
> arch/powerpc/include/asm/io-defs.h:53:1: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
> DEF_PCI_AC_NORET(outsl, (unsigned long p, const void *b, unsigned long c),
> ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> arch/powerpc/include/asm/io.h:601:3: note: expanded from macro 'DEF_PCI_AC_NORET'
> __do_##name al; \
> ^~~~~~~~~~~~~~
> <scratch space>:190:1: note: expanded from here
> __do_outsl
> ^
> arch/powerpc/include/asm/io.h:546:58: note: expanded from macro '__do_outsl'
> #define __do_outsl(p, b, n) writesl((PCI_IO_ADDR)_IO_BASE+(p),(b),(n))
> ~~~~~~~~~~~~~~~~~~~~~^
>>> fs/f2fs/gc.c:622:12: warning: stack frame size of 3056 bytes in function 'get_victim_by_default' [-Wframe-larger-than=]
> static int get_victim_by_default(struct f2fs_sb_info *sbi,
> ^
> 13 warnings generated.
>
>
> vim +/get_victim_by_default +622 fs/f2fs/gc.c
>
> 093749e296e29a4 Chao Yu 2020-08-04 613
> 0a8165d7c2cf139 Jaegeuk Kim 2012-11-29 614 /*
> 111d2495a8a8fbd Masanari Iida 2013-03-19 615 * This function is called from two paths.
> 7bc0900347e069a Jaegeuk Kim 2012-11-02 616 * One is garbage collection and the other is SSR segment selection.
> 7bc0900347e069a Jaegeuk Kim 2012-11-02 617 * When it is called during GC, it just gets a victim segment
> 7bc0900347e069a Jaegeuk Kim 2012-11-02 618 * and it does not remove it from dirty seglist.
> 7bc0900347e069a Jaegeuk Kim 2012-11-02 619 * When it is called from SSR segment selection, it finds a segment
> 7bc0900347e069a Jaegeuk Kim 2012-11-02 620 * which has minimum valid blocks and removes it from dirty seglist.
> 7bc0900347e069a Jaegeuk Kim 2012-11-02 621 */
> 7bc0900347e069a Jaegeuk Kim 2012-11-02 @622 static int get_victim_by_default(struct f2fs_sb_info *sbi,
> 093749e296e29a4 Chao Yu 2020-08-04 623 unsigned int *result, int gc_type, int type,
> 093749e296e29a4 Chao Yu 2020-08-04 624 char alloc_mode, unsigned long long age)
> 7bc0900347e069a Jaegeuk Kim 2012-11-02 625 {
> 7bc0900347e069a Jaegeuk Kim 2012-11-02 626 struct dirty_seglist_info *dirty_i = DIRTY_I(sbi);
> e066b83c9b40f3a Jaegeuk Kim 2017-04-13 627 struct sit_info *sm = SIT_I(sbi);
> 7bc0900347e069a Jaegeuk Kim 2012-11-02 628 struct victim_sel_policy p;
> 3fa565039e3338f Sheng Yong 2016-09-29 629 unsigned int secno, last_victim;
> 04f0b2eaa3b3ee2 Qiuyang Sun 2019-06-05 630 unsigned int last_segment;
> 093749e296e29a4 Chao Yu 2020-08-04 631 unsigned int nsearched;
> 093749e296e29a4 Chao Yu 2020-08-04 632 bool is_atgc;
> 97767500781fae9 Qilong Zhang 2020-06-28 633 int ret = 0;
> 7bc0900347e069a Jaegeuk Kim 2012-11-02 634
> 210f41bc048263d Chao Yu 2014-09-15 635 mutex_lock(&dirty_i->seglist_lock);
> 04f0b2eaa3b3ee2 Qiuyang Sun 2019-06-05 636 last_segment = MAIN_SECS(sbi) * sbi->segs_per_sec;
> 210f41bc048263d Chao Yu 2014-09-15 637
> 7bc0900347e069a Jaegeuk Kim 2012-11-02 638 p.alloc_mode = alloc_mode;
> 093749e296e29a4 Chao Yu 2020-08-04 639 p.age = age;
> 093749e296e29a4 Chao Yu 2020-08-04 640 p.age_threshold = sbi->am.age_threshold;
> 7bc0900347e069a Jaegeuk Kim 2012-11-02 641
> 093749e296e29a4 Chao Yu 2020-08-04 642 retry:
> 093749e296e29a4 Chao Yu 2020-08-04 643 select_policy(sbi, gc_type, type, &p);
> 7bc0900347e069a Jaegeuk Kim 2012-11-02 644 p.min_segno = NULL_SEGNO;
> 093749e296e29a4 Chao Yu 2020-08-04 645 p.oldest_age = 0;
> 3fa565039e3338f Sheng Yong 2016-09-29 646 p.min_cost = get_max_cost(sbi, &p);
> 7bc0900347e069a Jaegeuk Kim 2012-11-02 647
> 093749e296e29a4 Chao Yu 2020-08-04 648 is_atgc = (p.gc_mode == GC_AT || p.alloc_mode == AT_SSR);
> 093749e296e29a4 Chao Yu 2020-08-04 649 nsearched = 0;
> 093749e296e29a4 Chao Yu 2020-08-04 650
> 093749e296e29a4 Chao Yu 2020-08-04 651 if (is_atgc)
> 093749e296e29a4 Chao Yu 2020-08-04 652 SIT_I(sbi)->dirty_min_mtime = ULLONG_MAX;
> 093749e296e29a4 Chao Yu 2020-08-04 653
> e066b83c9b40f3a Jaegeuk Kim 2017-04-13 654 if (*result != NULL_SEGNO) {
> 97767500781fae9 Qilong Zhang 2020-06-28 655 if (!get_valid_blocks(sbi, *result, false)) {
> 97767500781fae9 Qilong Zhang 2020-06-28 656 ret = -ENODATA;
> 97767500781fae9 Qilong Zhang 2020-06-28 657 goto out;
> 97767500781fae9 Qilong Zhang 2020-06-28 658 }
> 97767500781fae9 Qilong Zhang 2020-06-28 659
> 97767500781fae9 Qilong Zhang 2020-06-28 660 if (sec_usage_check(sbi, GET_SEC_FROM_SEG(sbi, *result)))
> 97767500781fae9 Qilong Zhang 2020-06-28 661 ret = -EBUSY;
> 97767500781fae9 Qilong Zhang 2020-06-28 662 else
> e066b83c9b40f3a Jaegeuk Kim 2017-04-13 663 p.min_segno = *result;
> e066b83c9b40f3a Jaegeuk Kim 2017-04-13 664 goto out;
> e066b83c9b40f3a Jaegeuk Kim 2017-04-13 665 }
> e066b83c9b40f3a Jaegeuk Kim 2017-04-13 666
> 97767500781fae9 Qilong Zhang 2020-06-28 667 ret = -ENODATA;
> 3342bb303bf48dd Chao Yu 2015-10-05 668 if (p.max_search == 0)
> 3342bb303bf48dd Chao Yu 2015-10-05 669 goto out;
> 3342bb303bf48dd Chao Yu 2015-10-05 670
> e3080b0120a15e6 Chao Yu 2018-10-24 671 if (__is_large_section(sbi) && p.alloc_mode == LFS) {
> e3080b0120a15e6 Chao Yu 2018-10-24 672 if (sbi->next_victim_seg[BG_GC] != NULL_SEGNO) {
> e3080b0120a15e6 Chao Yu 2018-10-24 673 p.min_segno = sbi->next_victim_seg[BG_GC];
> e3080b0120a15e6 Chao Yu 2018-10-24 674 *result = p.min_segno;
> e3080b0120a15e6 Chao Yu 2018-10-24 675 sbi->next_victim_seg[BG_GC] = NULL_SEGNO;
> e3080b0120a15e6 Chao Yu 2018-10-24 676 goto got_result;
> e3080b0120a15e6 Chao Yu 2018-10-24 677 }
> e3080b0120a15e6 Chao Yu 2018-10-24 678 if (gc_type == FG_GC &&
> e3080b0120a15e6 Chao Yu 2018-10-24 679 sbi->next_victim_seg[FG_GC] != NULL_SEGNO) {
> e3080b0120a15e6 Chao Yu 2018-10-24 680 p.min_segno = sbi->next_victim_seg[FG_GC];
> e3080b0120a15e6 Chao Yu 2018-10-24 681 *result = p.min_segno;
> e3080b0120a15e6 Chao Yu 2018-10-24 682 sbi->next_victim_seg[FG_GC] = NULL_SEGNO;
> e3080b0120a15e6 Chao Yu 2018-10-24 683 goto got_result;
> e3080b0120a15e6 Chao Yu 2018-10-24 684 }
> e3080b0120a15e6 Chao Yu 2018-10-24 685 }
> e3080b0120a15e6 Chao Yu 2018-10-24 686
> e066b83c9b40f3a Jaegeuk Kim 2017-04-13 687 last_victim = sm->last_victim[p.gc_mode];
> 7bc0900347e069a Jaegeuk Kim 2012-11-02 688 if (p.alloc_mode == LFS && gc_type == FG_GC) {
> 7bc0900347e069a Jaegeuk Kim 2012-11-02 689 p.min_segno = check_bg_victims(sbi);
> 7bc0900347e069a Jaegeuk Kim 2012-11-02 690 if (p.min_segno != NULL_SEGNO)
> 7bc0900347e069a Jaegeuk Kim 2012-11-02 691 goto got_it;
> 7bc0900347e069a Jaegeuk Kim 2012-11-02 692 }
> 7bc0900347e069a Jaegeuk Kim 2012-11-02 693
> 7bc0900347e069a Jaegeuk Kim 2012-11-02 694 while (1) {
> da52f8ade40b032 Jack Qiu 2020-06-18 695 unsigned long cost, *dirty_bitmap;
> da52f8ade40b032 Jack Qiu 2020-06-18 696 unsigned int unit_no, segno;
> da52f8ade40b032 Jack Qiu 2020-06-18 697
> da52f8ade40b032 Jack Qiu 2020-06-18 698 dirty_bitmap = p.dirty_bitmap;
> da52f8ade40b032 Jack Qiu 2020-06-18 699 unit_no = find_next_bit(dirty_bitmap,
> da52f8ade40b032 Jack Qiu 2020-06-18 700 last_segment / p.ofs_unit,
> da52f8ade40b032 Jack Qiu 2020-06-18 701 p.offset / p.ofs_unit);
> da52f8ade40b032 Jack Qiu 2020-06-18 702 segno = unit_no * p.ofs_unit;
> a43f7ec327b0d86 Chao Yu 2015-10-05 703 if (segno >= last_segment) {
> e066b83c9b40f3a Jaegeuk Kim 2017-04-13 704 if (sm->last_victim[p.gc_mode]) {
> e066b83c9b40f3a Jaegeuk Kim 2017-04-13 705 last_segment =
> e066b83c9b40f3a Jaegeuk Kim 2017-04-13 706 sm->last_victim[p.gc_mode];
> e066b83c9b40f3a Jaegeuk Kim 2017-04-13 707 sm->last_victim[p.gc_mode] = 0;
> 7bc0900347e069a Jaegeuk Kim 2012-11-02 708 p.offset = 0;
> 7bc0900347e069a Jaegeuk Kim 2012-11-02 709 continue;
> 7bc0900347e069a Jaegeuk Kim 2012-11-02 710 }
> 7bc0900347e069a Jaegeuk Kim 2012-11-02 711 break;
> 7bc0900347e069a Jaegeuk Kim 2012-11-02 712 }
> a57e564d14d9d12 Jin Xu 2013-09-13 713
> a57e564d14d9d12 Jin Xu 2013-09-13 714 p.offset = segno + p.ofs_unit;
> 688159b6db47a9e Fan Li 2016-02-03 715 nsearched++;
> 688159b6db47a9e Fan Li 2016-02-03 716
>
> :::::: The code at line 622 was first introduced by commit
> :::::: 7bc0900347e069a1676d28ad6f98cafaf8cfd6e9 f2fs: add garbage collection functions
>
> :::::: TO: Jaegeuk Kim <jaegeuk.kim@samsung.com>
> :::::: CC: Jaegeuk Kim <jaegeuk.kim@samsung.com>
>
> ---
> 0-DAY CI Kernel Test Service, Intel Corporation
> https://lists.01.org/hyperkitty/list/kbuild-all(a)lists.01.org
>
next prev parent reply other threads:[~2021-01-11 8:24 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-01-09 13:18 fs/f2fs/gc.c:622:12: warning: stack frame size of 3056 bytes in function 'get_victim_by_default' kernel test robot
2021-01-09 13:18 ` kernel test robot
2021-01-11 8:23 ` Chao Yu [this message]
2021-01-11 8:23 ` Chao Yu
2021-01-13 6:03 ` [kbuild-all] " Rong Chen
2021-01-13 6:03 ` Rong Chen
-- strict thread matches above, loose matches on Subject: below --
2020-12-29 18:45 kernel test robot
2020-12-29 18:45 ` kernel test robot
2020-12-31 2:42 ` Chao Yu
2020-12-31 2:42 ` Chao Yu
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=c59ab262-4b64-794c-3dd9-fa571848562a@huawei.com \
--to=yuchao0@huawei.com \
--cc=chao@kernel.org \
--cc=clang-built-linux@googlegroups.com \
--cc=jaegeuk@kernel.org \
--cc=kbuild-all@lists.01.org \
--cc=linux-kernel@vger.kernel.org \
--cc=lkp@intel.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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.