[dm-devel] [PATCHv5 00/14] dm-zoned: metadata version 2
Hannes Reinecke
hare at suse.de
Mon May 11 11:24:55 UTC 2020
On 5/11/20 12:55 PM, Damien Le Moal wrote:
> On 2020/05/11 11:46, Damien Le Moal wrote:
>> Mike,
>>
>> I am still seeing the warning:
>>
>> [ 1827.839756] device-mapper: table: 253:1: adding target device sdj caused an
>> alignment inconsistency: physical_block_size=4096, logical_block_size=4096,
>> alignment_offset=0, start=0
>> [ 1827.856738] device-mapper: table: 253:1: adding target device sdj caused an
>> alignment inconsistency: physical_block_size=4096, logical_block_size=4096,
>> alignment_offset=0, start=0
>> [ 1827.874031] device-mapper: table: 253:1: adding target device sdj caused an
>> alignment inconsistency: physical_block_size=4096, logical_block_size=4096,
>> alignment_offset=0, start=0
>> [ 1827.891086] device-mapper: table: 253:1: adding target device sdj caused an
>> alignment inconsistency: physical_block_size=4096, logical_block_size=4096,
>> alignment_offset=0, start=0
>>
>> when mixing 512B sector and 4KB sector devices. Investigating now.
>
>
> OK. Figured that one out: the 500GB SSD I am using for the regular device is
> 976773168 512B sectors capacity, that is, not a multiple of the 256MB zone size,
> and not even a multiple of 4K. This causes the creation of a 12MB runt zone of
> 24624 sectors, which is ignored. But the start sector of the second device in
> the dm-table remains 976773168, so not aligned on 4K. This causes
> bdev_stack_limits to return an error and the above messages to be printed.
>
> So I think we need to completely ignore the eventual "runt" zone of the regular
> device so that everything aligns correctly. This will need changes in both
> dmzadm and dm-zoned.
>
> Hannes, I can hack something on top of your series. Or can you resend with that
> fixed ?
>
>
>
>
Does this one help?
diff --git a/drivers/md/dm-zoned-target.c b/drivers/md/dm-zoned-target.c
index ea43f6892ced..5daca82b5ec7 100644
--- a/drivers/md/dm-zoned-target.c
+++ b/drivers/md/dm-zoned-target.c
@@ -1041,13 +1041,17 @@ static int dmz_iterate_devices(struct dm_target *ti,
{
struct dmz_target *dmz = ti->private;
unsigned int zone_nr_sectors = dmz_zone_nr_sectors(dmz->metadata);
+ unsigned int nr_zones;
sector_t capacity;
int r;
- capacity = dmz->dev[0].capacity & ~(zone_nr_sectors - 1);
+ nr_zones = DIV_ROUND_DOWN(dmz->dev[0].capacity, zone_nr_sectors);
+ capacity = nr_zones * zone_nr_sectors;
r = fn(ti, dmz->ddev[0], 0, capacity, data);
if (!r && dmz->ddev[1]) {
- capacity = dmz->dev[1].capacity & ~(zone_nr_sectors - 1);
+ nr_zones = DIV_ROUND_DOWN(dmz->dev[1.capacity,
+ zone_nr_sectors));
+ capacity = nr_zones * zone_nr_sectors;
r = fn(ti, dmz->ddev[1], 0, capacity, data);
}
return r;
Cheers,
Hannes
--
Dr. Hannes Reinecke Teamlead Storage & Networking
hare at suse.de +49 911 74053 688
SUSE Software Solutions GmbH, Maxfeldstr. 5, 90409 Nürnberg
HRB 36809 (AG Nürnberg), Geschäftsführer: Felix Imendörffer
More information about the dm-devel
mailing list