CC: [email protected]
TO: Harshad Shirwadkar <[email protected]>
CC: 0day robot <[email protected]>

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 <[email protected]>


"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/[email protected]

Attachment: .config.gz
Description: application/gzip

_______________________________________________
kbuild mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to