On Thu, Aug 24, 2017 at 10:32 PM, Darrick J. Wong <darrick.w...@oracle.com> wrote: > On Thu, Aug 24, 2017 at 05:35:48PM -0700, Dan Williams wrote: >> The ->iomap_begin() operation is a hot path, so cache the >> fs_dax_get_by_host() result to avoid the incurring the hash lookup >> overhead. > > Just out of curiosity (and sorry if this has already been discussed to > death and I'm merely ignorant) but I was wondering why the daxdev isn't > simply attached to the block_device? Is it not a 1:1 mapping?
The motivation was to remove all dax details from the block layer. However, we still have the QUEUE_DAX flag which defeats that goal. Hmm, a dax_device is similar to a request_queue as a path to access capacity, so I think it might make sense to just replace the queue flag with a full ->dax_dev pointer hanging off the gendisk. This would also fix the bug I just realized was in these patches around matching dax_get_by_host() with put_dax(). In fact, if it's acceptable to hang a dax_dev off a gendisk then we don't need dax_get_by_host() at all.