Re: [PATCH 02/19] dax: Pass dax_dev to dax_writeback_mapping_range()
From: Vivek Goyal
Date: Fri Jan 03 2020 - 13:43:31 EST
On Fri, Jan 03, 2020 at 10:18:22AM -0800, Dan Williams wrote:
> I'll also circle back to your question about
> partitions on patch1.
Hi Dan,
I was playing with having sector information in dax device (and not having
to look back at bdev). I was thinking of something as follows.
- Create a new structure/handle which also contains offset into dax device
in sectors. Say.
struct dax_handle {
sector_t start_sect;
struct dax_device *dax_dev;
}
This handle will have pointer to the actual dax device.
- Modify dax_get_by_bdev(struct block_device *bdev) to return dax_handle
(instead of dax device).
struct dax_handle *dax_get_by_bdev(struct block_device *bdev);
This will create dax_handle. Find dax_device from hash table and
initialize dax_handle.
dax_handle->start_sect = get_start_sect(bdev);
dax_handle->dax_dev = dax_dev;
Now filesystem and stacked block devices can get pointer to dax_handle
using block device and they can use this handle to refer to underlying
dax device partition.
- Now dax_handle can be passed around and hopefully we can get rid of
passing around bdev in many of the dax interfaces. And partition offset
information has now moved into dax_handle.
- For the use cases which don't have a bdev (like virtiofs), we can
provide another helper to get dax_handle with offset 0. And then
we should not need a bdev to be able to use dax API.
Does this sound like a reasonable step in the direction of getting rid
of this assumption that every dax_device has associated block_device.
Thanks
Vivek