All of lore.kernel.org
 help / color / mirror / Atom feed
* [linux-next:master 5635/6320] fs/btrfs/zoned.c:234 btrfs_get_dev_zone_info() warn: should 'sb_zone << (zone_info->zone_size_shift - 9)' be a 64 bit
@ 2020-11-17 12:41 kernel test robot
  0 siblings, 0 replies; only message in thread
From: kernel test robot @ 2020-11-17 12:41 UTC (permalink / raw)
  To: kbuild

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

CC: kbuild-all(a)lists.01.org
CC: Linux Memory Management List <linux-mm@kvack.org>
TO: Naohiro Aota <naohiro.aota@wdc.com>
CC: David Sterba <dsterba@suse.com>

tree:   https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git master
head:   7c8ca8129ee9724cb1527895fe6dec942ef07f19
commit: 90ab5c54fc1f6c02bd55472fc2a5f069244ed806 [5635/6320] btrfs: implement log-structured superblock for ZONED mode
:::::: branch date: 5 hours ago
:::::: commit date: 17 hours ago
config: nds32-randconfig-m031-20201113 (attached as .config)
compiler: nds32le-linux-gcc (GCC) 9.3.0

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

smatch warnings:
fs/btrfs/zoned.c:234 btrfs_get_dev_zone_info() warn: should 'sb_zone << (zone_info->zone_size_shift - 9)' be a 64 bit type?
fs/btrfs/zoned.c:518 btrfs_sb_log_location_bdev() warn: should 'zone_sectors << 9' be a 64 bit type?
fs/btrfs/zoned.c:526 btrfs_sb_log_location_bdev() warn: should 'sb_zone << zone_sectors_shift' be a 64 bit type?
fs/btrfs/zoned.c:625 btrfs_reset_sb_log_zones() warn: should 'sb_zone << zone_sectors_shift' be a 64 bit type?

vim +234 fs/btrfs/zoned.c

