[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <202211032026.5evXv203-lkp@intel.com>
Date: Thu, 3 Nov 2022 20:58:34 +0800
From: kernel test robot <lkp@...el.com>
To: Gao Xiang <hsiangkao@...ux.alibaba.com>, linux-xfs@...r.kernel.org,
"Darrick J. Wong" <djwong@...nel.org>,
Dave Chinner <dchinner@...hat.com>,
Brian Foster <bfoster@...hat.com>
Cc: oe-kbuild-all@...ts.linux.dev, LKML <linux-kernel@...r.kernel.org>,
Zirong Lang <zlang@...hat.com>,
Gao Xiang <hsiangkao@...ux.alibaba.com>
Subject: Re: [PATCH] xfs: extend the freelist before available space check
Hi Gao,
I love your patch! Perhaps something to improve:
[auto build test WARNING on xfs-linux/for-next]
[also build test WARNING on linus/master v6.1-rc3 next-20221103]
[cannot apply to djwong-xfs/djwong-devel]
[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/Gao-Xiang/xfs-extend-the-freelist-before-available-space-check/20221103-174840
base: https://git.kernel.org/pub/scm/fs/xfs/xfs-linux.git for-next
patch link: https://lore.kernel.org/r/20221103094639.39984-1-hsiangkao%40linux.alibaba.com
patch subject: [PATCH] xfs: extend the freelist before available space check
config: sparc-allyesconfig
compiler: sparc64-linux-gcc (GCC) 12.1.0
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
# https://github.com/intel-lab-lkp/linux/commit/427b4db33a93f832a6da62b2838bd5a558d024d9
git remote add linux-review https://github.com/intel-lab-lkp/linux
git fetch --no-tags linux-review Gao-Xiang/xfs-extend-the-freelist-before-available-space-check/20221103-174840
git checkout 427b4db33a93f832a6da62b2838bd5a558d024d9
# save the config file
mkdir build_dir && cp config build_dir/.config
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-12.1.0 make.cross W=1 O=build_dir ARCH=sparc SHELL=/bin/bash fs/
If you fix the issue, kindly add following tag where applicable
| Reported-by: kernel test robot <lkp@...el.com>
All warnings (new ones prefixed by >>):
>> fs/xfs/libxfs/xfs_alloc.c:2597:1: warning: no previous prototype for 'xfs_fill_agfl' [-Wmissing-prototypes]
2597 | xfs_fill_agfl(
| ^~~~~~~~~~~~~
vim +/xfs_fill_agfl +2597 fs/xfs/libxfs/xfs_alloc.c
2585
2586 /*
2587 * The freelist has to be in a good state before the available space check
2588 * since multiple allocations could be performed from a single AG and
2589 * transaction under certain conditions. For example, A bmbt allocation
2590 * request made for inode extent to bmap format conversion after an extent
2591 * allocation is expected to be satisfied by the same AG. Such bmap conversion
2592 * allocation can fail due to the available space check if allocbt required an
2593 * extra btree block from the freelist in the previous allocation but without
2594 * make the freelist longer.
2595 */
2596 int
> 2597 xfs_fill_agfl(
2598 struct xfs_alloc_arg *args,
2599 int flags,
2600 xfs_extlen_t need,
2601 struct xfs_buf *agbp)
2602 {
2603 struct xfs_trans *tp = args->tp;
2604 struct xfs_perag *pag = agbp->b_pag;
2605 struct xfs_alloc_arg targs = {
2606 .tp = tp,
2607 .mp = tp->t_mountp,
2608 .agbp = agbp,
2609 .agno = args->agno,
2610 .alignment = 1,
2611 .minlen = 1,
2612 .prod = 1,
2613 .type = XFS_ALLOCTYPE_THIS_AG,
2614 .pag = pag,
2615 };
2616 struct xfs_buf *agflbp = NULL;
2617 xfs_agblock_t bno;
2618 int error;
2619
2620 if (flags & XFS_ALLOC_FLAG_NORMAP)
2621 targs.oinfo = XFS_RMAP_OINFO_SKIP_UPDATE;
2622 else
2623 targs.oinfo = XFS_RMAP_OINFO_AG;
2624
2625 error = xfs_alloc_read_agfl(pag, tp, &agflbp);
2626 if (error)
2627 return error;
2628
2629 /* Make the freelist longer if it's too short. */
2630 while (pag->pagf_flcount < need) {
2631 targs.agbno = 0;
2632 targs.maxlen = need - pag->pagf_flcount;
2633 targs.resv = XFS_AG_RESV_AGFL;
2634
2635 /* Allocate as many blocks as possible at once. */
2636 error = xfs_alloc_ag_vextent(&targs);
2637 if (error)
2638 goto out_agflbp_relse;
2639
2640 /*
2641 * Stop if we run out. Won't happen if callers are obeying
2642 * the restrictions correctly. Can happen for free calls
2643 * on a completely full ag.
2644 */
2645 if (targs.agbno == NULLAGBLOCK) {
2646 if (flags & XFS_ALLOC_FLAG_FREEING)
2647 break;
2648 error = -ENOSPC;
2649 goto out_agflbp_relse;
2650 }
2651 /*
2652 * Put each allocated block on the list.
2653 */
2654 for (bno = targs.agbno; bno < targs.agbno + targs.len; bno++) {
2655 error = xfs_alloc_put_freelist(pag, tp, agbp,
2656 agflbp, bno, 0);
2657 if (error)
2658 goto out_agflbp_relse;
2659 }
2660 }
2661 out_agflbp_relse:
2662 xfs_trans_brelse(tp, agflbp);
2663 return error;
2664 }
2665
--
0-DAY CI Kernel Test Service
https://01.org/lkp
View attachment "config" of type "text/plain" (322188 bytes)
Powered by blists - more mailing lists