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.