Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 84b22f83 authored by Toshi Kani's avatar Toshi Kani Committed by Mike Snitzer
Browse files

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: default avatarToshi Kani <toshi.kani@hpe.com>
Signed-off-by: default avatarMike Snitzer <snitzer@redhat.com>
parent 545ed20e
Loading
Loading
Loading
Loading
+20 −1
Original line number Original line Diff line number Diff line
@@ -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)