Re: [PATCH v10 05/13] nvme: zns: Allow ZNS drives that have non-power_of_2 zone size

From: Pankaj Raghav
Date: Wed Aug 17 2022 - 03:29:10 EST


Hi Keith,

On 2022-08-16 23:14, Keith Busch wrote:
> On Thu, Aug 11, 2022 at 04:30:35PM +0200, Pankaj Raghav wrote:
>> @@ -101,13 +101,6 @@ int nvme_update_zone_info(struct nvme_ns *ns, unsigned lbaf)
>> }
>>
>> ns->zsze = nvme_lba_to_sect(ns, le64_to_cpu(id->lbafe[lbaf].zsze));
>> - if (!is_power_of_2(ns->zsze)) {
>> - dev_warn(ns->ctrl->device,
>> - "invalid zone size:%llu for namespace:%u\n",
>> - ns->zsze, ns->head->ns_id);
>> - status = -ENODEV;
>> - goto free_data;
>> - }
>
> We used to bail out early if the format wasn't supported, which wouldn't create
> the namespace.
>
> Now you are relying on blk_revalidate_disk_zones() to report an error for
> invalid format, but the handling for an error there is different: the namespace
> still gets created. I'm not sure if that's a problem, but it's different.
That is right but it is not a problem. Once the block layer supports the
non-po2 zone sizes, we don't need to bail out here because it will be
compatible. If unequal zone sizes are found, block layer will report an
error during blk_revalidate_disk_zones() which is the current behavior anyway.

Other checks such as zone operation support are still in
nvme_update_zone_info() resulting in an early bail out if violated.