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]
.config.gz
Description: application/gzip
_______________________________________________ kbuild mailing list -- [email protected] To unsubscribe send an email to [email protected]
