diff options
author | Toshi Kani <toshi.kani@hpe.com> | 2016-06-28 13:37:16 -0600 |
---|---|---|
committer | Mike Snitzer <snitzer@redhat.com> | 2016-07-20 23:49:51 -0400 |
commit | f6e629bd2379dceb547be93915314307871a7f6c (patch) | |
tree | 3a2ef8ed074e273c081eca2ca0adfd4bce6f561d /drivers/md/dm-snap.c | |
parent | beec25b4573bc310f5a12cf33207b20ecc30945c (diff) | |
download | linux-stable-f6e629bd2379dceb547be93915314307871a7f6c.tar.gz linux-stable-f6e629bd2379dceb547be93915314307871a7f6c.tar.bz2 linux-stable-f6e629bd2379dceb547be93915314307871a7f6c.zip |
dm snap: add fake origin_direct_access
dax-capable mapped-device is marked as DM_TYPE_DAX_BIO_BASED,
which supports both dax and bio-based operations. dm-snap
needs to work with dax-capable device when bio-based operation
is used.
Add fake origin_direct_access() to origin device so that its
origin device is also marked as DM_TYPE_DAX_BIO_BASED for
dax-capable device. This allows to extend target's DM table.
dm-snap works normally when bio-based operation is used.
dm-snap does not support dax operation, and mount with dax
option to a target device or snapshot device fails.
Signed-off-by: Toshi Kani <toshi.kani@hpe.com>
Cc: Mike Snitzer <snitzer@redhat.com>
Cc: Alasdair Kergon <agk@redhat.com>
Cc: Dan Williams <dan.j.williams@intel.com>
Signed-off-by: Mike Snitzer <snitzer@redhat.com>
Diffstat (limited to 'drivers/md/dm-snap.c')
-rw-r--r-- | drivers/md/dm-snap.c | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/drivers/md/dm-snap.c b/drivers/md/dm-snap.c index 69ab1ff5f5c9..c472f0465f0e 100644 --- a/drivers/md/dm-snap.c +++ b/drivers/md/dm-snap.c @@ -2301,6 +2301,13 @@ static int origin_map(struct dm_target *ti, struct bio *bio) return do_origin(o->dev, bio); } +static long origin_direct_access(struct dm_target *ti, sector_t sector, + void __pmem **kaddr, pfn_t *pfn, long size) +{ + DMWARN("device does not support dax."); + return -EIO; +} + /* * Set the target "max_io_len" field to the minimum of all the snapshots' * chunk sizes. @@ -2360,6 +2367,7 @@ static struct target_type origin_target = { .postsuspend = origin_postsuspend, .status = origin_status, .iterate_devices = origin_iterate_devices, + .direct_access = origin_direct_access, }; static struct target_type snapshot_target = { |