From: Nitesh Shetty <nj.shetty@samsung.com> To: axboe@kernel.dk, agk@redhat.com, snitzer@kernel.org, dm-devel@redhat.com, kbusch@kernel.org, hch@lst.de, sagi@grimberg.me, james.smart@broadcom.com, kch@nvidia.com, damien.lemoal@opensource.wdc.com, naohiro.aota@wdc.com, jth@kernel.org, viro@zeniv.linux.org.uk Cc: linux-block@vger.kernel.org, linux-kernel@vger.kernel.org, linux-nvme@lists.infradead.org, linux-fsdevel@vger.kernel.org, anuj20.g@samsung.com, joshi.k@samsung.com, p.raghav@samsung.com, nitheshshetty@gmail.com, gost.dev@samsung.com, Nitesh Shetty <nj.shetty@samsung.com> Subject: [PATCH v5 07/10] dm: Add support for copy offload. Date: Wed, 23 Nov 2022 11:28:24 +0530 [thread overview] Message-ID: <20221123055827.26996-8-nj.shetty@samsung.com> (raw) In-Reply-To: <20221123055827.26996-1-nj.shetty@samsung.com> Before enabling copy for dm target, check if underlying devices and dm target support copy. Avoid split happening inside dm target. Fail early if the request needs split, currently splitting copy request is not supported. Signed-off-by: Nitesh Shetty <nj.shetty@samsung.com> --- drivers/md/dm-table.c | 42 +++++++++++++++++++++++++++++++++++ drivers/md/dm.c | 7 ++++++ include/linux/device-mapper.h | 5 +++++ 3 files changed, 54 insertions(+) diff --git a/drivers/md/dm-table.c b/drivers/md/dm-table.c index 078da18bb86d..b2073e857a74 100644 --- a/drivers/md/dm-table.c +++ b/drivers/md/dm-table.c @@ -1875,6 +1875,39 @@ static bool dm_table_supports_nowait(struct dm_table *t) return true; } +static int device_not_copy_capable(struct dm_target *ti, struct dm_dev *dev, + sector_t start, sector_t len, void *data) +{ + struct request_queue *q = bdev_get_queue(dev->bdev); + + return !blk_queue_copy(q); +} + +static bool dm_table_supports_copy(struct dm_table *t) +{ + struct dm_target *ti; + unsigned int i; + + for (i = 0; i < t->num_targets; i++) { + ti = dm_table_get_target(t, i); + + if (!ti->copy_offload_supported) + return false; + + /* + * target provides copy support (as implied by setting + * 'copy_offload_supported') + * and it relies on _all_ data devices having copy support. + */ + if (!ti->type->iterate_devices || + ti->type->iterate_devices(ti, + device_not_copy_capable, NULL)) + return false; + } + + return true; +} + static int device_not_discard_capable(struct dm_target *ti, struct dm_dev *dev, sector_t start, sector_t len, void *data) { @@ -1957,6 +1990,15 @@ int dm_table_set_restrictions(struct dm_table *t, struct request_queue *q, q->limits.discard_misaligned = 0; } + if (!dm_table_supports_copy(t)) { + blk_queue_flag_clear(QUEUE_FLAG_COPY, q); + /* Must also clear copy limits... */ + q->limits.max_copy_sectors = 0; + q->limits.max_copy_sectors_hw = 0; + } else { + blk_queue_flag_set(QUEUE_FLAG_COPY, q); + } + if (!dm_table_supports_secure_erase(t)) q->limits.max_secure_erase_sectors = 0; diff --git a/drivers/md/dm.c b/drivers/md/dm.c index e1ea3a7bd9d9..713335995290 100644 --- a/drivers/md/dm.c +++ b/drivers/md/dm.c @@ -1690,6 +1690,13 @@ static blk_status_t __split_and_process_bio(struct clone_info *ci) if (unlikely(ci->is_abnormal_io)) return __process_abnormal_io(ci, ti); + if ((unlikely(op_is_copy(ci->bio->bi_opf)) && + max_io_len(ti, ci->sector) < ci->sector_count)) { + DMERR("Error, IO size(%u) > max target size(%llu)\n", + ci->sector_count, max_io_len(ti, ci->sector)); + return BLK_STS_IOERR; + } + /* * Only support bio polling for normal IO, and the target io is * exactly inside the dm_io instance (verified in dm_poll_dm_io) diff --git a/include/linux/device-mapper.h b/include/linux/device-mapper.h index 04c6acf7faaa..da4e77e81011 100644 --- a/include/linux/device-mapper.h +++ b/include/linux/device-mapper.h @@ -379,6 +379,11 @@ struct dm_target { * bio_set_dev(). NOTE: ideally a target should _not_ need this. */ bool needs_bio_set_dev:1; + + /* + * copy offload is supported + */ + bool copy_offload_supported:1; }; void *dm_per_bio_data(struct bio *bio, size_t data_size); -- 2.35.1.500.gb896f729e2
WARNING: multiple messages have this Message-ID (diff)
From: Nitesh Shetty <nj.shetty@samsung.com> To: axboe@kernel.dk, agk@redhat.com, snitzer@kernel.org, dm-devel@redhat.com, kbusch@kernel.org, hch@lst.de, sagi@grimberg.me, james.smart@broadcom.com, kch@nvidia.com, damien.lemoal@opensource.wdc.com, naohiro.aota@wdc.com, jth@kernel.org, viro@zeniv.linux.org.uk Cc: p.raghav@samsung.com, joshi.k@samsung.com, gost.dev@samsung.com, anuj20.g@samsung.com, linux-kernel@vger.kernel.org, linux-nvme@lists.infradead.org, Nitesh Shetty <nj.shetty@samsung.com>, linux-block@vger.kernel.org, linux-fsdevel@vger.kernel.org, nitheshshetty@gmail.com Subject: [dm-devel] [PATCH v5 07/10] dm: Add support for copy offload. Date: Wed, 23 Nov 2022 11:28:24 +0530 [thread overview] Message-ID: <20221123055827.26996-8-nj.shetty@samsung.com> (raw) In-Reply-To: <20221123055827.26996-1-nj.shetty@samsung.com> Before enabling copy for dm target, check if underlying devices and dm target support copy. Avoid split happening inside dm target. Fail early if the request needs split, currently splitting copy request is not supported. Signed-off-by: Nitesh Shetty <nj.shetty@samsung.com> --- drivers/md/dm-table.c | 42 +++++++++++++++++++++++++++++++++++ drivers/md/dm.c | 7 ++++++ include/linux/device-mapper.h | 5 +++++ 3 files changed, 54 insertions(+) diff --git a/drivers/md/dm-table.c b/drivers/md/dm-table.c index 078da18bb86d..b2073e857a74 100644 --- a/drivers/md/dm-table.c +++ b/drivers/md/dm-table.c @@ -1875,6 +1875,39 @@ static bool dm_table_supports_nowait(struct dm_table *t) return true; } +static int device_not_copy_capable(struct dm_target *ti, struct dm_dev *dev, + sector_t start, sector_t len, void *data) +{ + struct request_queue *q = bdev_get_queue(dev->bdev); + + return !blk_queue_copy(q); +} + +static bool dm_table_supports_copy(struct dm_table *t) +{ + struct dm_target *ti; + unsigned int i; + + for (i = 0; i < t->num_targets; i++) { + ti = dm_table_get_target(t, i); + + if (!ti->copy_offload_supported) + return false; + + /* + * target provides copy support (as implied by setting + * 'copy_offload_supported') + * and it relies on _all_ data devices having copy support. + */ + if (!ti->type->iterate_devices || + ti->type->iterate_devices(ti, + device_not_copy_capable, NULL)) + return false; + } + + return true; +} + static int device_not_discard_capable(struct dm_target *ti, struct dm_dev *dev, sector_t start, sector_t len, void *data) { @@ -1957,6 +1990,15 @@ int dm_table_set_restrictions(struct dm_table *t, struct request_queue *q, q->limits.discard_misaligned = 0; } + if (!dm_table_supports_copy(t)) { + blk_queue_flag_clear(QUEUE_FLAG_COPY, q); + /* Must also clear copy limits... */ + q->limits.max_copy_sectors = 0; + q->limits.max_copy_sectors_hw = 0; + } else { + blk_queue_flag_set(QUEUE_FLAG_COPY, q); + } + if (!dm_table_supports_secure_erase(t)) q->limits.max_secure_erase_sectors = 0; diff --git a/drivers/md/dm.c b/drivers/md/dm.c index e1ea3a7bd9d9..713335995290 100644 --- a/drivers/md/dm.c +++ b/drivers/md/dm.c @@ -1690,6 +1690,13 @@ static blk_status_t __split_and_process_bio(struct clone_info *ci) if (unlikely(ci->is_abnormal_io)) return __process_abnormal_io(ci, ti); + if ((unlikely(op_is_copy(ci->bio->bi_opf)) && + max_io_len(ti, ci->sector) < ci->sector_count)) { + DMERR("Error, IO size(%u) > max target size(%llu)\n", + ci->sector_count, max_io_len(ti, ci->sector)); + return BLK_STS_IOERR; + } + /* * Only support bio polling for normal IO, and the target io is * exactly inside the dm_io instance (verified in dm_poll_dm_io) diff --git a/include/linux/device-mapper.h b/include/linux/device-mapper.h index 04c6acf7faaa..da4e77e81011 100644 --- a/include/linux/device-mapper.h +++ b/include/linux/device-mapper.h @@ -379,6 +379,11 @@ struct dm_target { * bio_set_dev(). NOTE: ideally a target should _not_ need this. */ bool needs_bio_set_dev:1; + + /* + * copy offload is supported + */ + bool copy_offload_supported:1; }; void *dm_per_bio_data(struct bio *bio, size_t data_size); -- 2.35.1.500.gb896f729e2 -- dm-devel mailing list dm-devel@redhat.com https://listman.redhat.com/mailman/listinfo/dm-devel
next prev parent reply other threads:[~2022-11-23 6:14 UTC|newest] Thread overview: 67+ messages / expand[flat|nested] mbox.gz Atom feed top [not found] <CGME20221123061010epcas5p21cef9d23e4362b01f2b19d1117e1cdf5@epcas5p2.samsung.com> 2022-11-23 5:58 ` [PATCH v5 00/10] Implement copy offload support Nitesh Shetty 2022-11-23 5:58 ` [dm-devel] " Nitesh Shetty [not found] ` <CGME20221123061014epcas5p150fd8add12fe6d09b63c56972818e6a2@epcas5p1.samsung.com> 2022-11-23 5:58 ` [PATCH v5 01/10] block: Introduce queue limits for copy-offload support Nitesh Shetty 2022-11-23 5:58 ` [dm-devel] " Nitesh Shetty [not found] ` <CGME20221123061017epcas5p246a589e20eac655ac340cfda6028ff35@epcas5p2.samsung.com> 2022-11-23 5:58 ` [PATCH v5 02/10] block: Add copy offload support infrastructure Nitesh Shetty 2022-11-23 5:58 ` [dm-devel] " Nitesh Shetty 2022-11-23 8:04 ` Ming Lei 2022-11-23 8:04 ` [dm-devel] " Ming Lei 2022-11-23 10:07 ` Nitesh Shetty 2022-11-23 10:07 ` [dm-devel] " Nitesh Shetty 2022-11-24 0:03 ` Ming Lei 2022-11-24 0:03 ` [dm-devel] " Ming Lei 2022-11-29 11:44 ` Nitesh Shetty 2022-11-29 11:44 ` [dm-devel] " Nitesh Shetty 2022-12-07 5:54 ` Nitesh Shetty 2022-12-07 5:54 ` [dm-devel] " Nitesh Shetty 2022-12-07 11:19 ` Ming Lei 2022-12-07 11:19 ` [dm-devel] " Ming Lei 2022-12-09 8:16 ` Nitesh Shetty 2022-12-09 8:16 ` [dm-devel] " Nitesh Shetty [not found] ` <CGME20221123061021epcas5p276b6d48db889932282d017b27c9a3291@epcas5p2.samsung.com> 2022-11-23 5:58 ` [PATCH v5 03/10] block: add emulation for copy Nitesh Shetty 2022-11-23 5:58 ` [dm-devel] " Nitesh Shetty [not found] ` <CGME20221123061024epcas5p28fd0296018950d722b5a97e2875cf391@epcas5p2.samsung.com> 2022-11-23 5:58 ` [PATCH v5 04/10] block: Introduce a new ioctl " Nitesh Shetty 2022-11-23 5:58 ` [dm-devel] " Nitesh Shetty [not found] ` <CGME20221123061028epcas5p1aecd27b2f4f694b5a18b51d3df5d7432@epcas5p1.samsung.com> 2022-11-23 5:58 ` [PATCH v5 05/10] nvme: add copy offload support Nitesh Shetty 2022-11-23 5:58 ` [dm-devel] " Nitesh Shetty [not found] ` <CGME20221123061031epcas5p3745558c2caffd2fd21d15feff00495e9@epcas5p3.samsung.com> 2022-11-23 5:58 ` [PATCH v5 06/10] nvmet: add copy command support for bdev and file ns Nitesh Shetty 2022-11-23 5:58 ` [dm-devel] " Nitesh Shetty 2022-11-23 8:17 ` Guixin Liu 2022-11-23 9:39 ` Nitesh Shetty 2022-11-23 9:39 ` [dm-devel] " Nitesh Shetty 2022-12-06 9:22 ` kernel test robot 2022-12-06 9:22 ` [dm-devel] " kernel test robot [not found] ` <CGME20221123061034epcas5p3fe90293ad08df4901f98bae2d7cfc1ba@epcas5p3.samsung.com> 2022-11-23 5:58 ` Nitesh Shetty [this message] 2022-11-23 5:58 ` [dm-devel] [PATCH v5 07/10] dm: Add support for copy offload Nitesh Shetty [not found] ` <CGME20221123061037epcas5p4d57436204fbe0065819b156eeeddbfac@epcas5p4.samsung.com> 2022-11-23 5:58 ` [PATCH v5 08/10] dm: Enable copy offload for dm-linear target Nitesh Shetty 2022-11-23 5:58 ` [dm-devel] " Nitesh Shetty [not found] ` <CGME20221123061041epcas5p4413569a46ee730cd3033a9025c8f134a@epcas5p4.samsung.com> 2022-11-23 5:58 ` [PATCH v5 09/10] dm kcopyd: use copy offload support Nitesh Shetty 2022-11-23 5:58 ` [dm-devel] " Nitesh Shetty [not found] ` <CGME20221123061044epcas5p2ac082a91fc8197821f29e84278b6203c@epcas5p2.samsung.com> 2022-11-23 5:58 ` [PATCH v5 10/10] fs: add support for copy file range in zonefs Nitesh Shetty 2022-11-23 5:58 ` [dm-devel] " Nitesh Shetty 2022-11-23 6:53 ` Amir Goldstein 2022-11-23 6:53 ` [dm-devel] " Amir Goldstein 2022-11-23 10:13 ` Nitesh Shetty 2022-11-23 10:13 ` [dm-devel] " Nitesh Shetty 2022-11-24 1:32 ` Damien Le Moal 2022-11-24 1:32 ` [dm-devel] " Damien Le Moal 2022-11-24 1:47 ` Damien Le Moal 2022-11-24 1:47 ` [dm-devel] " Damien Le Moal 2022-11-25 4:18 ` Al Viro 2022-11-25 4:18 ` [dm-devel] " Al Viro 2022-11-29 12:22 ` Nitesh Shetty 2022-11-29 12:22 ` [dm-devel] " Nitesh Shetty 2022-11-29 23:45 ` Damien Le Moal 2022-11-29 23:45 ` [dm-devel] " Damien Le Moal 2022-11-30 4:17 ` Nitesh Shetty 2022-11-30 4:17 ` [dm-devel] " Nitesh Shetty 2022-11-30 9:55 ` Damien Le Moal 2022-11-30 9:55 ` [dm-devel] " Damien Le Moal 2022-11-23 22:56 ` [PATCH v5 00/10] Implement copy offload support Chaitanya Kulkarni 2022-11-23 22:56 ` [dm-devel] " Chaitanya Kulkarni 2022-11-29 12:16 ` Nitesh Shetty 2022-11-29 12:16 ` [dm-devel] " Nitesh Shetty 2022-11-30 0:05 ` Chaitanya Kulkarni 2022-11-30 0:05 ` [dm-devel] " Chaitanya Kulkarni 2022-11-30 4:14 ` Nitesh Shetty 2022-11-30 4:14 ` [dm-devel] " Nitesh Shetty
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=20221123055827.26996-8-nj.shetty@samsung.com \ --to=nj.shetty@samsung.com \ --cc=agk@redhat.com \ --cc=anuj20.g@samsung.com \ --cc=axboe@kernel.dk \ --cc=damien.lemoal@opensource.wdc.com \ --cc=dm-devel@redhat.com \ --cc=gost.dev@samsung.com \ --cc=hch@lst.de \ --cc=james.smart@broadcom.com \ --cc=joshi.k@samsung.com \ --cc=jth@kernel.org \ --cc=kbusch@kernel.org \ --cc=kch@nvidia.com \ --cc=linux-block@vger.kernel.org \ --cc=linux-fsdevel@vger.kernel.org \ --cc=linux-kernel@vger.kernel.org \ --cc=linux-nvme@lists.infradead.org \ --cc=naohiro.aota@wdc.com \ --cc=nitheshshetty@gmail.com \ --cc=p.raghav@samsung.com \ --cc=sagi@grimberg.me \ --cc=snitzer@kernel.org \ --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: linkBe 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.