From: John Garry <john.g.garry@oracle.com>
To: axboe@kernel.dk, song@kernel.org, yukuai3@huawei.com,
kbusch@kernel.org, hch@lst.de, sagi@grimberg.me,
James.Bottomley@HansenPartnership.com,
martin.petersen@oracle.com
Cc: linux-block@vger.kernel.org, linux-kernel@vger.kernel.org,
linux-raid@vger.kernel.org, linux-nvme@lists.infradead.org,
linux-scsi@vger.kernel.org, John Garry <john.g.garry@oracle.com>
Subject: [PATCH RFC 4/4] md/raid0: Atomic write support
Date: Tue, 3 Sep 2024 15:07:48 +0000 [thread overview]
Message-ID: <20240903150748.2179966-5-john.g.garry@oracle.com> (raw)
In-Reply-To: <20240903150748.2179966-1-john.g.garry@oracle.com>
Set BLK_FEAT_ATOMIC_WRITES to enable atomic writes. All other stacked
device request queue limits should automatically be set properly. With
regards to atomic write max bytes limit, this will be set at
hw_max_sectors and this is limited by the stripe width, which we want.
Atomic requests may not be split, so error an attempt to do so.
It is noted that returning false from .make_request CB results in
bio_io_error() being called for the bio, which results in BLK_STS_IOERR.
This is not suitable for atomic writes, as BLK_STS_INVAL should be
returned.
Signed-off-by: John Garry <john.g.garry@oracle.com>
---
drivers/md/raid0.c | 8 +++++++-
1 file changed, 7 insertions(+), 1 deletion(-)
diff --git a/drivers/md/raid0.c b/drivers/md/raid0.c
index 32d587524778..caf1ecb55d11 100644
--- a/drivers/md/raid0.c
+++ b/drivers/md/raid0.c
@@ -384,6 +384,7 @@ static int raid0_set_limits(struct mddev *mddev)
lim.max_write_zeroes_sectors = mddev->chunk_sectors;
lim.io_min = mddev->chunk_sectors << 9;
lim.io_opt = lim.io_min * mddev->raid_disks;
+ lim.features |= BLK_FEAT_ATOMIC_WRITES;
err = mddev_stack_rdev_limits(mddev, &lim, MDDEV_STACK_INTEGRITY);
if (err) {
queue_limits_cancel_update(mddev->gendisk->queue);
@@ -606,7 +607,12 @@ static bool raid0_make_request(struct mddev *mddev, struct bio *bio)
: sector_div(sector, chunk_sects));
if (sectors < bio_sectors(bio)) {
- struct bio *split = bio_split(bio, sectors, GFP_NOIO,
+ struct bio *split;
+
+ if (bio->bi_opf & REQ_ATOMIC)
+ return false;
+
+ split = bio_split(bio, sectors, GFP_NOIO,
&mddev->bio_set);
bio_chain(split, bio);
raid0_map_submit_bio(mddev, bio);
--
2.31.1
next prev parent reply other threads:[~2024-09-03 15:08 UTC|newest]
Thread overview: 18+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-09-03 15:07 [PATCH RFC 0/4] RAID0 atomic " John Garry
2024-09-03 15:07 ` [PATCH RFC 1/4] block: Make bdev_can_atomic_write() robust against mis-aligned bdev size John Garry
2024-09-12 13:15 ` Christoph Hellwig
2024-09-12 14:58 ` John Garry
2024-09-12 15:07 ` Christoph Hellwig
2024-09-12 15:22 ` John Garry
2024-09-13 8:36 ` Hannes Reinecke
2024-09-03 15:07 ` [PATCH RFC 2/4] block: Add BLK_FEAT_ATOMIC_WRITES flag John Garry
2024-09-12 13:16 ` Christoph Hellwig
2024-09-12 14:58 ` John Garry
2024-09-03 15:07 ` [PATCH RFC 3/4] block: Support atomic writes limits for stacked devices John Garry
2024-09-12 13:16 ` Christoph Hellwig
2024-09-12 15:05 ` John Garry
2024-09-03 15:07 ` John Garry [this message]
2024-09-12 13:18 ` [PATCH RFC 4/4] md/raid0: Atomic write support Christoph Hellwig
2024-09-12 14:48 ` John Garry
2024-09-12 15:10 ` Christoph Hellwig
2024-09-12 15:38 ` John Garry
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=20240903150748.2179966-5-john.g.garry@oracle.com \
--to=john.g.garry@oracle.com \
--cc=James.Bottomley@HansenPartnership.com \
--cc=axboe@kernel.dk \
--cc=hch@lst.de \
--cc=kbusch@kernel.org \
--cc=linux-block@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-nvme@lists.infradead.org \
--cc=linux-raid@vger.kernel.org \
--cc=linux-scsi@vger.kernel.org \
--cc=martin.petersen@oracle.com \
--cc=sagi@grimberg.me \
--cc=song@kernel.org \
--cc=yukuai3@huawei.com \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®