Re: [PATCH -next 3/3] ext4: Use scoped()/scoped_guard() to drop rcu_read_lock()/unlock pair

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Li,

kernel test robot noticed the following build warnings:

[auto build test WARNING on next-20240823]

url:    https://github.com/intel-lab-lkp/linux/commits/Li-Zetao/ext4-Use-scoped-scoped_guard-to-drop-read_lock-unlock-pair/20240826-123331
base:   next-20240823
patch link:    https://lore.kernel.org/r/20240823061824.3323522-4-lizetao1%40huawei.com
patch subject: [PATCH -next 3/3] ext4: Use scoped()/scoped_guard() to drop rcu_read_lock()/unlock pair
config: s390-allmodconfig (https://download.01.org/0day-ci/archive/20240829/202408290407.XQuWf1oH-lkp@xxxxxxxxx/config)
compiler: clang version 20.0.0git (https://github.com/llvm/llvm-project 08e5a1de8227512d4774a534b91cb2353cef6284)
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20240829/202408290407.XQuWf1oH-lkp@xxxxxxxxx/reproduce)

If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@xxxxxxxxx>
| Closes: https://lore.kernel.org/oe-kbuild-all/202408290407.XQuWf1oH-lkp@xxxxxxxxx/

All warnings (new ones prefixed by >>):

   In file included from fs/ext4/mballoc.c:12:
   In file included from fs/ext4/ext4_jbd2.h:16:
   In file included from include/linux/jbd2.h:23:
   In file included from include/linux/buffer_head.h:12:
   In file included from include/linux/blk_types.h:10:
   In file included from include/linux/bvec.h:10:
   In file included from include/linux/highmem.h:10:
   In file included from include/linux/mm.h:2202:
   include/linux/vmstat.h:504:43: warning: arithmetic between different enumeration types ('enum zone_stat_item' and 'enum numa_stat_item') [-Wenum-enum-conversion]
     504 |         return vmstat_text[NR_VM_ZONE_STAT_ITEMS +
         |                            ~~~~~~~~~~~~~~~~~~~~~ ^
     505 |                            item];
         |                            ~~~~
   include/linux/vmstat.h:511:43: warning: arithmetic between different enumeration types ('enum zone_stat_item' and 'enum numa_stat_item') [-Wenum-enum-conversion]
     511 |         return vmstat_text[NR_VM_ZONE_STAT_ITEMS +
         |                            ~~~~~~~~~~~~~~~~~~~~~ ^
     512 |                            NR_VM_NUMA_EVENT_ITEMS +
         |                            ~~~~~~~~~~~~~~~~~~~~~~
   include/linux/vmstat.h:518:36: warning: arithmetic between different enumeration types ('enum node_stat_item' and 'enum lru_list') [-Wenum-enum-conversion]
     518 |         return node_stat_name(NR_LRU_BASE + lru) + 3; // skip "nr_"
         |                               ~~~~~~~~~~~ ^ ~~~
   include/linux/vmstat.h:524:43: warning: arithmetic between different enumeration types ('enum zone_stat_item' and 'enum numa_stat_item') [-Wenum-enum-conversion]
     524 |         return vmstat_text[NR_VM_ZONE_STAT_ITEMS +
         |                            ~~~~~~~~~~~~~~~~~~~~~ ^
     525 |                            NR_VM_NUMA_EVENT_ITEMS +
         |                            ~~~~~~~~~~~~~~~~~~~~~~
>> fs/ext4/mballoc.c:3470:2: warning: label followed by a declaration is a C23 extension [-Wc23-extensions]
    3470 |         guard(rcu)();
         |         ^
   include/linux/cleanup.h:303:2: note: expanded from macro 'guard'
     303 |         CLASS(_name, __UNIQUE_ID(guard))
         |         ^
   include/linux/cleanup.h:258:2: note: expanded from macro 'CLASS'
     258 |         class_##_name##_t var __cleanup(class_##_name##_destructor) =   \
         |         ^
   <scratch space>:94:1: note: expanded from here
      94 | class_rcu_t
         | ^
   5 warnings generated.

Kconfig warnings: (for reference only)
   WARNING: unmet direct dependencies detected for OMAP2PLUS_MBOX
   Depends on [n]: MAILBOX [=y] && (ARCH_OMAP2PLUS || ARCH_K3)
   Selected by [m]:
   - TI_K3_M4_REMOTEPROC [=m] && REMOTEPROC [=y] && (ARCH_K3 || COMPILE_TEST [=y])


vim +3470 fs/ext4/mballoc.c

  3386	
  3387	static int ext4_mb_init_backend(struct super_block *sb)
  3388	{
  3389		ext4_group_t ngroups = ext4_get_groups_count(sb);
  3390		ext4_group_t i;
  3391		struct ext4_sb_info *sbi = EXT4_SB(sb);
  3392		int err;
  3393		struct ext4_group_desc *desc;
  3394		struct ext4_group_info ***group_info;
  3395		struct kmem_cache *cachep;
  3396	
  3397		err = ext4_mb_alloc_groupinfo(sb, ngroups);
  3398		if (err)
  3399			return err;
  3400	
  3401		sbi->s_buddy_cache = new_inode(sb);
  3402		if (sbi->s_buddy_cache == NULL) {
  3403			ext4_msg(sb, KERN_ERR, "can't get new inode");
  3404			goto err_freesgi;
  3405		}
  3406		/* To avoid potentially colliding with an valid on-disk inode number,
  3407		 * use EXT4_BAD_INO for the buddy cache inode number.  This inode is
  3408		 * not in the inode hash, so it should never be found by iget(), but
  3409		 * this will avoid confusion if it ever shows up during debugging. */
  3410		sbi->s_buddy_cache->i_ino = EXT4_BAD_INO;
  3411		EXT4_I(sbi->s_buddy_cache)->i_disksize = 0;
  3412		for (i = 0; i < ngroups; i++) {
  3413			cond_resched();
  3414			desc = ext4_get_group_desc(sb, i, NULL);
  3415			if (desc == NULL) {
  3416				ext4_msg(sb, KERN_ERR, "can't read descriptor %u", i);
  3417				goto err_freebuddy;
  3418			}
  3419			if (ext4_mb_add_groupinfo(sb, i, desc) != 0)
  3420				goto err_freebuddy;
  3421		}
  3422	
  3423		if (ext4_has_feature_flex_bg(sb)) {
  3424			/* a single flex group is supposed to be read by a single IO.
  3425			 * 2 ^ s_log_groups_per_flex != UINT_MAX as s_mb_prefetch is
  3426			 * unsigned integer, so the maximum shift is 32.
  3427			 */
  3428			if (sbi->s_es->s_log_groups_per_flex >= 32) {
  3429				ext4_msg(sb, KERN_ERR, "too many log groups per flexible block group");
  3430				goto err_freebuddy;
  3431			}
  3432			sbi->s_mb_prefetch = min_t(uint, 1 << sbi->s_es->s_log_groups_per_flex,
  3433				BLK_MAX_SEGMENT_SIZE >> (sb->s_blocksize_bits - 9));
  3434			sbi->s_mb_prefetch *= 8; /* 8 prefetch IOs in flight at most */
  3435		} else {
  3436			sbi->s_mb_prefetch = 32;
  3437		}
  3438		if (sbi->s_mb_prefetch > ext4_get_groups_count(sb))
  3439			sbi->s_mb_prefetch = ext4_get_groups_count(sb);
  3440		/*
  3441		 * now many real IOs to prefetch within a single allocation at
  3442		 * CR_POWER2_ALIGNED. Given CR_POWER2_ALIGNED is an CPU-related
  3443		 * optimization we shouldn't try to load too many groups, at some point
  3444		 * we should start to use what we've got in memory.
  3445		 * with an average random access time 5ms, it'd take a second to get
  3446		 * 200 groups (* N with flex_bg), so let's make this limit 4
  3447		 */
  3448		sbi->s_mb_prefetch_limit = sbi->s_mb_prefetch * 4;
  3449		if (sbi->s_mb_prefetch_limit > ext4_get_groups_count(sb))
  3450			sbi->s_mb_prefetch_limit = ext4_get_groups_count(sb);
  3451	
  3452		return 0;
  3453	
  3454	err_freebuddy:
  3455		cachep = get_groupinfo_cache(sb->s_blocksize_bits);
  3456		while (i-- > 0) {
  3457			struct ext4_group_info *grp = ext4_get_group_info(sb, i);
  3458	
  3459			if (grp)
  3460				kmem_cache_free(cachep, grp);
  3461		}
  3462		i = sbi->s_group_info_size;
  3463		scoped_guard(rcu) {
  3464			group_info = rcu_dereference(sbi->s_group_info);
  3465			while (i-- > 0)
  3466				kfree(group_info[i]);
  3467		}
  3468		iput(sbi->s_buddy_cache);
  3469	err_freesgi:
> 3470		guard(rcu)();
  3471		kvfree(rcu_dereference(sbi->s_group_info));
  3472		return -ENOMEM;
  3473	}
  3474	

-- 
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki




[Index of Archives]     [Reiser Filesystem Development]     [Ceph FS]     [Kernel Newbies]     [Security]     [Netfilter]     [Bugtraq]     [Linux FS]     [Yosemite National Park]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Samba]     [Device Mapper]     [Linux Media]

  Powered by Linux