CC: [email protected]
TO: Johannes Thumshirn <[email protected]>
CC: David Sterba <[email protected]>
CC: Naohiro Aota <[email protected]>
CC: Josef Bacik <[email protected]>

tree:   https://github.com/kdave/btrfs-devel.git for-next-20210129
head:   6e043613b2c4377ce095ea826160d42031156d35
commit: 9e802babe3299843f991f1fd40212cde940115ba [14783/14851] btrfs: allow 
zoned mode on non-zoned block devices
:::::: branch date: 7 hours ago
:::::: commit date: 7 hours ago
config: powerpc64-randconfig-c003-20210129 (attached as .config)
compiler: powerpc64le-linux-gcc (GCC) 9.3.0

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <[email protected]>
Reported-by: Julia Lawall <[email protected]>


"coccinelle warnings: (new ones prefixed by >>)"
>> fs/btrfs/zoned.c:428:7-12: ERROR: reference preceded by free on line 394

vim +428 fs/btrfs/zoned.c

ea7403f51b3ebc7 Naohiro Aota       2021-01-26  250  
5b316468983dfa9 Naohiro Aota       2020-11-10  251  int 
btrfs_get_dev_zone_info(struct btrfs_device *device)
5b316468983dfa9 Naohiro Aota       2020-11-10  252  {
9e802babe329984 Johannes Thumshirn 2021-01-26  253      struct btrfs_fs_info 
*fs_info = device->fs_info;
5b316468983dfa9 Naohiro Aota       2020-11-10  254      struct 
btrfs_zoned_device_info *zone_info = NULL;
5b316468983dfa9 Naohiro Aota       2020-11-10  255      struct block_device 
*bdev = device->bdev;
862931c76327e54 Naohiro Aota       2020-11-10  256      struct request_queue 
*queue = bdev_get_queue(bdev);
5b316468983dfa9 Naohiro Aota       2020-11-10  257      sector_t nr_sectors;
5b316468983dfa9 Naohiro Aota       2020-11-10  258      sector_t sector = 0;
5b316468983dfa9 Naohiro Aota       2020-11-10  259      struct blk_zone *zones 
= NULL;
5b316468983dfa9 Naohiro Aota       2020-11-10  260      unsigned int i, 
nreported = 0, nr_zones;
5b316468983dfa9 Naohiro Aota       2020-11-10  261      unsigned int 
zone_sectors;
9e802babe329984 Johannes Thumshirn 2021-01-26  262      char *model, *emulated;
5b316468983dfa9 Naohiro Aota       2020-11-10  263      int ret;
5b316468983dfa9 Naohiro Aota       2020-11-10  264  
9e802babe329984 Johannes Thumshirn 2021-01-26  265      /*
9e802babe329984 Johannes Thumshirn 2021-01-26  266       * Cannot use 
btrfs_is_zoned here, since fs_info->zone_size might
9e802babe329984 Johannes Thumshirn 2021-01-26  267       * not be set yet.
9e802babe329984 Johannes Thumshirn 2021-01-26  268       */
9e802babe329984 Johannes Thumshirn 2021-01-26  269      if 
(!btrfs_fs_incompat(fs_info, ZONED))
5b316468983dfa9 Naohiro Aota       2020-11-10  270              return 0;
5b316468983dfa9 Naohiro Aota       2020-11-10  271  
5b316468983dfa9 Naohiro Aota       2020-11-10  272      if (device->zone_info)
5b316468983dfa9 Naohiro Aota       2020-11-10  273              return 0;
5b316468983dfa9 Naohiro Aota       2020-11-10  274  
5b316468983dfa9 Naohiro Aota       2020-11-10  275      zone_info = 
kzalloc(sizeof(*zone_info), GFP_KERNEL);
5b316468983dfa9 Naohiro Aota       2020-11-10  276      if (!zone_info)
5b316468983dfa9 Naohiro Aota       2020-11-10  277              return -ENOMEM;
5b316468983dfa9 Naohiro Aota       2020-11-10  278  
9e802babe329984 Johannes Thumshirn 2021-01-26  279      if 
(!bdev_is_zoned(bdev)) {
9e802babe329984 Johannes Thumshirn 2021-01-26  280              if 
(!fs_info->zone_size) {
9e802babe329984 Johannes Thumshirn 2021-01-26  281                      ret = 
calculate_emulated_zone_size(fs_info);
9e802babe329984 Johannes Thumshirn 2021-01-26  282                      if (ret)
9e802babe329984 Johannes Thumshirn 2021-01-26  283                              
goto out;
9e802babe329984 Johannes Thumshirn 2021-01-26  284              }
9e802babe329984 Johannes Thumshirn 2021-01-26  285  
9e802babe329984 Johannes Thumshirn 2021-01-26  286              
ASSERT(fs_info->zone_size);
9e802babe329984 Johannes Thumshirn 2021-01-26  287              zone_sectors = 
fs_info->zone_size >> SECTOR_SHIFT;
9e802babe329984 Johannes Thumshirn 2021-01-26  288      } else {
5b316468983dfa9 Naohiro Aota       2020-11-10  289              zone_sectors = 
bdev_zone_sectors(bdev);
9e802babe329984 Johannes Thumshirn 2021-01-26  290      }
9e802babe329984 Johannes Thumshirn 2021-01-26  291  
9e802babe329984 Johannes Thumshirn 2021-01-26  292      nr_sectors = 
bdev_nr_sectors(bdev);
5b316468983dfa9 Naohiro Aota       2020-11-10  293      /* Check if it's power 
of 2 (see is_power_of_2) */
5b316468983dfa9 Naohiro Aota       2020-11-10  294      ASSERT(zone_sectors != 
0 && (zone_sectors & (zone_sectors - 1)) == 0);
5b316468983dfa9 Naohiro Aota       2020-11-10  295      zone_info->zone_size = 
zone_sectors << SECTOR_SHIFT;
5b316468983dfa9 Naohiro Aota       2020-11-10  296      
zone_info->zone_size_shift = ilog2(zone_info->zone_size);
862931c76327e54 Naohiro Aota       2020-11-10  297      
zone_info->max_zone_append_size =
862931c76327e54 Naohiro Aota       2020-11-10  298              
(u64)queue_max_zone_append_sectors(queue) << SECTOR_SHIFT;
5b316468983dfa9 Naohiro Aota       2020-11-10  299      zone_info->nr_zones = 
nr_sectors >> ilog2(zone_sectors);
5b316468983dfa9 Naohiro Aota       2020-11-10  300      if 
(!IS_ALIGNED(nr_sectors, zone_sectors))
5b316468983dfa9 Naohiro Aota       2020-11-10  301              
zone_info->nr_zones++;
5b316468983dfa9 Naohiro Aota       2020-11-10  302  
5b316468983dfa9 Naohiro Aota       2020-11-10  303      zone_info->seq_zones = 
bitmap_zalloc(zone_info->nr_zones, GFP_KERNEL);
5b316468983dfa9 Naohiro Aota       2020-11-10  304      if 
(!zone_info->seq_zones) {
5b316468983dfa9 Naohiro Aota       2020-11-10  305              ret = -ENOMEM;
5b316468983dfa9 Naohiro Aota       2020-11-10  306              goto out;
5b316468983dfa9 Naohiro Aota       2020-11-10  307      }
5b316468983dfa9 Naohiro Aota       2020-11-10  308  
5b316468983dfa9 Naohiro Aota       2020-11-10  309      zone_info->empty_zones 
= bitmap_zalloc(zone_info->nr_zones, GFP_KERNEL);
5b316468983dfa9 Naohiro Aota       2020-11-10  310      if 
(!zone_info->empty_zones) {
5b316468983dfa9 Naohiro Aota       2020-11-10  311              ret = -ENOMEM;
5b316468983dfa9 Naohiro Aota       2020-11-10  312              goto out;
5b316468983dfa9 Naohiro Aota       2020-11-10  313      }
5b316468983dfa9 Naohiro Aota       2020-11-10  314  
5b316468983dfa9 Naohiro Aota       2020-11-10  315      zones = 
kcalloc(BTRFS_REPORT_NR_ZONES, sizeof(struct blk_zone), GFP_KERNEL);
5b316468983dfa9 Naohiro Aota       2020-11-10  316      if (!zones) {
5b316468983dfa9 Naohiro Aota       2020-11-10  317              ret = -ENOMEM;
5b316468983dfa9 Naohiro Aota       2020-11-10  318              goto out;
5b316468983dfa9 Naohiro Aota       2020-11-10  319      }
5b316468983dfa9 Naohiro Aota       2020-11-10  320  
5b316468983dfa9 Naohiro Aota       2020-11-10  321      /* Get zones type */
5b316468983dfa9 Naohiro Aota       2020-11-10  322      while (sector < 
nr_sectors) {
5b316468983dfa9 Naohiro Aota       2020-11-10  323              nr_zones = 
BTRFS_REPORT_NR_ZONES;
5b316468983dfa9 Naohiro Aota       2020-11-10  324              ret = 
btrfs_get_dev_zones(device, sector << SECTOR_SHIFT, zones,
5b316468983dfa9 Naohiro Aota       2020-11-10  325                              
          &nr_zones);
5b316468983dfa9 Naohiro Aota       2020-11-10  326              if (ret)
5b316468983dfa9 Naohiro Aota       2020-11-10  327                      goto 
out;
5b316468983dfa9 Naohiro Aota       2020-11-10  328  
5b316468983dfa9 Naohiro Aota       2020-11-10  329              for (i = 0; i < 
nr_zones; i++) {
5b316468983dfa9 Naohiro Aota       2020-11-10  330                      if 
(zones[i].type == BLK_ZONE_TYPE_SEQWRITE_REQ)
5b316468983dfa9 Naohiro Aota       2020-11-10  331                              
__set_bit(nreported, zone_info->seq_zones);
5b316468983dfa9 Naohiro Aota       2020-11-10  332                      if 
(zones[i].cond == BLK_ZONE_COND_EMPTY)
5b316468983dfa9 Naohiro Aota       2020-11-10  333                              
__set_bit(nreported, zone_info->empty_zones);
5b316468983dfa9 Naohiro Aota       2020-11-10  334                      
nreported++;
5b316468983dfa9 Naohiro Aota       2020-11-10  335              }
5b316468983dfa9 Naohiro Aota       2020-11-10  336              sector = 
zones[nr_zones - 1].start + zones[nr_zones - 1].len;
5b316468983dfa9 Naohiro Aota       2020-11-10  337      }
5b316468983dfa9 Naohiro Aota       2020-11-10  338  
5b316468983dfa9 Naohiro Aota       2020-11-10  339      if (nreported != 
zone_info->nr_zones) {
5b316468983dfa9 Naohiro Aota       2020-11-10  340              
btrfs_err_in_rcu(device->fs_info,
5b316468983dfa9 Naohiro Aota       2020-11-10  341                              
 "inconsistent number of zones on %s (%u/%u)",
5b316468983dfa9 Naohiro Aota       2020-11-10  342                              
 rcu_str_deref(device->name), nreported,
5b316468983dfa9 Naohiro Aota       2020-11-10  343                              
 zone_info->nr_zones);
5b316468983dfa9 Naohiro Aota       2020-11-10  344              ret = -EIO;
5b316468983dfa9 Naohiro Aota       2020-11-10  345              goto out;
5b316468983dfa9 Naohiro Aota       2020-11-10  346      }
5b316468983dfa9 Naohiro Aota       2020-11-10  347  
12659251ca5df05 Naohiro Aota       2020-11-10  348      /* Validate superblock 
log */
12659251ca5df05 Naohiro Aota       2020-11-10  349      nr_zones = 
BTRFS_NR_SB_LOG_ZONES;
12659251ca5df05 Naohiro Aota       2020-11-10  350      for (i = 0; i < 
BTRFS_SUPER_MIRROR_MAX; i++) {
12659251ca5df05 Naohiro Aota       2020-11-10  351              u32 sb_zone;
12659251ca5df05 Naohiro Aota       2020-11-10  352              u64 sb_wp;
12659251ca5df05 Naohiro Aota       2020-11-10  353              int sb_pos = 
BTRFS_NR_SB_LOG_ZONES * i;
12659251ca5df05 Naohiro Aota       2020-11-10  354  
12659251ca5df05 Naohiro Aota       2020-11-10  355              sb_zone = 
sb_zone_number(zone_info->zone_size_shift, i);
12659251ca5df05 Naohiro Aota       2020-11-10  356              if (sb_zone + 1 
>= zone_info->nr_zones)
12659251ca5df05 Naohiro Aota       2020-11-10  357                      
continue;
12659251ca5df05 Naohiro Aota       2020-11-10  358  
12659251ca5df05 Naohiro Aota       2020-11-10  359              sector = 
sb_zone << (zone_info->zone_size_shift - SECTOR_SHIFT);
12659251ca5df05 Naohiro Aota       2020-11-10  360              ret = 
btrfs_get_dev_zones(device, sector << SECTOR_SHIFT,
12659251ca5df05 Naohiro Aota       2020-11-10  361                              
          &zone_info->sb_zones[sb_pos],
12659251ca5df05 Naohiro Aota       2020-11-10  362                              
          &nr_zones);
12659251ca5df05 Naohiro Aota       2020-11-10  363              if (ret)
12659251ca5df05 Naohiro Aota       2020-11-10  364                      goto 
out;
12659251ca5df05 Naohiro Aota       2020-11-10  365  
12659251ca5df05 Naohiro Aota       2020-11-10  366              if (nr_zones != 
BTRFS_NR_SB_LOG_ZONES) {
12659251ca5df05 Naohiro Aota       2020-11-10  367                      
btrfs_err_in_rcu(device->fs_info,
12659251ca5df05 Naohiro Aota       2020-11-10  368      "zoned: failed to read 
super block log zone info at devid %llu zone %u",
12659251ca5df05 Naohiro Aota       2020-11-10  369                              
         device->devid, sb_zone);
12659251ca5df05 Naohiro Aota       2020-11-10  370                      ret = 
-EUCLEAN;
12659251ca5df05 Naohiro Aota       2020-11-10  371                      goto 
out;
12659251ca5df05 Naohiro Aota       2020-11-10  372              }
12659251ca5df05 Naohiro Aota       2020-11-10  373  
12659251ca5df05 Naohiro Aota       2020-11-10  374              /*
12659251ca5df05 Naohiro Aota       2020-11-10  375               * If zones[0] 
is conventional, always use the beggining of the
12659251ca5df05 Naohiro Aota       2020-11-10  376               * zone to 
record superblock. No need to validate in that case.
12659251ca5df05 Naohiro Aota       2020-11-10  377               */
12659251ca5df05 Naohiro Aota       2020-11-10  378              if 
(zone_info->sb_zones[BTRFS_NR_SB_LOG_ZONES * i].type ==
12659251ca5df05 Naohiro Aota       2020-11-10  379                  
BLK_ZONE_TYPE_CONVENTIONAL)
12659251ca5df05 Naohiro Aota       2020-11-10  380                      
continue;
12659251ca5df05 Naohiro Aota       2020-11-10  381  
12659251ca5df05 Naohiro Aota       2020-11-10  382              ret = 
sb_write_pointer(device->bdev,
12659251ca5df05 Naohiro Aota       2020-11-10  383                              
       &zone_info->sb_zones[sb_pos], &sb_wp);
12659251ca5df05 Naohiro Aota       2020-11-10  384              if (ret != 
-ENOENT && ret) {
12659251ca5df05 Naohiro Aota       2020-11-10  385                      
btrfs_err_in_rcu(device->fs_info,
12659251ca5df05 Naohiro Aota       2020-11-10  386                      "zoned: 
super block log zone corrupted devid %llu zone %u",
12659251ca5df05 Naohiro Aota       2020-11-10  387                              
         device->devid, sb_zone);
12659251ca5df05 Naohiro Aota       2020-11-10  388                      ret = 
-EUCLEAN;
12659251ca5df05 Naohiro Aota       2020-11-10  389                      goto 
out;
12659251ca5df05 Naohiro Aota       2020-11-10  390              }
12659251ca5df05 Naohiro Aota       2020-11-10  391      }
12659251ca5df05 Naohiro Aota       2020-11-10  392  
12659251ca5df05 Naohiro Aota       2020-11-10  393  
5b316468983dfa9 Naohiro Aota       2020-11-10 @394      kfree(zones);
5b316468983dfa9 Naohiro Aota       2020-11-10  395  
5b316468983dfa9 Naohiro Aota       2020-11-10  396      device->zone_info = 
zone_info;
5b316468983dfa9 Naohiro Aota       2020-11-10  397  
9e802babe329984 Johannes Thumshirn 2021-01-26  398      switch 
(bdev_zoned_model(bdev)) {
9e802babe329984 Johannes Thumshirn 2021-01-26  399      case BLK_ZONED_HM:
9e802babe329984 Johannes Thumshirn 2021-01-26  400              model = 
"host-managed zoned";
9e802babe329984 Johannes Thumshirn 2021-01-26  401              emulated = "";
9e802babe329984 Johannes Thumshirn 2021-01-26  402              break;
9e802babe329984 Johannes Thumshirn 2021-01-26  403      case BLK_ZONED_HA:
9e802babe329984 Johannes Thumshirn 2021-01-26  404              model = 
"host-aware zoned";
9e802babe329984 Johannes Thumshirn 2021-01-26  405              emulated = "";
9e802babe329984 Johannes Thumshirn 2021-01-26  406              break;
9e802babe329984 Johannes Thumshirn 2021-01-26  407      case BLK_ZONED_NONE:
9e802babe329984 Johannes Thumshirn 2021-01-26  408              model = 
"regular";
9e802babe329984 Johannes Thumshirn 2021-01-26  409              emulated = 
"emulated ";
9e802babe329984 Johannes Thumshirn 2021-01-26  410              break;
9e802babe329984 Johannes Thumshirn 2021-01-26  411      default:
9e802babe329984 Johannes Thumshirn 2021-01-26  412              /* Just in case 
*/
9e802babe329984 Johannes Thumshirn 2021-01-26  413              
btrfs_err_in_rcu(fs_info, "Unsupported zoned model %d on %s",
9e802babe329984 Johannes Thumshirn 2021-01-26  414                              
 bdev_zoned_model(bdev),
9e802babe329984 Johannes Thumshirn 2021-01-26  415                              
 rcu_str_deref(device->name));
9e802babe329984 Johannes Thumshirn 2021-01-26  416              ret = 
-EOPNOTSUPP;
9e802babe329984 Johannes Thumshirn 2021-01-26  417              goto out;
9e802babe329984 Johannes Thumshirn 2021-01-26  418      }
9e802babe329984 Johannes Thumshirn 2021-01-26  419  
9e802babe329984 Johannes Thumshirn 2021-01-26  420      
btrfs_info_in_rcu(fs_info,
9e802babe329984 Johannes Thumshirn 2021-01-26  421              "%s block 
device %s, %u %szones of %llu bytes",
9e802babe329984 Johannes Thumshirn 2021-01-26  422              model, 
rcu_str_deref(device->name), zone_info->nr_zones,
9e802babe329984 Johannes Thumshirn 2021-01-26  423              emulated, 
zone_info->zone_size);
5b316468983dfa9 Naohiro Aota       2020-11-10  424  
5b316468983dfa9 Naohiro Aota       2020-11-10  425      return 0;
5b316468983dfa9 Naohiro Aota       2020-11-10  426  
5b316468983dfa9 Naohiro Aota       2020-11-10  427  out:
5b316468983dfa9 Naohiro Aota       2020-11-10 @428      kfree(zones);
5b316468983dfa9 Naohiro Aota       2020-11-10  429      
bitmap_free(zone_info->empty_zones);
5b316468983dfa9 Naohiro Aota       2020-11-10  430      
bitmap_free(zone_info->seq_zones);
5b316468983dfa9 Naohiro Aota       2020-11-10  431      kfree(zone_info);
5b316468983dfa9 Naohiro Aota       2020-11-10  432  
5b316468983dfa9 Naohiro Aota       2020-11-10  433      return ret;
5b316468983dfa9 Naohiro Aota       2020-11-10  434  }
5b316468983dfa9 Naohiro Aota       2020-11-10  435  

:::::: The code at line 428 was first introduced by commit
:::::: 5b316468983dfa9473ff0f1c42e4e30b4c267141 btrfs: get zone information of 
zoned block devices

:::::: TO: Naohiro Aota <[email protected]>
:::::: CC: David Sterba <[email protected]>

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/[email protected]

Attachment: .config.gz
Description: application/gzip

_______________________________________________
kbuild mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to