All of lore.kernel.org
 help / color / mirror / Atom feed
From: kernel test robot <lkp@intel.com>
To: kbuild@lists.01.org
Subject: fs/ext4/mballoc.c:929:9: sparse: sparse: context imbalance in 'ext4_mb_choose_next_group' - different lock contexts for basic block
Date: Mon, 01 Feb 2021 09:22:56 +0800	[thread overview]
Message-ID: <202102010954.uegPiSp8-lkp@intel.com> (raw)

[-- Attachment #1: Type: text/plain, Size: 11912 bytes --]

CC: kbuild-all(a)lists.01.org
TO: Harshad Shirwadkar <harshadshirwadkar@gmail.com>
CC: 0day robot <lkp@intel.com>

tree:   https://github.com/0day-ci/linux/commits/UPDATE-20210201-083359/Harshad-Shirwadkar/Improve-group-scanning-in-CR-0-and-CR-1-passes/20210130-063423
head:   f45b77fb0c895083616f2581319210b1aa2726c5
commit: bef684db96416bd93c78a411f74086af1bfd9622 ext4: improve cr 0 / cr 1 group scanning
date:   49 minutes ago
:::::: branch date: 49 minutes ago
:::::: commit date: 49 minutes ago
config: arc-randconfig-s031-20210201 (attached as .config)
compiler: arceb-elf-gcc (GCC) 9.3.0
reproduce:
        wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
        chmod +x ~/bin/make.cross
        # apt-get install sparse
        # sparse version: v0.6.3-215-g0fb77bb6-dirty
        # https://github.com/0day-ci/linux/commit/bef684db96416bd93c78a411f74086af1bfd9622
        git remote add linux-review https://github.com/0day-ci/linux
        git fetch --no-tags linux-review UPDATE-20210201-083359/Harshad-Shirwadkar/Improve-group-scanning-in-CR-0-and-CR-1-passes/20210130-063423
        git checkout bef684db96416bd93c78a411f74086af1bfd9622
        # save the attached .config to linux build tree
        COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-9.3.0 make.cross C=1 CF='-fdiagnostic-prefix -D__CHECK_ENDIAN__' ARCH=arc 

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>


"sparse warnings: (new ones prefixed by >>)"
>> fs/ext4/mballoc.c:929:9: sparse: sparse: context imbalance in 'ext4_mb_choose_next_group' - different lock contexts for basic block
   fs/ext4/mballoc.c:2382:9: sparse: sparse: context imbalance in 'ext4_mb_good_group_nolock' - different lock contexts for basic block

vim +/ext4_mb_choose_next_group +929 fs/ext4/mballoc.c

bef684db96416b Harshad Shirwadkar 2021-01-29  809  
bef684db96416b Harshad Shirwadkar 2021-01-29  810  /*
bef684db96416b Harshad Shirwadkar 2021-01-29  811   * ext4_mb_choose_next_group: choose next group for allocation.
bef684db96416b Harshad Shirwadkar 2021-01-29  812   *
bef684db96416b Harshad Shirwadkar 2021-01-29  813   * @ac        Allocation Context
bef684db96416b Harshad Shirwadkar 2021-01-29  814   * @new_cr    This is an output parameter. If the there is no good group available
bef684db96416b Harshad Shirwadkar 2021-01-29  815   *            at current CR level, this field is updated to indicate the new cr
bef684db96416b Harshad Shirwadkar 2021-01-29  816   *            level that should be used.
bef684db96416b Harshad Shirwadkar 2021-01-29  817   * @group     This is an input / output parameter. As an input it indicates the last
bef684db96416b Harshad Shirwadkar 2021-01-29  818   *            group used for allocation. As output, this field indicates the
bef684db96416b Harshad Shirwadkar 2021-01-29  819   *            next group that should be used.
bef684db96416b Harshad Shirwadkar 2021-01-29  820   * @ngroups   Total number of groups
bef684db96416b Harshad Shirwadkar 2021-01-29  821   */
bef684db96416b Harshad Shirwadkar 2021-01-29  822  static void ext4_mb_choose_next_group(struct ext4_allocation_context *ac,
bef684db96416b Harshad Shirwadkar 2021-01-29  823  		int *new_cr, ext4_group_t *group, ext4_group_t ngroups)
bef684db96416b Harshad Shirwadkar 2021-01-29  824  {
bef684db96416b Harshad Shirwadkar 2021-01-29  825  	struct ext4_sb_info *sbi = EXT4_SB(ac->ac_sb);
bef684db96416b Harshad Shirwadkar 2021-01-29  826  	int avg_fragment_size, best_so_far, i;
bef684db96416b Harshad Shirwadkar 2021-01-29  827  	struct rb_node *node, *found;
bef684db96416b Harshad Shirwadkar 2021-01-29  828  	struct ext4_group_info *grp;
bef684db96416b Harshad Shirwadkar 2021-01-29  829  
bef684db96416b Harshad Shirwadkar 2021-01-29  830  	*new_cr = ac->ac_criteria;
bef684db96416b Harshad Shirwadkar 2021-01-29  831  	if (*new_cr >= 2 ||
bef684db96416b Harshad Shirwadkar 2021-01-29  832  	    !ext4_test_inode_flag(ac->ac_inode, EXT4_INODE_EXTENTS))
bef684db96416b Harshad Shirwadkar 2021-01-29  833  		goto inc_and_return;
bef684db96416b Harshad Shirwadkar 2021-01-29  834  
bef684db96416b Harshad Shirwadkar 2021-01-29  835  	/*
bef684db96416b Harshad Shirwadkar 2021-01-29  836  	 * If there is contention on the lock, instead of waiting for the lock
bef684db96416b Harshad Shirwadkar 2021-01-29  837  	 * to become available, just continue searching lineraly.
bef684db96416b Harshad Shirwadkar 2021-01-29  838  	 */
bef684db96416b Harshad Shirwadkar 2021-01-29  839  	if (!read_trylock(&sbi->s_mb_rb_lock))
bef684db96416b Harshad Shirwadkar 2021-01-29  840  		goto inc_and_return;
bef684db96416b Harshad Shirwadkar 2021-01-29  841  
bef684db96416b Harshad Shirwadkar 2021-01-29  842  	if (*new_cr == 0) {
bef684db96416b Harshad Shirwadkar 2021-01-29  843  		grp = NULL;
bef684db96416b Harshad Shirwadkar 2021-01-29  844  
bef684db96416b Harshad Shirwadkar 2021-01-29  845  		if (ac->ac_status == AC_STATUS_FOUND)
bef684db96416b Harshad Shirwadkar 2021-01-29  846  			goto inc_and_return;
bef684db96416b Harshad Shirwadkar 2021-01-29  847  
bef684db96416b Harshad Shirwadkar 2021-01-29  848  		for (i = ac->ac_2order; i < MB_NUM_ORDERS(ac->ac_sb); i++) {
bef684db96416b Harshad Shirwadkar 2021-01-29  849  			if (list_empty(&sbi->s_mb_largest_free_orders[i]))
bef684db96416b Harshad Shirwadkar 2021-01-29  850  				continue;
bef684db96416b Harshad Shirwadkar 2021-01-29  851  			grp = list_first_entry(&sbi->s_mb_largest_free_orders[i],
bef684db96416b Harshad Shirwadkar 2021-01-29  852  					       struct ext4_group_info,
bef684db96416b Harshad Shirwadkar 2021-01-29  853  					       bb_largest_free_order_node);
bef684db96416b Harshad Shirwadkar 2021-01-29  854  			break;
bef684db96416b Harshad Shirwadkar 2021-01-29  855  		}
bef684db96416b Harshad Shirwadkar 2021-01-29  856  
bef684db96416b Harshad Shirwadkar 2021-01-29  857  		if (grp) {
bef684db96416b Harshad Shirwadkar 2021-01-29  858  			*group = grp->bb_group;
bef684db96416b Harshad Shirwadkar 2021-01-29  859  			goto done;
bef684db96416b Harshad Shirwadkar 2021-01-29  860  		}
bef684db96416b Harshad Shirwadkar 2021-01-29  861  		/* Increment cr and search again */
bef684db96416b Harshad Shirwadkar 2021-01-29  862  		*new_cr = 1;
bef684db96416b Harshad Shirwadkar 2021-01-29  863  	}
bef684db96416b Harshad Shirwadkar 2021-01-29  864  
bef684db96416b Harshad Shirwadkar 2021-01-29  865  	/*
bef684db96416b Harshad Shirwadkar 2021-01-29  866  	 * At CR 1, if enough groups are not loaded, we just fallback to
bef684db96416b Harshad Shirwadkar 2021-01-29  867  	 * linear search
bef684db96416b Harshad Shirwadkar 2021-01-29  868  	 */
bef684db96416b Harshad Shirwadkar 2021-01-29  869  	if (atomic_read(&sbi->s_mb_buddies_generated) <
bef684db96416b Harshad Shirwadkar 2021-01-29  870  	    ext4_get_groups_count(ac->ac_sb)) {
bef684db96416b Harshad Shirwadkar 2021-01-29  871  		read_unlock(&sbi->s_mb_rb_lock);
bef684db96416b Harshad Shirwadkar 2021-01-29  872  		goto inc_and_return;
bef684db96416b Harshad Shirwadkar 2021-01-29  873  	}
bef684db96416b Harshad Shirwadkar 2021-01-29  874  
bef684db96416b Harshad Shirwadkar 2021-01-29  875  	if (*new_cr == 1) {
bef684db96416b Harshad Shirwadkar 2021-01-29  876  		if (ac->ac_f_ex.fe_len > 0) {
bef684db96416b Harshad Shirwadkar 2021-01-29  877  			/* We have found something at CR 1 in the past */
bef684db96416b Harshad Shirwadkar 2021-01-29  878  			grp = ext4_get_group_info(ac->ac_sb, ac->ac_last_optimal_group);
bef684db96416b Harshad Shirwadkar 2021-01-29  879  			found = rb_next(&grp->bb_avg_fragment_size_rb);
bef684db96416b Harshad Shirwadkar 2021-01-29  880  			if (found) {
bef684db96416b Harshad Shirwadkar 2021-01-29  881  				grp = rb_entry(found, struct ext4_group_info,
bef684db96416b Harshad Shirwadkar 2021-01-29  882  					       bb_avg_fragment_size_rb);
bef684db96416b Harshad Shirwadkar 2021-01-29  883  				*group = grp->bb_group;
bef684db96416b Harshad Shirwadkar 2021-01-29  884  			} else {
bef684db96416b Harshad Shirwadkar 2021-01-29  885  				*new_cr = 2;
bef684db96416b Harshad Shirwadkar 2021-01-29  886  			}
bef684db96416b Harshad Shirwadkar 2021-01-29  887  			goto done;
bef684db96416b Harshad Shirwadkar 2021-01-29  888  		}
bef684db96416b Harshad Shirwadkar 2021-01-29  889  
bef684db96416b Harshad Shirwadkar 2021-01-29  890  		/* This is the first time we are searching in the tree */
bef684db96416b Harshad Shirwadkar 2021-01-29  891  		node = sbi->s_mb_avg_fragment_size_root.rb_node;
bef684db96416b Harshad Shirwadkar 2021-01-29  892  		best_so_far = 0;
bef684db96416b Harshad Shirwadkar 2021-01-29  893  		found = NULL;
bef684db96416b Harshad Shirwadkar 2021-01-29  894  
bef684db96416b Harshad Shirwadkar 2021-01-29  895  		while (node) {
bef684db96416b Harshad Shirwadkar 2021-01-29  896  			grp = rb_entry(node, struct ext4_group_info,
bef684db96416b Harshad Shirwadkar 2021-01-29  897  				bb_avg_fragment_size_rb);
bef684db96416b Harshad Shirwadkar 2021-01-29  898  			avg_fragment_size = grp->bb_fragments ?
bef684db96416b Harshad Shirwadkar 2021-01-29  899  				grp->bb_free / grp->bb_fragments : 0;
bef684db96416b Harshad Shirwadkar 2021-01-29  900  			if (avg_fragment_size > ac->ac_g_ex.fe_len) {
bef684db96416b Harshad Shirwadkar 2021-01-29  901  				if (!best_so_far || avg_fragment_size < best_so_far) {
bef684db96416b Harshad Shirwadkar 2021-01-29  902  					best_so_far = avg_fragment_size;
bef684db96416b Harshad Shirwadkar 2021-01-29  903  					found = node;
bef684db96416b Harshad Shirwadkar 2021-01-29  904  				}
bef684db96416b Harshad Shirwadkar 2021-01-29  905  			}
bef684db96416b Harshad Shirwadkar 2021-01-29  906  			if (avg_fragment_size > ac->ac_g_ex.fe_len)
bef684db96416b Harshad Shirwadkar 2021-01-29  907  				node = node->rb_right;
bef684db96416b Harshad Shirwadkar 2021-01-29  908  			else
bef684db96416b Harshad Shirwadkar 2021-01-29  909  				node = node->rb_left;
bef684db96416b Harshad Shirwadkar 2021-01-29  910  		}
bef684db96416b Harshad Shirwadkar 2021-01-29  911  		if (found) {
bef684db96416b Harshad Shirwadkar 2021-01-29  912  			grp = rb_entry(found, struct ext4_group_info,
bef684db96416b Harshad Shirwadkar 2021-01-29  913  				bb_avg_fragment_size_rb);
bef684db96416b Harshad Shirwadkar 2021-01-29  914  			*group = grp->bb_group;
bef684db96416b Harshad Shirwadkar 2021-01-29  915  		} else {
bef684db96416b Harshad Shirwadkar 2021-01-29  916  			*new_cr = 2;
bef684db96416b Harshad Shirwadkar 2021-01-29  917  		}
bef684db96416b Harshad Shirwadkar 2021-01-29  918  	}
bef684db96416b Harshad Shirwadkar 2021-01-29  919  done:
bef684db96416b Harshad Shirwadkar 2021-01-29  920  	read_unlock(&sbi->s_mb_rb_lock);
bef684db96416b Harshad Shirwadkar 2021-01-29  921  	ac->ac_last_optimal_group = *group;
bef684db96416b Harshad Shirwadkar 2021-01-29  922  	return;
bef684db96416b Harshad Shirwadkar 2021-01-29  923  
bef684db96416b Harshad Shirwadkar 2021-01-29  924  inc_and_return:
bef684db96416b Harshad Shirwadkar 2021-01-29  925  	/*
bef684db96416b Harshad Shirwadkar 2021-01-29  926  	 * Artificially restricted ngroups for non-extent
bef684db96416b Harshad Shirwadkar 2021-01-29  927  	 * files makes group > ngroups possible on first loop.
bef684db96416b Harshad Shirwadkar 2021-01-29  928  	 */
bef684db96416b Harshad Shirwadkar 2021-01-29 @929  	*group = *group + 1;
bef684db96416b Harshad Shirwadkar 2021-01-29  930  	if (*group >= ngroups)
bef684db96416b Harshad Shirwadkar 2021-01-29  931  		*group = 0;
bef684db96416b Harshad Shirwadkar 2021-01-29  932  }
bef684db96416b Harshad Shirwadkar 2021-01-29  933  

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all(a)lists.01.org

[-- Attachment #2: config.gz --]
[-- Type: application/gzip, Size: 26777 bytes --]

                 reply	other threads:[~2021-02-01  1:22 UTC|newest]

Thread overview: [no followups] expand[flat|nested]  mbox.gz  Atom feed

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=202102010954.uegPiSp8-lkp@intel.com \
    --to=lkp@intel.com \
    --cc=kbuild@lists.01.org \
    /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.