[dm-devel] [bug report] dm zoned: metadata version 2

Dan Carpenter dan.carpenter at oracle.com
Wed May 13 09:36:41 UTC 2020


Hello Hannes Reinecke,

The patch 70978208ec91: "dm zoned: metadata version 2" from May 11,
2020, leads to the following static checker warning:

	drivers/md/dm-zoned-target.c:1047 dmz_iterate_devices()
	warn: was expecting a 64 bit value instead of '~(zone_nr_sectors - 1)'

drivers/md/dm-zoned-target.c
  1039  static int dmz_iterate_devices(struct dm_target *ti,
  1040                                 iterate_devices_callout_fn fn, void *data)
  1041  {
  1042          struct dmz_target *dmz = ti->private;
  1043          unsigned int zone_nr_sectors = dmz_zone_nr_sectors(dmz->metadata);
  1044          sector_t capacity;
  1045          int r;
  1046  
  1047          capacity = dmz->dev[0].capacity & ~(zone_nr_sectors - 1);

sector_t is a u64 and zone_nr_sectors is a u32.  It means that the high
32 bits are always cleared.  Making zone_nr_sectors a sector_t, u64 or
even an int would fix this problem.

  1048          r = fn(ti, dmz->ddev[0], 0, capacity, data);
  1049          if (!r && dmz->ddev[1]) {
  1050                  capacity = dmz->dev[1].capacity & ~(zone_nr_sectors - 1);
  1051                  r = fn(ti, dmz->ddev[1], 0, capacity, data);
  1052          }
  1053          return r;
  1054  }

regards,
dan carpenter




More information about the dm-devel mailing list