All of lore.kernel.org
 help / color / mirror / Atom feed
From: Toshi Kani <toshi.kani@hpe.com>
To: agk@redhat.com, snitzer@redhat.com, dan.j.williams@intel.com
Cc: axboe@kernel.dk, linux-nvdimm@lists.01.org,
	linux-kernel@vger.kernel.org, linux-raid@vger.kernel.org,
	dm-devel@redhat.com, viro@zeniv.linux.org.uk
Subject: [PATCH 3/6] dm: Add dm_blk_direct_access() for mapped device
Date: Mon, 13 Jun 2016 16:21:34 -0600	[thread overview]
Message-ID: <1465856497-19698-4-git-send-email-toshi.kani@hpe.com> (raw)
In-Reply-To: <1465856497-19698-1-git-send-email-toshi.kani@hpe.com>

Change mapped device to implement direct_access function,
dm_blk_direct_access(), which calls a target direct_access
function.  'struct target_type' is extended to have target
direct_access interface.  This function limits direct
accessible size to the dm_target's limit with max_io_len().

Signed-off-by: Toshi Kani <toshi.kani@hpe.com>
Cc: Alasdair Kergon <agk@redhat.com>
Cc: Mike Snitzer <snitzer@redhat.com>
Cc: Dan Williams <dan.j.williams@intel.com>
Cc: Ross Zwisler <ross.zwisler@linux.intel.com>
---
 drivers/md/dm.c               |   29 +++++++++++++++++++++++++++++
 include/linux/device-mapper.h |   10 ++++++++++
 2 files changed, 39 insertions(+)

diff --git a/drivers/md/dm.c b/drivers/md/dm.c
index 1b2f962..6e9f958 100644
--- a/drivers/md/dm.c
+++ b/drivers/md/dm.c
@@ -1473,6 +1473,34 @@ int dm_set_target_max_io_len(struct dm_target *ti, sector_t len)
 }
 EXPORT_SYMBOL_GPL(dm_set_target_max_io_len);
 
+static long dm_blk_direct_access(struct block_device *bdev, sector_t sector,
+	void __pmem **kaddr, pfn_t *pfn, long size)
+{
+	struct mapped_device *md = bdev->bd_disk->private_data;
+	struct dm_table *map;
+	struct dm_target *ti;
+	int srcu_idx;
+	long len, ret = -EIO;
+
+	map = dm_get_live_table(md, &srcu_idx);
+	if (!map)
+		return ret;
+
+	ti = dm_table_find_target(map, sector);
+	if (!dm_target_is_valid(ti))
+		goto out;
+
+	len = max_io_len(sector, ti) << SECTOR_SHIFT;
+	size = min(len, size);
+
+	if (ti->type->direct_access)
+		ret = ti->type->direct_access(ti, sector, kaddr, pfn, size);
+
+out:
+	dm_put_live_table(md, srcu_idx);
+	return min(ret, size);
+}
+
 /*
  * A target may call dm_accept_partial_bio only from the map routine.  It is
  * allowed for all bio types except REQ_FLUSH.
@@ -3721,6 +3749,7 @@ static const struct block_device_operations dm_blk_dops = {
 	.open = dm_blk_open,
 	.release = dm_blk_close,
 	.ioctl = dm_blk_ioctl,
+	.direct_access = dm_blk_direct_access,
 	.getgeo = dm_blk_getgeo,
 	.pr_ops = &dm_pr_ops,
 	.owner = THIS_MODULE
diff --git a/include/linux/device-mapper.h b/include/linux/device-mapper.h
index 0830c9e..16e6c8c 100644
--- a/include/linux/device-mapper.h
+++ b/include/linux/device-mapper.h
@@ -116,6 +116,15 @@ typedef void (*dm_io_hints_fn) (struct dm_target *ti,
  */
 typedef int (*dm_busy_fn) (struct dm_target *ti);
 
