diff options
author | Dan Williams <dan.j.williams@intel.com> | 2017-01-26 20:37:35 -0800 |
---|---|---|
committer | Dan Williams <dan.j.williams@intel.com> | 2017-04-20 11:57:52 -0700 |
commit | b0686260fecaa924d8eff2ace94bee70506bc308 (patch) | |
tree | 36193b32e9f64ee93c4dd02e29da9256e8930fb7 /fs/block_dev.c | |
parent | d8f07aee3f2fd959878bf614d4e984900018eb9e (diff) | |
download | linux-stable-b0686260fecaa924d8eff2ace94bee70506bc308.tar.gz linux-stable-b0686260fecaa924d8eff2ace94bee70506bc308.tar.bz2 linux-stable-b0686260fecaa924d8eff2ace94bee70506bc308.zip |
dax: introduce dax_direct_access()
Replace bdev_direct_access() with dax_direct_access() that uses
dax_device and dax_operations instead of a block_device and
block_device_operations for dax. Once all consumers of the old api have
been converted bdev_direct_access() will be deleted.
Given that block device partitioning decisions can cause dax page
alignment constraints to be violated this also introduces the
bdev_dax_pgoff() helper. It handles calculating a logical pgoff relative
to the dax_device and also checks for page alignment.
Signed-off-by: Dan Williams <dan.j.williams@intel.com>
Diffstat (limited to 'fs/block_dev.c')
-rw-r--r-- | fs/block_dev.c | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/fs/block_dev.c b/fs/block_dev.c index 7f40ea2f0875..2f7885712575 100644 --- a/fs/block_dev.c +++ b/fs/block_dev.c @@ -18,6 +18,7 @@ #include <linux/module.h> #include <linux/blkpg.h> #include <linux/magic.h> +#include <linux/dax.h> #include <linux/buffer_head.h> #include <linux/swap.h> #include <linux/pagevec.h> @@ -762,6 +763,19 @@ long bdev_direct_access(struct block_device *bdev, struct blk_dax_ctl *dax) } EXPORT_SYMBOL_GPL(bdev_direct_access); +int bdev_dax_pgoff(struct block_device *bdev, sector_t sector, size_t size, + pgoff_t *pgoff) +{ + phys_addr_t phys_off = (get_start_sect(bdev) + sector) * 512; + + if (pgoff) + *pgoff = PHYS_PFN(phys_off); + if (phys_off % PAGE_SIZE || size % PAGE_SIZE) + return -EINVAL; + return 0; +} +EXPORT_SYMBOL(bdev_dax_pgoff); + /** * bdev_dax_supported() - Check if the device supports dax for filesystem * @sb: The superblock of the device |