72f34dade8b1e1a Naohiro Aota 2020-11-10  145  
72f34dade8b1e1a Naohiro Aota 2020-11-10  146  int btrfs_get_dev_zone_info(struct btrfs_device *device)
72f34dade8b1e1a Naohiro Aota 2020-11-10  147  {
72f34dade8b1e1a Naohiro Aota 2020-11-10  148  	struct btrfs_zoned_device_info *zone_info = NULL;
72f34dade8b1e1a Naohiro Aota 2020-11-10  149  	struct block_device *bdev = device->bdev;
ac8176028782f26 Naohiro Aota 2020-11-10  150  	struct request_queue *queue = bdev_get_queue(bdev);
72f34dade8b1e1a Naohiro Aota 2020-11-10  151  	sector_t nr_sectors = bdev->bd_part->nr_sects;
72f34dade8b1e1a Naohiro Aota 2020-11-10  152  	sector_t sector = 0;
72f34dade8b1e1a Naohiro Aota 2020-11-10  153  	struct blk_zone *zones = NULL;
72f34dade8b1e1a Naohiro Aota 2020-11-10  154  	unsigned int i, nreported = 0, nr_zones;
72f34dade8b1e1a Naohiro Aota 2020-11-10  155  	unsigned int zone_sectors;
72f34dade8b1e1a Naohiro Aota 2020-11-10  156  	int ret;
72f34dade8b1e1a Naohiro Aota 2020-11-10  157  
72f34dade8b1e1a Naohiro Aota 2020-11-10  158  	if (!bdev_is_zoned(bdev))
72f34dade8b1e1a Naohiro Aota 2020-11-10  159  		return 0;
72f34dade8b1e1a Naohiro Aota 2020-11-10  160  
72f34dade8b1e1a Naohiro Aota 2020-11-10  161  	if (device->zone_info)
72f34dade8b1e1a Naohiro Aota 2020-11-10  162  		return 0;
72f34dade8b1e1a Naohiro Aota 2020-11-10  163  
72f34dade8b1e1a Naohiro Aota 2020-11-10  164  	zone_info = kzalloc(sizeof(*zone_info), GFP_KERNEL);
72f34dade8b1e1a Naohiro Aota 2020-11-10  165  	if (!zone_info)
72f34dade8b1e1a Naohiro Aota 2020-11-10  166  		return -ENOMEM;
72f34dade8b1e1a Naohiro Aota 2020-11-10  167  
72f34dade8b1e1a Naohiro Aota 2020-11-10  168  	zone_sectors = bdev_zone_sectors(bdev);
72f34dade8b1e1a Naohiro Aota 2020-11-10  169  	ASSERT(is_power_of_2(zone_sectors));
72f34dade8b1e1a Naohiro Aota 2020-11-10  170  	zone_info->zone_size = (u64)zone_sectors << SECTOR_SHIFT;
72f34dade8b1e1a Naohiro Aota 2020-11-10  171  	zone_info->zone_size_shift = ilog2(zone_info->zone_size);
ac8176028782f26 Naohiro Aota 2020-11-10  172  	zone_info->max_zone_append_size =
ac8176028782f26 Naohiro Aota 2020-11-10  173  		(u64)queue_max_zone_append_sectors(queue) << SECTOR_SHIFT;
72f34dade8b1e1a Naohiro Aota 2020-11-10  174  	zone_info->nr_zones = nr_sectors >> ilog2(bdev_zone_sectors(bdev));
72f34dade8b1e1a Naohiro Aota 2020-11-10  175  	if (!IS_ALIGNED(nr_sectors, zone_sectors))
72f34dade8b1e1a Naohiro Aota 2020-11-10  176  		zone_info->nr_zones++;
72f34dade8b1e1a Naohiro Aota 2020-11-10  177  
72f34dade8b1e1a Naohiro Aota 2020-11-10  178  	zone_info->seq_zones = bitmap_zalloc(zone_info->nr_zones, GFP_KERNEL);
72f34dade8b1e1a Naohiro Aota 2020-11-10  179  	if (!zone_info->seq_zones) {
72f34dade8b1e1a Naohiro Aota 2020-11-10  180  		ret = -ENOMEM;
72f34dade8b1e1a Naohiro Aota 2020-11-10  181  		goto out;
72f34dade8b1e1a Naohiro Aota 2020-11-10  182  	}
72f34dade8b1e1a Naohiro Aota 2020-11-10  183  
72f34dade8b1e1a Naohiro Aota 2020-11-10  184  	zone_info->empty_zones = bitmap_zalloc(zone_info->nr_zones, GFP_KERNEL);
72f34dade8b1e1a Naohiro Aota 2020-11-10  185  	if (!zone_info->empty_zones) {
72f34dade8b1e1a Naohiro Aota 2020-11-10  186  		ret = -ENOMEM;
72f34dade8b1e1a Naohiro Aota 2020-11-10  187  		goto out;
72f34dade8b1e1a Naohiro Aota 2020-11-10  188  	}
72f34dade8b1e1a Naohiro Aota 2020-11-10  189  
72f34dade8b1e1a Naohiro Aota 2020-11-10  190  	zones = kcalloc(BTRFS_REPORT_NR_ZONES, sizeof(struct blk_zone), GFP_KERNEL);
72f34dade8b1e1a Naohiro Aota 2020-11-10  191  	if (!zones) {
72f34dade8b1e1a Naohiro Aota 2020-11-10  192  		ret = -ENOMEM;
72f34dade8b1e1a Naohiro Aota 2020-11-10  193  		goto out;
72f34dade8b1e1a Naohiro Aota 2020-11-10  194  	}
72f34dade8b1e1a Naohiro Aota 2020-11-10  195  
72f34dade8b1e1a Naohiro Aota 2020-11-10  196  	/* Get zones type */
72f34dade8b1e1a Naohiro Aota 2020-11-10  197  	while (sector < nr_sectors) {
72f34dade8b1e1a Naohiro Aota 2020-11-10  198  		nr_zones = BTRFS_REPORT_NR_ZONES;
72f34dade8b1e1a Naohiro Aota 2020-11-10  199  		ret = btrfs_get_dev_zones(device, sector << SECTOR_SHIFT, zones,
72f34dade8b1e1a Naohiro Aota 2020-11-10  200  					  &nr_zones);
72f34dade8b1e1a Naohiro Aota 2020-11-10  201  		if (ret)
72f34dade8b1e1a Naohiro Aota 2020-11-10  202  			goto out;
72f34dade8b1e1a Naohiro Aota 2020-11-10  203  
72f34dade8b1e1a Naohiro Aota 2020-11-10  204  		for (i = 0; i < nr_zones; i++) {
72f34dade8b1e1a Naohiro Aota 2020-11-10  205  			if (zones[i].type == BLK_ZONE_TYPE_SEQWRITE_REQ)
72f34dade8b1e1a Naohiro Aota 2020-11-10  206  				set_bit(nreported, zone_info->seq_zones);
72f34dade8b1e1a Naohiro Aota 2020-11-10  207  			if (zones[i].cond == BLK_ZONE_COND_EMPTY)
72f34dade8b1e1a Naohiro Aota 2020-11-10  208  				set_bit(nreported, zone_info->empty_zones);
72f34dade8b1e1a Naohiro Aota 2020-11-10  209  			nreported++;
72f34dade8b1e1a Naohiro Aota 2020-11-10  210  		}
72f34dade8b1e1a Naohiro Aota 2020-11-10  211  		sector = zones[nr_zones - 1].start + zones[nr_zones - 1].len;
72f34dade8b1e1a Naohiro Aota 2020-11-10  212  	}
72f34dade8b1e1a Naohiro Aota 2020-11-10  213  
72f34dade8b1e1a Naohiro Aota 2020-11-10  214  	if (nreported != zone_info->nr_zones) {
72f34dade8b1e1a Naohiro Aota 2020-11-10  215  		btrfs_err_in_rcu(device->fs_info,
72f34dade8b1e1a Naohiro Aota 2020-11-10  216  				 "inconsistent number of zones on %s (%u/%u)",
72f34dade8b1e1a Naohiro Aota 2020-11-10  217  				 rcu_str_deref(device->name), nreported,
72f34dade8b1e1a Naohiro Aota 2020-11-10  218  				 zone_info->nr_zones);
72f34dade8b1e1a Naohiro Aota 2020-11-10  219  		ret = -EIO;
72f34dade8b1e1a Naohiro Aota 2020-11-10  220  		goto out;
72f34dade8b1e1a Naohiro Aota 2020-11-10  221  	}
72f34dade8b1e1a Naohiro Aota 2020-11-10  222  
90ab5c54fc1f6c0 Naohiro Aota 2020-11-10  223  	/* Validate superblock log */
90ab5c54fc1f6c0 Naohiro Aota 2020-11-10  224  	nr_zones = BTRFS_NR_SB_LOG_ZONES;
90ab5c54fc1f6c0 Naohiro Aota 2020-11-10  225  	for (i = 0; i < BTRFS_SUPER_MIRROR_MAX; i++) {
90ab5c54fc1f6c0 Naohiro Aota 2020-11-10  226  		u32 sb_zone;
90ab5c54fc1f6c0 Naohiro Aota 2020-11-10  227  		u64 sb_wp;
90ab5c54fc1f6c0 Naohiro Aota 2020-11-10  228  		int sb_pos = BTRFS_NR_SB_LOG_ZONES * i;
90ab5c54fc1f6c0 Naohiro Aota 2020-11-10  229  
90ab5c54fc1f6c0 Naohiro Aota 2020-11-10  230  		sb_zone = sb_zone_number(zone_info->zone_size_shift, i);
90ab5c54fc1f6c0 Naohiro Aota 2020-11-10  231  		if (sb_zone + 1 >= zone_info->nr_zones)
90ab5c54fc1f6c0 Naohiro Aota 2020-11-10  232  			continue;
90ab5c54fc1f6c0 Naohiro Aota 2020-11-10  233  
90ab5c54fc1f6c0 Naohiro Aota 2020-11-10 @234  		sector = sb_zone << (zone_info->zone_size_shift - SECTOR_SHIFT);
90ab5c54fc1f6c0 Naohiro Aota 2020-11-10  235  		ret = btrfs_get_dev_zones(device, sector << SECTOR_SHIFT,
90ab5c54fc1f6c0 Naohiro Aota 2020-11-10  236  					  &zone_info->sb_zones[sb_pos],
90ab5c54fc1f6c0 Naohiro Aota 2020-11-10  237  					  &nr_zones);
90ab5c54fc1f6c0 Naohiro Aota 2020-11-10  238  		if (ret)
90ab5c54fc1f6c0 Naohiro Aota 2020-11-10  239  			goto out;
90ab5c54fc1f6c0 Naohiro Aota 2020-11-10  240  
90ab5c54fc1f6c0 Naohiro Aota 2020-11-10  241  		if (nr_zones != BTRFS_NR_SB_LOG_ZONES) {
90ab5c54fc1f6c0 Naohiro Aota 2020-11-10  242  			btrfs_err_in_rcu(device->fs_info,
90ab5c54fc1f6c0 Naohiro Aota 2020-11-10  243  	"zoned: failed to read super block log zone info at devid %llu zone %u",
90ab5c54fc1f6c0 Naohiro Aota 2020-11-10  244  					 device->devid, sb_zone);
90ab5c54fc1f6c0 Naohiro Aota 2020-11-10  245  			ret = -EUCLEAN;
90ab5c54fc1f6c0 Naohiro Aota 2020-11-10  246  			goto out;
90ab5c54fc1f6c0 Naohiro Aota 2020-11-10  247  		}
90ab5c54fc1f6c0 Naohiro Aota 2020-11-10  248  
90ab5c54fc1f6c0 Naohiro Aota 2020-11-10  249  		/*
90ab5c54fc1f6c0 Naohiro Aota 2020-11-10  250  		 * If zones[0] is conventional, always use the beggining of the
90ab5c54fc1f6c0 Naohiro Aota 2020-11-10  251  		 * zone to record superblock. No need to validate in that case.
90ab5c54fc1f6c0 Naohiro Aota 2020-11-10  252  		 */
90ab5c54fc1f6c0 Naohiro Aota 2020-11-10  253  		if (zone_info->sb_zones[BTRFS_NR_SB_LOG_ZONES * i].type ==
90ab5c54fc1f6c0 Naohiro Aota 2020-11-10  254  		    BLK_ZONE_TYPE_CONVENTIONAL)
90ab5c54fc1f6c0 Naohiro Aota 2020-11-10  255  			continue;
90ab5c54fc1f6c0 Naohiro Aota 2020-11-10  256  
90ab5c54fc1f6c0 Naohiro Aota 2020-11-10  257  		ret = sb_write_pointer(device->bdev,
90ab5c54fc1f6c0 Naohiro Aota 2020-11-10  258  				       &zone_info->sb_zones[sb_pos], &sb_wp);
90ab5c54fc1f6c0 Naohiro Aota 2020-11-10  259  		if (ret != -ENOENT && ret) {
90ab5c54fc1f6c0 Naohiro Aota 2020-11-10  260  			btrfs_err_in_rcu(device->fs_info,
90ab5c54fc1f6c0 Naohiro Aota 2020-11-10  261  			"zoned: super block log zone corrupted devid %llu zone %u",
90ab5c54fc1f6c0 Naohiro Aota 2020-11-10  262  					 device->devid, sb_zone);
90ab5c54fc1f6c0 Naohiro Aota 2020-11-10  263  			ret = -EUCLEAN;
90ab5c54fc1f6c0 Naohiro Aota 2020-11-10  264  			goto out;
90ab5c54fc1f6c0 Naohiro Aota 2020-11-10  265  		}
90ab5c54fc1f6c0 Naohiro Aota 2020-11-10  266  	}
90ab5c54fc1f6c0 Naohiro Aota 2020-11-10  267  
90ab5c54fc1f6c0 Naohiro Aota 2020-11-10  268  
72f34dade8b1e1a Naohiro Aota 2020-11-10  269  	kfree(zones);
72f34dade8b1e1a Naohiro Aota 2020-11-10  270  
72f34dade8b1e1a Naohiro Aota 2020-11-10  271  	device->zone_info = zone_info;
72f34dade8b1e1a Naohiro Aota 2020-11-10  272  
72f34dade8b1e1a Naohiro Aota 2020-11-10  273  	/*
72f34dade8b1e1a Naohiro Aota 2020-11-10  274  	 * This function is called from open_fs_devices(), which is before
72f34dade8b1e1a Naohiro Aota 2020-11-10  275  	 * we set the device->fs_info. So, we use pr_info instead of
72f34dade8b1e1a Naohiro Aota 2020-11-10  276  	 * btrfs_info to avoid printing confusing message like "BTRFS info
72f34dade8b1e1a Naohiro Aota 2020-11-10  277  	 * (device <unknown>) ..."
72f34dade8b1e1a Naohiro Aota 2020-11-10  278  	 */
72f34dade8b1e1a Naohiro Aota 2020-11-10  279  
72f34dade8b1e1a Naohiro Aota 2020-11-10  280  	rcu_read_lock();
72f34dade8b1e1a Naohiro Aota 2020-11-10  281  	if (device->fs_info)
72f34dade8b1e1a Naohiro Aota 2020-11-10  282  		btrfs_info(device->fs_info,
72f34dade8b1e1a Naohiro Aota 2020-11-10  283  			"host-%s zoned block device %s, %u zones of %llu bytes",
72f34dade8b1e1a Naohiro Aota 2020-11-10  284  			bdev_zoned_model(bdev) == BLK_ZONED_HM ? "managed" : "aware",
72f34dade8b1e1a Naohiro Aota 2020-11-10  285  			rcu_str_deref(device->name), zone_info->nr_zones,
72f34dade8b1e1a Naohiro Aota 2020-11-10  286  			zone_info->zone_size);
72f34dade8b1e1a Naohiro Aota 2020-11-10  287  	else
72f34dade8b1e1a Naohiro Aota 2020-11-10  288  		pr_info("BTRFS info: host-%s zoned block device %s, %u zones of %llu bytes",
72f34dade8b1e1a Naohiro Aota 2020-11-10  289  			bdev_zoned_model(bdev) == BLK_ZONED_HM ? "managed" : "aware",
72f34dade8b1e1a Naohiro Aota 2020-11-10  290  			rcu_str_deref(device->name), zone_info->nr_zones,
72f34dade8b1e1a Naohiro Aota 2020-11-10  291  			zone_info->zone_size);
72f34dade8b1e1a Naohiro Aota 2020-11-10  292  	rcu_read_unlock();
72f34dade8b1e1a Naohiro Aota 2020-11-10  293  
72f34dade8b1e1a Naohiro Aota 2020-11-10  294  	return 0;
72f34dade8b1e1a Naohiro Aota 2020-11-10  295  
72f34dade8b1e1a Naohiro Aota 2020-11-10  296  out:
72f34dade8b1e1a Naohiro Aota 2020-11-10  297  	kfree(zones);
72f34dade8b1e1a Naohiro Aota 2020-11-10  298  	bitmap_free(zone_info->empty_zones);
72f34dade8b1e1a Naohiro Aota 2020-11-10  299  	bitmap_free(zone_info->seq_zones);
72f34dade8b1e1a Naohiro Aota 2020-11-10  300  	kfree(zone_info);
72f34dade8b1e1a Naohiro Aota 2020-11-10  301  
72f34dade8b1e1a Naohiro Aota 2020-11-10  302  	return ret;
72f34dade8b1e1a Naohiro Aota 2020-11-10  303  }
72f34dade8b1e1a Naohiro Aota 2020-11-10  304  

---
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: 28083 bytes --]

^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2020-11-17 12:41 UTC | newest]

Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2020-11-17 12:41 [linux-next:master 5635/6320] fs/btrfs/zoned.c:234 btrfs_get_dev_zone_info() warn: should 'sb_zone << (zone_info->zone_size_shift - 9)' be a 64 bit kernel test robot

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.