On Fri, Sep 08, 2017 at 09:12:12AM -0700, Damien Le Moal wrote: > 1) The zone size and the number of zones of the device (for the bitmaps > allocation and offset->zone number conversion). > 2) Zone type for the optimization that avoids locking conventional zones. > > (2) is optional. We can do without, but still really nice to have from a > performance perspective as conventional zones tend to be used for > storing metadata. So a lot of small random writes is more likely and > high queue depth writing would improve performance significantly. > > For (1), the zone size is known through q->limits.chunk_sectors. But the > disk capacity is not known using request_queue only, so the number of > zones cannot be calculated... I thought of exporting it through queue > limits too, but then stacking of device mappers using ZBC drives becomes > a pain as the number of zones needs to be recalculated. For 4.14-rc+ you should be able to easily get at the gendisk as the whole submission path is now gendisk based, although it might need some minor argument reshuffle to pass it instead of the request_queue in a few places. Note that for everything passing the request you can get the gendisk from the request as it contains a pointer. The only annoying issue is that some of our passthrough character device callers don't have a gendisk at all, which causes problems all over and should probably be fixed at some point.