+/*
+ * Returns:
+ *  < 0 : error
+ * >= 0 : the number of bytes accessible at the address
+ */
+typedef long (*dm_direct_access_fn) (struct dm_target *ti, sector_t sector,
+				     void __pmem **kaddr, pfn_t *pfn,
+				     long size);
+
 void dm_error(const char *message);
 
 struct dm_dev {
@@ -162,6 +171,7 @@ struct target_type {
 	dm_busy_fn busy;
 	dm_iterate_devices_fn iterate_devices;
 	dm_io_hints_fn io_hints;
+	dm_direct_access_fn direct_access;
 
 	/* For internal device-mapper use. */
 	struct list_head list;
_______________________________________________
Linux-nvdimm mailing list
Linux-nvdimm@lists.01.org
https://lists.01.org/mailman/listinfo/linux-nvdimm

WARNING: multiple messages have this Message-ID (diff)
From: Toshi Kani <toshi.kani@hpe.com>
To: agk@redhat.com, snitzer@redhat.com, dan.j.williams@intel.com
Cc: ross.zwisler@linux.intel.com, viro@zeniv.linux.org.uk,
	axboe@kernel.dk, toshi.kani@hpe.com, linux-nvdimm@lists.01.org,
	dm-devel@redhat.com, linux-raid@vger.kernel.org,
	linux-kernel@vger.kernel.org
Subject: [PATCH 3/6] dm: Add dm_blk_direct_access() for mapped device
Date: Mon, 13 Jun 2016 16:21:34 -0600	[thread overview]
Message-ID: <1465856497-19698-4-git-send-email-toshi.kani@hpe.com> (raw)
In-Reply-To: <1465856497-19698-1-git-send-email-toshi.kani@hpe.com>

Change mapped device to implement direct_access function,
dm_blk_direct_access(), which calls a target direct_access
function.  'struct target_type' is extended to have target
direct_access interface.  This function limits direct
accessible size to the dm_target's limit with max_io_len().

Signed-off-by: Toshi Kani <toshi.kani@hpe.com>
Cc: Alasdair Kergon <agk@redhat.com>
Cc: Mike Snitzer <snitzer@redhat.com>
Cc: Dan Williams <dan.j.williams@intel.com>
Cc: Ross Zwisler <ross.zwisler@linux.intel.com>
---
 drivers/md/dm.c               |   29 +++++++++++++++++++++++++++++
 include/linux/device-mapper.h |   10 ++++++++++
 2 files changed, 39 insertions(+)

diff --git a/drivers/md/dm.c b/drivers/md/dm.c
index 1b2f962..6e9f958 100644
--- a/drivers/md/dm.c
+++ b/drivers/md/dm.c
@@ -1473,6 +1473,34 @@ int dm_set_target_max_io_len(struct dm_target *ti, sector_t len)
 }
 EXPORT_SYMBOL_GPL(dm_set_target_max_io_len);
 
+static long dm_blk_direct_access(struct block_device *bdev, sector_t sector,
+	void __pmem **kaddr, pfn_t *pfn, long size)
+{
+	struct mapped_device *md = bdev->bd_disk->private_data;
+	struct dm_table *map;
+	struct dm_target *ti;
+	int srcu_idx;
+	long len, ret = -EIO;
+
+	map = dm_get_live_table(md, &srcu_idx);
+	if (!map)
+		return ret;
+
+	ti = dm_table_find_target(map, sector);
+	if (!dm_target_is_valid(ti))
+		goto out;
+
+	len = max_io_len(sector, ti) << SECTOR_SHIFT;
+	size = min(len, size);
+
+	if (ti->type->direct_access)
+		ret = ti->type->direct_access(ti, sector, kaddr, pfn, size);
+
+out:
+	dm_put_live_table(md, srcu_idx);
+	return min(ret, size);
+}
+
 /*
  * A target may call dm_accept_partial_bio only from the map routine.  It is
  * allowed for all bio types except REQ_FLUSH.
@@ -3721,6 +3749,7 @@ static const struct block_device_operations dm_blk_dops = {
 	.open = dm_blk_open,
 	.release = dm_blk_close,
 	.ioctl = dm_blk_ioctl,
+	.direct_access = dm_blk_direct_access,
 	.getgeo = dm_blk_getgeo,
 	.pr_ops = &dm_pr_ops,
 	.owner = THIS_MODULE
diff --git a/include/linux/device-mapper.h b/include/linux/device-mapper.h
index 0830c9e..16e6c8c 100644
--- a/include/linux/device-mapper.h
+++ b/include/linux/device-mapper.h
@@ -116,6 +116,15 @@ typedef void (*dm_io_hints_fn) (struct dm_target *ti,
  */
 typedef int (*dm_busy_fn) (struct dm_target *ti);
 
+/*
+ * Returns:
+ *  < 0 : error
+ * >= 0 : the number of bytes accessible at the address
+ */
+typedef long (*dm_direct_access_fn) (struct dm_target *ti, sector_t sector,
+				     void __pmem **kaddr, pfn_t *pfn,
+				     long size);
+
 void dm_error(const char *message);
 
 struct dm_dev {
@@ -162,6 +171,7 @@ struct target_type {
 	dm_busy_fn busy;
 	dm_iterate_devices_fn iterate_devices;
 	dm_io_hints_fn io_hints;
+	dm_direct_access_fn direct_access;
 
 	/* For internal device-mapper use. */
 	struct list_head list;

WARNING: multiple messages have this Message-ID (diff)
From: Toshi Kani <toshi.kani@hpe.com>
To: agk@redhat.com, snitzer@redhat.com, dan.j.williams@intel.com
Cc: ross.zwisler@linux.intel.com, viro@zeniv.linux.org.uk,
	axboe@kernel.dk, toshi.kani@hpe.com, linux-nvdimm@ml01.01.org,
	dm-devel@redhat.com, linux-raid@vger.kernel.org,
	linux-kernel@vger.kernel.org
Subject: [PATCH 3/6] dm: Add dm_blk_direct_access() for mapped device
Date: Mon, 13 Jun 2016 16:21:34 -0600	[thread overview]
Message-ID: <1465856497-19698-4-git-send-email-toshi.kani@hpe.com> (raw)
In-Reply-To: <1465856497-19698-1-git-send-email-toshi.kani@hpe.com>

Change mapped device to implement direct_access function,
dm_blk_direct_access(), which calls a target direct_access
function.  'struct target_type' is extended to have target
direct_access interface.  This function limits direct
accessible size to the dm_target's limit with max_io_len().

Signed-off-by: Toshi Kani <toshi.kani@hpe.com>
Cc: Alasdair Kergon <agk@redhat.com>
Cc: Mike Snitzer <snitzer@redhat.com>
Cc: Dan Williams <dan.j.williams@intel.com>
Cc: Ross Zwisler <ross.zwisler@linux.intel.com>
---
 drivers/md/dm.c               |   29 +++++++++++++++++++++++++++++
 include/linux/device-mapper.h |   10 ++++++++++
 2 files changed, 39 insertions(+)

diff --git a/drivers/md/dm.c b/drivers/md/dm.c
index 1b2f962..6e9f958 100644
--- a/drivers/md/dm.c
+++ b/drivers/md/dm.c
@@ -1473,6 +1473,34 @@ int dm_set_target_max_io_len(struct dm_target *ti, sector_t len)
 }
 EXPORT_SYMBOL_GPL(dm_set_target_max_io_len);
 
+static long dm_blk_direct_access(struct block_device *bdev, sector_t sector,
+	void __pmem **kaddr, pfn_t *pfn, long size)
+{
+	struct mapped_device *md = bdev->bd_disk->private_data;
+	struct dm_table *map;
+	struct dm_target *ti;
+	int srcu_idx;
+	long len, ret = -EIO;
+
+	map = dm_get_live_table(md, &srcu_idx);
+	if (!map)
+		return ret;
+
+	ti = dm_table_find_target(map, sector);
+	if (!dm_target_is_valid(ti))
+		goto out;
+
+	len = max_io_len(sector, ti) << SECTOR_SHIFT;
+	size = min(len, size);
+
+	if (ti->type->direct_access)
+		ret = ti->type->direct_access(ti, sector, kaddr, pfn, size);
+
+out:
+	dm_put_live_table(md, srcu_idx);
+	return min(ret, size);
+}
+
 /*
  * A target may call dm_accept_partial_bio only from the map routine.  It is
  * allowed for all bio types except REQ_FLUSH.
@@ -3721,6 +3749,7 @@ static const struct block_device_operations dm_blk_dops = {
 	.open = dm_blk_open,
 	.release = dm_blk_close,
 	.ioctl = dm_blk_ioctl,
+	.direct_access = dm_blk_direct_access,
 	.getgeo = dm_blk_getgeo,
 	.pr_ops = &dm_pr_ops,
 	.owner = THIS_MODULE
diff --git a/include/linux/device-mapper.h b/include/linux/device-mapper.h
index 0830c9e..16e6c8c 100644
--- a/include/linux/device-mapper.h
+++ b/include/linux/device-mapper.h
@@ -116,6 +116,15 @@ typedef void (*dm_io_hints_fn) (struct dm_target *ti,
  */
 typedef int (*dm_busy_fn) (struct dm_target *ti);
 
+/*
+ * Returns:
+ *  < 0 : error
+ * >= 0 : the number of bytes accessible at the address
+ */
+typedef long (*dm_direct_access_fn) (struct dm_target *ti, sector_t sector,
+				     void __pmem **kaddr, pfn_t *pfn,
+				     long size);
+
 void dm_error(const char *message);
 
 struct dm_dev {
@@ -162,6 +171,7 @@ struct target_type {
 	dm_busy_fn busy;
 	dm_iterate_devices_fn iterate_devices;
 	dm_io_hints_fn io_hints;
+	dm_direct_access_fn direct_access;
 
 	/* For internal device-mapper use. */
 	struct list_head list;

  parent reply	other threads:[~2016-06-13 22:32 UTC|newest]

Thread overview: 91+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-06-13 22:21 [PATCH 0/6] Support DAX for device-mapper dm-linear devices Toshi Kani
2016-06-13 22:21 ` Toshi Kani
2016-06-13 22:21 ` Toshi Kani
2016-06-13 22:21 ` [PATCH 1/6] genhd: Add GENHD_FL_DAX to gendisk flags Toshi Kani
2016-06-13 22:21   ` Toshi Kani
2016-06-13 22:21   ` Toshi Kani
2016-06-13 22:21 ` [PATCH 2/6] block: Check GENHD_FL_DAX for DAX capability Toshi Kani
2016-06-13 22:21   ` Toshi Kani
2016-06-13 22:21   ` Toshi Kani
2016-06-13 22:21   ` Toshi Kani
2016-06-13 22:21 ` Toshi Kani [this message]
2016-06-13 22:21   ` [PATCH 3/6] dm: Add dm_blk_direct_access() for mapped device Toshi Kani
2016-06-13 22:21   ` Toshi Kani
2016-06-13 22:21 ` [PATCH 4/6] dm-linear: Add linear_direct_access() Toshi Kani
2016-06-13 22:21   ` Toshi Kani
2016-06-13 22:21   ` Toshi Kani
2016-06-13 22:21 ` [PATCH 5/6] dm, dm-linear: Add dax_supported to dm_target Toshi Kani
2016-06-13 22:21   ` Toshi Kani
2016-06-13 22:21   ` Toshi Kani
2016-06-13 22:21 ` [PATCH 6/6] dm: Enable DAX support for mapper device Toshi Kani
2016-06-13 22:21   ` Toshi Kani
2016-06-13 22:21   ` Toshi Kani
2016-06-13 22:57 ` [PATCH 0/6] Support DAX for device-mapper dm-linear devices Mike Snitzer
     [not found]   ` <20160613225756.GA18417-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2016-06-20 18:00     ` Mike Snitzer
2016-06-20 18:00       ` Mike Snitzer
     [not found]       ` <20160620180043.GA21261-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2016-06-20 18:31         ` Kani, Toshimitsu
2016-06-20 18:31           ` Kani, Toshimitsu
     [not found]           ` <1466446861.3504.243.camel-ZPxbGqLxI0U@public.gmane.org>
2016-06-20 19:40             ` Mike Snitzer
2016-06-20 19:40               ` Mike Snitzer
     [not found]               ` <20160620194026.GA21657-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2016-06-20 19:52                 ` Mike Snitzer
2016-06-20 19:52                   ` Mike Snitzer
     [not found]                   ` <20160620195217.GB21657-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2016-06-20 20:11                     ` Kani, Toshimitsu
2016-06-20 20:11                       ` Kani, Toshimitsu
     [not found]                       ` <1466452883.3504.244.camel-ZPxbGqLxI0U@public.gmane.org>
2016-06-20 21:28                         ` Kani, Toshimitsu
2016-06-20 21:28                           ` Kani, Toshimitsu
     [not found]                           ` <1466457467.3504.249.camel-ZPxbGqLxI0U@public.gmane.org>
2016-06-20 22:22                             ` Mike Snitzer
2016-06-20 22:22                               ` Mike Snitzer
     [not found]                               ` <20160620222236.GA22461-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2016-06-21 13:41                                 ` Mike Snitzer
2016-06-21 13:41                                   ` Mike Snitzer
     [not found]                                   ` <20160621134147.GA26392-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2016-06-21 15:44                                     ` Kani, Toshimitsu
2016-06-21 15:44                                       ` Kani, Toshimitsu
     [not found]                                       ` <1466523280.3504.262.camel-ZPxbGqLxI0U@public.gmane.org>
2016-06-21 15:50                                         ` Kani, Toshimitsu
2016-06-21 15:50                                           ` Kani, Toshimitsu
2016-06-21 16:25                                         ` Dan Williams
2016-06-21 16:25                                           ` Dan Williams
     [not found]                                           ` <CAPcyv4gFREc94ANuFD_Lyddx3iqRTN2UDebgeJe3LqPL8xrVzg-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2016-06-21 16:35                                             ` Kani, Toshimitsu
2016-06-21 16:35                                               ` Kani, Toshimitsu
     [not found]                                               ` <1466526342.3504.270.camel-ZPxbGqLxI0U@public.gmane.org>
2016-06-21 16:45                                                 ` Dan Williams
2016-06-21 16:45                                                   ` Dan Williams
     [not found]                                                   ` <CAPcyv4ht8B7dHe1ckv5d=bOrRzCy3=ZDVSTD0rRsak_LYD8r8g-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2016-06-21 16:56                                                     ` Kani, Toshimitsu
2016-06-21 16:56                                                       ` Kani, Toshimitsu
2016-06-21 18:17                                         ` Mike Snitzer
2016-06-21 18:17                                           ` Mike Snitzer
2016-06-22 17:44                                           ` Kani, Toshimitsu
2016-06-22 17:44                                             ` Kani, Toshimitsu
     [not found]                                             ` <1466616868.3504.320.camel-ZPxbGqLxI0U@public.gmane.org>
2016-06-22 19:15                                               ` Dan Williams
2016-06-22 19:15                                                 ` Dan Williams
2016-06-22 20:16                                                 ` Kani, Toshimitsu
2016-06-22 22:38                                                   ` Mike Snitzer
2016-06-22 22:38                                                     ` Mike Snitzer
     [not found]                                                     ` <20160622223842.GA34512-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2016-06-22 22:59                                                       ` Kani, Toshimitsu
2016-06-22 22:59                                                         ` Kani, Toshimitsu
2016-06-13 23:18 ` Dan Williams
2016-06-13 23:18   ` Dan Williams
2016-06-13 23:18   ` Dan Williams
2016-06-13 23:59   ` Kani, Toshimitsu
2016-06-13 23:59     ` Kani, Toshimitsu
2016-06-13 23:59     ` Kani, Toshimitsu
2016-06-14  0:02     ` Dan Williams
2016-06-14  0:02       ` Dan Williams
2016-06-14  0:02       ` Dan Williams
2016-06-14  7:30       ` Dan Williams
2016-06-14  7:30         ` Dan Williams
2016-06-14  7:30         ` Dan Williams
2016-06-14 13:50     ` Jeff Moyer
2016-06-14 13:50       ` Jeff Moyer
2016-06-14 13:50       ` Jeff Moyer
2016-06-14 15:41       ` Mike Snitzer
2016-06-14 15:41         ` Mike Snitzer
2016-06-14 15:41         ` Mike Snitzer
2016-06-14 18:00         ` Kani, Toshimitsu
2016-06-14 20:19         ` Jeff Moyer
2016-06-14 20:19           ` Jeff Moyer
2016-06-14 20:19           ` Jeff Moyer
2016-06-15  1:46           ` Mike Snitzer
2016-06-15  1:46             ` Mike Snitzer
2016-06-15  2:07             ` Dan Williams
2016-06-15  2:07               ` Dan Williams
2016-06-15  2:35               ` Mike Snitzer
2016-06-15  2:35                 ` Mike Snitzer
2016-06-14 15:53       ` Kani, Toshimitsu

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1465856497-19698-4-git-send-email-toshi.kani@hpe.com \
    --to=toshi.kani@hpe.com \
    --cc=agk@redhat.com \
    --cc=axboe@kernel.dk \
    --cc=dan.j.williams@intel.com \
    --cc=dm-devel@redhat.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-nvdimm@lists.01.org \
    --cc=linux-raid@vger.kernel.org \
    --cc=snitzer@redhat.com \
    --cc=viro@zeniv.linux.org.uk \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.