On 2020/5/16 20:40, Christoph Hellwig wrote: > On Sat, May 16, 2020 at 11:54:33AM +0800, Coly Li wrote: >> The bcache driver is bio based and NOT request based multiqueued driver, >> if a zoned SMR hard drive is used as backing device of a bcache device, >> calling blk_revalidate_disk_zones() for the bcache device will fail due >> to the following check in blk_revalidate_disk_zones(), >> 478 if (WARN_ON_ONCE(!queue_is_mq(q))) >> 479 return -EIO; >> >> Now bcache is able to export the zoned information from the underlying >> zoned SMR drives and format zonefs on top of a bcache device, the >> resitriction that a zoned device should be multiqueued is unnecessary >> for now. >> >> Although in commit ae58954d8734c ("block: don't handle bio based drivers >> in blk_revalidate_disk_zones") it is said that bio based drivers should >> not call blk_revalidate_disk_zones() and just manually update their own >> q->nr_zones, but this is inaccurate. The bio based drivers also need to >> set their zone size and initialize bitmaps for cnv and seq zones, it is >> necessary to call blk_revalidate_disk_zones() for bio based drivers. > > Why would you need these bitmaps for bcache? There is no reason to > serialize requests for stacking drivers, and you can already derive > if a zone is sequential or not from whatever internal information > you use. > > So without a user that actually makes sense: NAK. > It is OK for me to set the zone_nr and zone size without calling blk_revalidate_disk_zones(). Coly Li