From: Nitesh Shetty <nj.shetty@samsung.com>
To: Mike Snitzer <snitzer@redhat.com>
Cc: djwong@kernel.org, linux-nvme@lists.infradead.org, clm@fb.com,
dm-devel@redhat.com, osandov@fb.com,
Alasdair Kergon <agk@redhat.com>,
javier@javigon.com, bvanassche@acm.org,
linux-scsi@vger.kernel.org, nitheshshetty@gmail.com,
Smart <james.smart@broadcom.com>,
hch@lst.de, chaitanyak@nvidia.com,
Chaitanya Kulkarni <kch@nvidia.com>,
msnitzer@redhat.com, josef@toxicpanda.com,
linux-block@vger.kernel.org, dsterba@suse.com, kbusch@kernel.org,
Frederick.Knight@netapp.com, Sagi Grimberg <sagi@grimberg.me>,
axboe@kernel.dk, tytso@mit.edu, joshi.k@samsung.com,
martin.petersen@oracle.com, James, linux-kernel@vger.kernel.org,
arnav.dawn@samsung.com, jack@suse.com,
linux-fsdevel@vger.kernel.org, lsf-pc@lists.linux-foundation.org,
Alexander Viro <viro@zeniv.linux.org.uk>
Subject: Re: [dm-devel] [PATCH v3 08/10] dm: Add support for copy offload.
Date: Thu, 24 Feb 2022 17:56:03 +0530 [thread overview]
Message-ID: <20220224122603.GC9117@test-zns> (raw)
In-Reply-To: <YhUIny/Huielcit9@redhat.com>
[-- Attachment #1: Type: text/plain, Size: 4343 bytes --]
On Tue, Feb 22, 2022 at 11:00:31AM -0500, Mike Snitzer wrote:
> On Mon, Feb 14 2022 at 2:59P -0500,
> Nitesh Shetty <nj.shetty@samsung.com> wrote:
>
> > 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 | 45 +++++++++++++++++++++++++++++++++++
> > drivers/md/dm.c | 6 +++++
> > include/linux/device-mapper.h | 5 ++++
> > 3 files changed, 56 insertions(+)
> >
> > diff --git a/drivers/md/dm-table.c b/drivers/md/dm-table.c
> > index e43096cfe9e2..8dc9ae6a6a86 100644
> > --- a/drivers/md/dm-table.c
> > +++ b/drivers/md/dm-table.c
> > @@ -1903,6 +1903,38 @@ 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 < dm_table_get_num_targets(t); i++) {
> > + ti = dm_table_get_target(t, i);
> > +
> > + if (!ti->copy_supported)
> > + return false;
> > +
> > + /*
> > + * target provides copy support (as implied by setting
> > + * 'copy_supported') and it relies on _all_ data devices having copy support.
> > + */
> > + if (ti->copy_supported &&
> > + (!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)
> > {
> > @@ -2000,6 +2032,19 @@ int dm_table_set_restrictions(struct dm_table *t, struct request_queue *q,
> > } else
> > blk_queue_flag_set(QUEUE_FLAG_DISCARD, q);
> >
> > + if (!dm_table_supports_copy(t)) {
> > + blk_queue_flag_clear(QUEUE_FLAG_COPY, q);
> > + /* Must also clear discard limits... */
>
> copy-and-paste mistake: s/discard/copy/ ^
>
acked
> > + q->limits.max_copy_sectors = 0;
> > + q->limits.max_hw_copy_sectors = 0;
> > + q->limits.max_copy_range_sectors = 0;
> > + q->limits.max_hw_copy_range_sectors = 0;
> > + q->limits.max_copy_nr_ranges = 0;
> > + q->limits.max_hw_copy_nr_ranges = 0;
> > + } else {
> > + blk_queue_flag_set(QUEUE_FLAG_COPY, q);
> > + }
> > +
> > if (dm_table_supports_secure_erase(t))
> > blk_queue_flag_set(QUEUE_FLAG_SECERASE, q);
> >
> > diff --git a/drivers/md/dm.c b/drivers/md/dm.c
> > index ab9cc91931f9..3b4cd49c489d 100644
> > --- a/drivers/md/dm.c
> > +++ b/drivers/md/dm.c
> > @@ -1372,6 +1372,12 @@ static int __split_and_process_non_flush(struct clone_info *ci)
> > if (__process_abnormal_io(ci, ti, &r))
> > return r;
> >
> > + if ((unlikely(op_is_copy(ci->bio->bi_opf)) &&
> > + max_io_len(ti, ci->sector) < ci->sector_count)) {
> > + DMERR("%s: Error IO size(%u) is greater than maximum target size(%llu)\n",
> > + __func__, ci->sector_count, max_io_len(ti, ci->sector));
> > + return -EIO;
> > + }
> > len = min_t(sector_t, max_io_len(ti, ci->sector), ci->sector_count);
> >
> > r = __clone_and_map_data_bio(ci, ti, ci->sector, &len);
>
> There isn't a need for __func__ prefix here.
>
> You'll also need to rebase on latest dm-5.18 (or wait until 5.18 merge
> window opens) because there has been some conflicting changes since
> you posted.
>
acked
> > diff --git a/include/linux/device-mapper.h b/include/linux/device-mapper.h
> > index b26fecf6c8e8..acfd4018125a 100644
> > --- a/include/linux/device-mapper.h
> > +++ b/include/linux/device-mapper.h
> > @@ -362,6 +362,11 @@ struct dm_target {
> > * zone append operations using regular writes.
> > */
> > bool emulate_zone_append:1;
> > +
> > + /*
> > + * copy offload is supported
> > + */
> > + bool copy_supported:1;
> > };
>
> Would prefer this be "copy_offload_supported".
>
acked, will update in next series.
--
Nitesh Shetty
[-- Attachment #2: Type: text/plain, Size: 0 bytes --]
[-- Attachment #3: Type: text/plain, Size: 97 bytes --]
--
dm-devel mailing list
dm-devel@redhat.com
https://listman.redhat.com/mailman/listinfo/dm-devel
WARNING: multiple messages have this Message-ID (diff)
From: Nitesh Shetty <nj.shetty@samsung.com>
To: Mike Snitzer <snitzer@redhat.com>
Cc: javier@javigon.com, chaitanyak@nvidia.com,
linux-block@vger.kernel.org, linux-scsi@vger.kernel.org,
dm-devel@redhat.com, linux-nvme@lists.infradead.org,
linux-fsdevel@vger.kernel.org, axboe@kernel.dk,
msnitzer@redhat.com, bvanassche@acm.org,
martin.petersen@oracle.com, hare@suse.de, kbusch@kernel.org,
hch@lst.de, Frederick.Knight@netapp.com, osandov@fb.com,
lsf-pc@lists.linux-foundation.org, djwong@kernel.org,
josef@toxicpanda.com, clm@fb.com, dsterba@suse.com,
tytso@mit.edu, jack@suse.com, joshi.k@samsung.com,
arnav.dawn@samsung.com, nitheshshetty@gmail.com,
Alasdair Kergon <agk@redhat.com>,
Sagi Grimberg <sagi@grimberg.me>,
James Smart <james.smart@broadcom.com>,
Chaitanya Kulkarni <kch@nvidia.com>,
Alexander Viro <viro@zeniv.linux.org.uk>,
linux-kernel@vger.kernel.org
Subject: Re: [PATCH v3 08/10] dm: Add support for copy offload.
Date: Thu, 24 Feb 2022 17:56:03 +0530 [thread overview]
Message-ID: <20220224122603.GC9117@test-zns> (raw)
In-Reply-To: <YhUIny/Huielcit9@redhat.com>
[-- Attachment #1: Type: text/plain, Size: 4343 bytes --]
On Tue, Feb 22, 2022 at 11:00:31AM -0500, Mike Snitzer wrote:
> On Mon, Feb 14 2022 at 2:59P -0500,
> Nitesh Shetty <nj.shetty@samsung.com> wrote:
>
> > 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 | 45 +++++++++++++++++++++++++++++++++++
> > drivers/md/dm.c | 6 +++++
> > include/linux/device-mapper.h | 5 ++++
> > 3 files changed, 56 insertions(+)
> >
> > diff --git a/drivers/md/dm-table.c b/drivers/md/dm-table.c
> > index e43096cfe9e2..8dc9ae6a6a86 100644
> > --- a/drivers/md/dm-table.c
> > +++ b/drivers/md/dm-table.c
> > @@ -1903,6 +1903,38 @@ 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 < dm_table_get_num_targets(t); i++) {
> > + ti = dm_table_get_target(t, i);
> > +
> > + if (!ti->copy_supported)
> > + return false;
> > +
> > + /*
> > + * target provides copy support (as implied by setting
> > + * 'copy_supported') and it relies on _all_ data devices having copy support.
> > + */
> > + if (ti->copy_supported &&
> > + (!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)
> > {
> > @@ -2000,6 +2032,19 @@ int dm_table_set_restrictions(struct dm_table *t, struct request_queue *q,
> > } else
> > blk_queue_flag_set(QUEUE_FLAG_DISCARD, q);
> >
> > + if (!dm_table_supports_copy(t)) {
> > + blk_queue_flag_clear(QUEUE_FLAG_COPY, q);
> > + /* Must also clear discard limits... */
>
> copy-and-paste mistake: s/discard/copy/ ^
>
acked
> > + q->limits.max_copy_sectors = 0;
> > + q->limits.max_hw_copy_sectors = 0;
> > + q->limits.max_copy_range_sectors = 0;
> > + q->limits.max_hw_copy_range_sectors = 0;
> > + q->limits.max_copy_nr_ranges = 0;
> > + q->limits.max_hw_copy_nr_ranges = 0;
> > + } else {
> > + blk_queue_flag_set(QUEUE_FLAG_COPY, q);
> > + }
> > +
> > if (dm_table_supports_secure_erase(t))
> > blk_queue_flag_set(QUEUE_FLAG_SECERASE, q);
> >
> > diff --git a/drivers/md/dm.c b/drivers/md/dm.c
> > index ab9cc91931f9..3b4cd49c489d 100644
> > --- a/drivers/md/dm.c
> > +++ b/drivers/md/dm.c
> > @@ -1372,6 +1372,12 @@ static int __split_and_process_non_flush(struct clone_info *ci)
> > if (__process_abnormal_io(ci, ti, &r))
> > return r;
> >
> > + if ((unlikely(op_is_copy(ci->bio->bi_opf)) &&
> > + max_io_len(ti, ci->sector) < ci->sector_count)) {
> > + DMERR("%s: Error IO size(%u) is greater than maximum target size(%llu)\n",
> > + __func__, ci->sector_count, max_io_len(ti, ci->sector));
> > + return -EIO;
> > + }
> > len = min_t(sector_t, max_io_len(ti, ci->sector), ci->sector_count);
> >
> > r = __clone_and_map_data_bio(ci, ti, ci->sector, &len);
>
> There isn't a need for __func__ prefix here.
>
> You'll also need to rebase on latest dm-5.18 (or wait until 5.18 merge
> window opens) because there has been some conflicting changes since
> you posted.
>
acked
> > diff --git a/include/linux/device-mapper.h b/include/linux/device-mapper.h
> > index b26fecf6c8e8..acfd4018125a 100644
> > --- a/include/linux/device-mapper.h
> > +++ b/include/linux/device-mapper.h
> > @@ -362,6 +362,11 @@ struct dm_target {
> > * zone append operations using regular writes.
> > */
> > bool emulate_zone_append:1;
> > +
> > + /*
> > + * copy offload is supported
> > + */
> > + bool copy_supported:1;
> > };
>
> Would prefer this be "copy_offload_supported".
>
acked, will update in next series.
--
Nitesh Shetty
[-- Attachment #2: Type: text/plain, Size: 0 bytes --]
next prev parent reply other threads:[~2022-02-28 6:25 UTC|newest]
Thread overview: 65+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <CGME20220214080551epcas5p201d4d85e9d66077f97585bb3c64517c0@epcas5p2.samsung.com>
2022-02-14 7:59 ` [dm-devel] [PATCH v3 00/10] Add Copy offload support Nitesh Shetty
2022-02-14 7:59 ` Nitesh Shetty
2022-02-14 7:59 ` Nitesh Shetty
2022-02-14 7:59 ` [dm-devel] [PATCH v3 01/10] block: make bio_map_kern() non static Nitesh Shetty
2022-02-14 7:59 ` Nitesh Shetty
2022-02-14 7:59 ` Nitesh Shetty
2022-02-17 8:36 ` [dm-devel] " Luis Chamberlain
2022-02-17 8:36 ` Luis Chamberlain
2022-02-17 13:30 ` [dm-devel] " Nitesh Shetty
2022-02-17 13:30 ` Nitesh Shetty
2022-02-14 7:59 ` [dm-devel] [PATCH v3 02/10] block: Introduce queue limits for copy-offload support Nitesh Shetty
2022-02-14 7:59 ` Nitesh Shetty
2022-02-14 7:59 ` Nitesh Shetty
2022-02-17 9:07 ` [dm-devel] " Luis Chamberlain
2022-02-17 9:07 ` Luis Chamberlain
2022-02-17 10:16 ` [dm-devel] " Chaitanya Kulkarni
2022-02-17 10:16 ` Chaitanya Kulkarni
2022-02-17 17:49 ` [dm-devel] " Luis Chamberlain
2022-02-17 17:49 ` Luis Chamberlain
2022-02-17 12:59 ` [dm-devel] " Nitesh Shetty
2022-02-17 12:59 ` Nitesh Shetty
2022-02-23 0:55 ` [dm-devel] " Luis Chamberlain
2022-02-23 0:55 ` Luis Chamberlain
2022-02-23 1:29 ` [dm-devel] " Damien Le Moal
2022-02-23 1:29 ` Damien Le Moal
2022-02-24 12:12 ` [dm-devel] " Nitesh Shetty
2022-02-24 12:12 ` Nitesh Shetty
2022-02-24 12:02 ` [dm-devel] " Nitesh Shetty
2022-02-24 12:02 ` Nitesh Shetty
2022-02-14 7:59 ` [dm-devel] [PATCH v3 03/10] block: Add copy offload support infrastructure Nitesh Shetty
2022-02-14 7:59 ` Nitesh Shetty
2022-02-14 7:59 ` Nitesh Shetty
2022-02-14 7:59 ` [dm-devel] [PATCH v3 04/10] block: Introduce a new ioctl for copy Nitesh Shetty
2022-02-14 7:59 ` Nitesh Shetty
2022-02-14 7:59 ` Nitesh Shetty
2022-02-14 7:59 ` [dm-devel] [PATCH v3 05/10] block: add emulation " Nitesh Shetty
2022-02-14 7:59 ` Nitesh Shetty
2022-02-14 7:59 ` Nitesh Shetty
2022-02-14 7:59 ` [dm-devel] [PATCH v3 06/10] nvme: add copy offload support Nitesh Shetty
2022-02-14 7:59 ` Nitesh Shetty
2022-02-14 7:59 ` Nitesh Shetty
2022-02-14 7:59 ` [dm-devel] [PATCH v3 07/10] nvmet: add copy command support for bdev and file ns Nitesh Shetty
2022-02-14 7:59 ` Nitesh Shetty
2022-02-14 7:59 ` Nitesh Shetty
2022-02-14 7:59 ` [dm-devel] [PATCH v3 08/10] dm: Add support for copy offload Nitesh Shetty
2022-02-14 7:59 ` Nitesh Shetty
2022-02-14 7:59 ` Nitesh Shetty
2022-02-22 16:00 ` [dm-devel] " Mike Snitzer
2022-02-22 16:00 ` Mike Snitzer
2022-02-24 12:26 ` Nitesh Shetty [this message]
2022-02-24 12:26 ` Nitesh Shetty
2022-02-14 7:59 ` [dm-devel] [PATCH v3 09/10] dm: Enable copy offload for dm-linear target Nitesh Shetty
2022-02-14 7:59 ` Nitesh Shetty
2022-02-14 7:59 ` Nitesh Shetty
2022-02-14 8:00 ` [dm-devel] [PATCH v3 10/10] dm kcopyd: use copy offload support Nitesh Shetty
2022-02-14 8:00 ` Nitesh Shetty
2022-02-14 8:00 ` Nitesh Shetty
2022-02-14 20:41 ` dm kcopyd: use copy offload support: Build Failure MPTCP CI
2022-02-14 20:53 ` Mat Martineau
2022-02-14 22:08 ` [dm-devel] [PATCH v3 00/10] Add Copy offload support Dave Chinner
2022-02-14 22:08 ` Dave Chinner
2022-02-17 13:02 ` [dm-devel] " Nitesh Shetty
2022-02-17 13:02 ` Nitesh Shetty
2022-02-23 1:43 ` [dm-devel] " Dave Chinner
2022-02-23 1:43 ` Dave Chinner
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=20220224122603.GC9117@test-zns \
--to=nj.shetty@samsung.com \
--cc=Frederick.Knight@netapp.com \
--cc=agk@redhat.com \
--cc=arnav.dawn@samsung.com \
--cc=axboe@kernel.dk \
--cc=bvanassche@acm.org \
--cc=chaitanyak@nvidia.com \
--cc=clm@fb.com \
--cc=djwong@kernel.org \
--cc=dm-devel@redhat.com \
--cc=dsterba@suse.com \
--cc=hch@lst.de \
--cc=jack@suse.com \
--cc=james.smart@broadcom.com \
--cc=javier@javigon.com \
--cc=josef@toxicpanda.com \
--cc=joshi.k@samsung.com \
--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=linux-scsi@vger.kernel.org \
--cc=lsf-pc@lists.linux-foundation.org \
--cc=martin.petersen@oracle.com \
--cc=msnitzer@redhat.com \
--cc=nitheshshetty@gmail.com \
--cc=osandov@fb.com \
--cc=sagi@grimberg.me \
--cc=snitzer@redhat.com \
--cc=tytso@mit.edu \
--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.