From: kernel test robot <lkp@intel.com>
To: kbuild@lists.01.org
Subject: [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
Date: Tue, 17 Nov 2020 20:41:48 +0800 [thread overview]
Message-ID: <202011172044.48CWvFIF-lkp@intel.com> (raw)
[-- 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 --]
reply other threads:[~2020-11-17 12:41 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=202011172044.48CWvFIF-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.