* [PATCH] dm: dm-zoned: Ignore last smaller runt zone
@ 2017-10-28 7:39 Damien Le Moal
2017-10-30 20:05 ` Mike Snitzer
0 siblings, 1 reply; 5+ messages in thread
From: Damien Le Moal @ 2017-10-28 7:39 UTC (permalink / raw)
To: dm-devel, Mike Snitzer
The scsi layer allows ZBC drives to have a smaller last runt zone. For
such device, specifying the entire capacity for a dm-zoned target table
entry fails as the specified capacity is not aligned on the device zone
size indicated in the request queue structure of the device.
Fix this problem by ignoring the last runt zone in the entry length
when seting up the dm-zoned target (ctr method) and when iterating table
entries of the target (iterate_devices method). This allows dm-zoned
users to still easily setup a target using the entire device capacity
(as mandated by dm-zoned) or the aligned capacity excluding thelast runt
zone.
While at it, replace direct references to the device queue chunk_sectors
limit with calls to the accessor blk_queue_zone_sectors().
Reported-by: Peter Desnoyers <pjd@ccs.neu.edu>
Signed-off-by: Damien Le Moal <damien.lemoal@wdc.com>
---
drivers/md/dm-zoned-target.c | 13 +++++++++----
1 file changed, 9 insertions(+), 4 deletions(-)
diff --git a/drivers/md/dm-zoned-target.c b/drivers/md/dm-zoned-target.c
index b87c1741da4b..6d7bda6f8190 100644
--- a/drivers/md/dm-zoned-target.c
+++ b/drivers/md/dm-zoned-target.c
@@ -660,6 +660,7 @@ static int dmz_get_zoned_device(struct dm_target *ti, char *path)
struct dmz_target *dmz = ti->private;
struct request_queue *q;
struct dmz_dev *dev;
+ sector_t aligned_capacity;
int ret;
/* Get the target device */
@@ -685,15 +686,17 @@ static int dmz_get_zoned_device(struct dm_target *ti, char *path)
goto err;
}
+ q = bdev_get_queue(dev->bdev);
dev->capacity = i_size_read(dev->bdev->bd_inode) >> SECTOR_SHIFT;
- if (ti->begin || (ti->len != dev->capacity)) {
+ aligned_capacity = dev->capacity & ~(blk_queue_zone_sectors(q) - 1);
+ if (ti->begin ||
+ ((ti->len != dev->capacity) && (ti->len != aligned_capacity))) {
ti->error = "Partial mapping not supported";
ret = -EINVAL;
goto err;
}
- q = bdev_get_queue(dev->bdev);
- dev->zone_nr_sectors = q->limits.chunk_sectors;
+ dev->zone_nr_sectors = blk_queue_zone_sectors(q);
dev->zone_nr_sectors_shift = ilog2(dev->zone_nr_sectors);
dev->zone_nr_blocks = dmz_sect2blk(dev->zone_nr_sectors);
@@ -929,8 +932,10 @@ static int dmz_iterate_devices(struct dm_target *ti,
iterate_devices_callout_fn fn, void *data)
{
struct dmz_target *dmz = ti->private;
+ struct dmz_dev *dev = dmz->dev;
+ sector_t capacity = dev->capacity & ~(dev->zone_nr_sectors - 1);
- return fn(ti, dmz->ddev, 0, dmz->dev->capacity, data);
+ return fn(ti, dmz->ddev, 0, capacity, data);
}
static struct target_type dmz_type = {
--
2.13.6
^ permalink raw reply related [flat|nested] 5+ messages in thread
* Re: dm: dm-zoned: Ignore last smaller runt zone
2017-10-28 7:39 [PATCH] dm: dm-zoned: Ignore last smaller runt zone Damien Le Moal
@ 2017-10-30 20:05 ` Mike Snitzer
2017-10-31 0:48 ` Damien Le Moal
0 siblings, 1 reply; 5+ messages in thread
From: Mike Snitzer @ 2017-10-30 20:05 UTC (permalink / raw)
To: Damien Le Moal; +Cc: dm-devel
On Sat, Oct 28 2017 at 3:39am -0400,
Damien Le Moal <damien.lemoal@wdc.com> wrote:
> The scsi layer allows ZBC drives to have a smaller last runt zone. For
> such device, specifying the entire capacity for a dm-zoned target table
> entry fails as the specified capacity is not aligned on the device zone
> size indicated in the request queue structure of the device.
>
> Fix this problem by ignoring the last runt zone in the entry length
> when seting up the dm-zoned target (ctr method) and when iterating table
> entries of the target (iterate_devices method). This allows dm-zoned
> users to still easily setup a target using the entire device capacity
> (as mandated by dm-zoned) or the aligned capacity excluding thelast runt
> zone.
>
> While at it, replace direct references to the device queue chunk_sectors
> limit with calls to the accessor blk_queue_zone_sectors().
>
> Reported-by: Peter Desnoyers <pjd@ccs.neu.edu>
> Signed-off-by: Damien Le Moal <damien.lemoal@wdc.com>
Applied for 3.15 (also cc'd stable@)
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: dm: dm-zoned: Ignore last smaller runt zone
2017-10-30 20:05 ` Mike Snitzer
@ 2017-10-31 0:48 ` Damien Le Moal
2017-10-31 2:15 ` Mike Snitzer
0 siblings, 1 reply; 5+ messages in thread
From: Damien Le Moal @ 2017-10-31 0:48 UTC (permalink / raw)
To: Mike Snitzer; +Cc: dm-devel
Mike,
On 10/31/17 05:05, Mike Snitzer wrote:
> On Sat, Oct 28 2017 at 3:39am -0400,
> Damien Le Moal <damien.lemoal@wdc.com> wrote:
>
>> The scsi layer allows ZBC drives to have a smaller last runt zone. For
>> such device, specifying the entire capacity for a dm-zoned target table
>> entry fails as the specified capacity is not aligned on the device zone
>> size indicated in the request queue structure of the device.
>>
>> Fix this problem by ignoring the last runt zone in the entry length
>> when seting up the dm-zoned target (ctr method) and when iterating table
>> entries of the target (iterate_devices method). This allows dm-zoned
>> users to still easily setup a target using the entire device capacity
>> (as mandated by dm-zoned) or the aligned capacity excluding thelast runt
>> zone.
>>
>> While at it, replace direct references to the device queue chunk_sectors
>> limit with calls to the accessor blk_queue_zone_sectors().
>>
>> Reported-by: Peter Desnoyers <pjd@ccs.neu.edu>
>> Signed-off-by: Damien Le Moal <damien.lemoal@wdc.com>
>
> Applied for 3.15 (also cc'd stable@)
Thank you. Since this is a bug fix, I was hoping to get this in 4.14 as
this is scheduled as an LTS. Is it too late for that ?
--
Damien Le Moal,
Western Digital
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: dm: dm-zoned: Ignore last smaller runt zone
2017-10-31 0:48 ` Damien Le Moal
@ 2017-10-31 2:15 ` Mike Snitzer
2017-10-31 6:55 ` Damien Le Moal
0 siblings, 1 reply; 5+ messages in thread
From: Mike Snitzer @ 2017-10-31 2:15 UTC (permalink / raw)
To: Damien Le Moal; +Cc: dm-devel
On Mon, Oct 30 2017 at 8:48pm -0400,
Damien Le Moal <damien.lemoal@wdc.com> wrote:
> Mike,
>
> On 10/31/17 05:05, Mike Snitzer wrote:
> > On Sat, Oct 28 2017 at 3:39am -0400,
> > Damien Le Moal <damien.lemoal@wdc.com> wrote:
> >
> >> The scsi layer allows ZBC drives to have a smaller last runt zone. For
> >> such device, specifying the entire capacity for a dm-zoned target table
> >> entry fails as the specified capacity is not aligned on the device zone
> >> size indicated in the request queue structure of the device.
> >>
> >> Fix this problem by ignoring the last runt zone in the entry length
> >> when seting up the dm-zoned target (ctr method) and when iterating table
> >> entries of the target (iterate_devices method). This allows dm-zoned
> >> users to still easily setup a target using the entire device capacity
> >> (as mandated by dm-zoned) or the aligned capacity excluding thelast runt
> >> zone.
> >>
> >> While at it, replace direct references to the device queue chunk_sectors
> >> limit with calls to the accessor blk_queue_zone_sectors().
> >>
> >> Reported-by: Peter Desnoyers <pjd@ccs.neu.edu>
> >> Signed-off-by: Damien Le Moal <damien.lemoal@wdc.com>
> >
> > Applied for 3.15 (also cc'd stable@)
>
> Thank you. Since this is a bug fix, I was hoping to get this in 4.14 as
> this is scheduled as an LTS. Is it too late for that ?
Not opposed to sending another 3.14 pull to Linus but I'd really
prefer not to (especially in that we're already past rc7).
Since 3.14 is LTS then there is no concern about 3.14's ability to get
this fix via stable@ (once it is merged for 3.15).
Mike
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: dm: dm-zoned: Ignore last smaller runt zone
2017-10-31 2:15 ` Mike Snitzer
@ 2017-10-31 6:55 ` Damien Le Moal
0 siblings, 0 replies; 5+ messages in thread
From: Damien Le Moal @ 2017-10-31 6:55 UTC (permalink / raw)
To: Mike Snitzer; +Cc: dm-devel
On 10/31/17 11:15, Mike Snitzer wrote:
> On Mon, Oct 30 2017 at 8:48pm -0400,
> Damien Le Moal <damien.lemoal@wdc.com> wrote:
>
>> Mike,
>>
>> On 10/31/17 05:05, Mike Snitzer wrote:
>>> On Sat, Oct 28 2017 at 3:39am -0400,
>>> Damien Le Moal <damien.lemoal@wdc.com> wrote:
>>>
>>>> The scsi layer allows ZBC drives to have a smaller last runt zone. For
>>>> such device, specifying the entire capacity for a dm-zoned target table
>>>> entry fails as the specified capacity is not aligned on the device zone
>>>> size indicated in the request queue structure of the device.
>>>>
>>>> Fix this problem by ignoring the last runt zone in the entry length
>>>> when seting up the dm-zoned target (ctr method) and when iterating table
>>>> entries of the target (iterate_devices method). This allows dm-zoned
>>>> users to still easily setup a target using the entire device capacity
>>>> (as mandated by dm-zoned) or the aligned capacity excluding thelast runt
>>>> zone.
>>>>
>>>> While at it, replace direct references to the device queue chunk_sectors
>>>> limit with calls to the accessor blk_queue_zone_sectors().
>>>>
>>>> Reported-by: Peter Desnoyers <pjd@ccs.neu.edu>
>>>> Signed-off-by: Damien Le Moal <damien.lemoal@wdc.com>
>>>
>>> Applied for 3.15 (also cc'd stable@)
>>
>> Thank you. Since this is a bug fix, I was hoping to get this in 4.14 as
>> this is scheduled as an LTS. Is it too late for that ?
>
> Not opposed to sending another 3.14 pull to Linus but I'd really
> prefer not to (especially in that we're already past rc7).
>
> Since 3.14 is LTS then there is no concern about 3.14's ability to get
> this fix via stable@ (once it is merged for 3.15).
OK. Thank you.
--
Damien Le Moal
Western Digital Research
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2017-10-31 6:55 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2017-10-28 7:39 [PATCH] dm: dm-zoned: Ignore last smaller runt zone Damien Le Moal
2017-10-30 20:05 ` Mike Snitzer
2017-10-31 0:48 ` Damien Le Moal
2017-10-31 2:15 ` Mike Snitzer
2017-10-31 6:55 ` Damien Le Moal
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.