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.