Message ID | 20240501110907.96950-4-dlemoal@kernel.org (mailing list archive) |
---|---|
State | Accepted, archived |
Delegated to: | Mike Snitzer |
Headers | show |
Series | Zone write plugging fixes and cleanup | expand |
On 5/1/24 13:08, Damien Le Moal wrote: > When revalidating the zones of a zoned block device, > blk_revalidate_zone_cb() must allocate a zone write plug for any > sequential write required zone that is not empty nor full. However, the > current code tests the latter case by comparing the zone write pointer > offset to the zone size instead of the zone capacity. Furthermore, > disk_get_and_lock_zone_wplug() is called with a sector argument equal to > the zone start instead of the current zone write pointer position. > This commit fixes both issues by calling disk_get_and_lock_zone_wplug() > for a zone that is not empty and with a write pointer offset lower than > the zone capacity and use the zone capacity sector as the sector > argument for disk_get_and_lock_zone_wplug(). > > Fixes: dd291d77cc90 ("block: Introduce zone write plugging") > Signed-off-by: Damien Le Moal <dlemoal@kernel.org> > Reviewed-by: Christoph Hellwig <hch@lst.de> > Reviewed-by: Johannes Thumshirn <johannes.thumshirn@wdc.com> > --- > block/blk-zoned.c | 7 ++++--- > 1 file changed, 4 insertions(+), 3 deletions(-) Reviewed-by: Hannes Reinecke <hare@suse.de> Cheers, Hannes
diff --git a/block/blk-zoned.c b/block/blk-zoned.c index 731d1abb80f6..7824bd52c82c 100644 --- a/block/blk-zoned.c +++ b/block/blk-zoned.c @@ -1664,10 +1664,11 @@ static int blk_revalidate_zone_cb(struct blk_zone *zone, unsigned int idx, * empty nor full. So make sure we have a zone write plug for * such zone if the device has a zone write plug hash table. */ + if (!disk->zone_wplugs_hash) + break; wp_offset = blk_zone_wp_offset(zone); - if (disk->zone_wplugs_hash && - wp_offset && wp_offset < zone_sectors) { - zwplug = disk_get_and_lock_zone_wplug(disk, zone->start, + if (wp_offset && wp_offset < zone->capacity) { + zwplug = disk_get_and_lock_zone_wplug(disk, zone->wp, GFP_NOIO, &flags); if (!zwplug) return -ENOMEM;