Re: [PATCH v2 1/2] block: only use the cached zone report if BLK_ZONE_REP_CACHED is set
From: Damien Le Moal
Date: Mon Oct 12 2026 - 07:35:04 EST
On 2026/10/11 17:40, Shashank Mohan Jain wrote:
> BLKREPORTZONEV2 takes the flags field of struct blk_zone_report as an
> input. With BLK_ZONE_REP_CACHED the report is built from the zone
> information cached by the block layer. Without it, BLKREPORTZONEV2 is
> documented to behave like BLKREPORTZONE and to get the report from the
> device: this is what the changelog of the commit that added the ioctl
> and the comments in include/uapi/linux/blkzoned.h say.
>
> blkdev_report_zones_ioctl() only uses the flag to validate the input
> and calls blkdev_report_zones_cached() for every BLKREPORTZONEV2
> request. A caller that passes flags == 0 gets the cached report, in
> which implicitly open, explicitly open and closed zones all have the
> condition BLK_ZONE_COND_ACTIVE, and an explicitly opened empty zone is
> reported as empty.
>
> Example with a zoned null_blk device (10 MiB, 4 MiB zones) after
> BLKOPENZONE on zone 0, and a write of 8 sectors to zone 1 followed by
> BLKCLOSEZONE:
>
> BLKREPORTZONE: zone 0 cond 0x3 (EXP_OPEN)
> zone 1 cond 0x4 (CLOSED)
> BLKREPORTZONEV2, flags 0: zone 0 cond 0x1 (EMPTY)
> zone 1 cond 0xff (ACTIVE)
>
> The uapi header marks BLKREPORTZONE as deprecated in favour of
> BLKREPORTZONEV2. A program that follows this and does not ask for
> cached information can no longer tell open zones from closed ones, and
> is handed BLK_ZONE_COND_ACTIVE, which is only defined for the cached
> report.
>
> Use the cached report only when BLK_ZONE_REP_CACHED is set and the
> device has a cached report; otherwise, and whenever the flag is not
> set, get the report from the device with blkdev_report_zones(). Guard
> the cached path with blkdev_has_cached_report_zones() so the redundant
> call is avoided when there is no cached report: in that case
> blkdev_report_zones_cached() already falls back to a device report, so
> the observable behaviour is unchanged. blkdev_has_cached_report_zones()
> is defined lower in the file, so move it, with its comment, above
> blkdev_report_zones_ioctl().
>
> Tested with zoned null_blk devices in qemu: a program that compares
> the reports of BLKREPORTZONE and BLKREPORTZONEV2 with flags 0 after
> the sequence above finds the differences before this change and none
> with it. The report with BLK_ZONE_REP_CACHED is unchanged.
>
> Fixes: b30ffcdc0c15 ("block: introduce BLKREPORTZONESV2 ioctl")
> Cc: stable@xxxxxxxxxxxxxxx
> Assisted-by: LLM
> Signed-off-by: Shashank Mohan Jain <jain.sm@xxxxxxxxx>
Looks good.
Reviewed-by: Damien Le Moal <dlemoal@xxxxxxxxxx>
--
Damien Le Moal
Western Digital Research