forked from Minki/linux
dm linear: add DAX support
Change dm-linear to implement direct_access function, linear_direct_access(), which maps sector and calls direct_access function of its physical target device. Signed-off-by: Toshi Kani <toshi.kani@hpe.com> Signed-off-by: Mike Snitzer <snitzer@redhat.com>
This commit is contained in:
parent
545ed20e6d
commit
84b22f8378
@ -141,9 +141,27 @@ static int linear_iterate_devices(struct dm_target *ti,
|
|||||||
return fn(ti, lc->dev, lc->start, ti->len, data);
|
return fn(ti, lc->dev, lc->start, ti->len, data);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static long linear_direct_access(struct dm_target *ti, sector_t sector,
|
||||||
|
void __pmem **kaddr, pfn_t *pfn, long size)
|
||||||
|
{
|
||||||
|
struct linear_c *lc = ti->private;
|
||||||
|
struct block_device *bdev = lc->dev->bdev;
|
||||||
|
struct blk_dax_ctl dax = {
|
||||||
|
.sector = linear_map_sector(ti, sector),
|
||||||
|
.size = size,
|
||||||
|
};
|
||||||
|
long ret;
|
||||||
|
|
||||||
|
ret = bdev_direct_access(bdev, &dax);
|
||||||
|
*kaddr = dax.addr;
|
||||||
|
*pfn = dax.pfn;
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
static struct target_type linear_target = {
|
static struct target_type linear_target = {
|
||||||
.name = "linear",
|
.name = "linear",
|
||||||
.version = {1, 2, 1},
|
.version = {1, 3, 0},
|
||||||
.module = THIS_MODULE,
|
.module = THIS_MODULE,
|
||||||
.ctr = linear_ctr,
|
.ctr = linear_ctr,
|
||||||
.dtr = linear_dtr,
|
.dtr = linear_dtr,
|
||||||
@ -151,6 +169,7 @@ static struct target_type linear_target = {
|
|||||||
.status = linear_status,
|
.status = linear_status,
|
||||||
.prepare_ioctl = linear_prepare_ioctl,
|
.prepare_ioctl = linear_prepare_ioctl,
|
||||||
.iterate_devices = linear_iterate_devices,
|
.iterate_devices = linear_iterate_devices,
|
||||||
|
.direct_access = linear_direct_access,
|
||||||
};
|
};
|
||||||
|
|
||||||
int __init dm_linear_init(void)
|
int __init dm_linear_init(void)
|
||||||
|
Loading…
Reference in New Issue
Block a user