From: Keith Busch <kbusch@meta.com>
To: <axboe@kernel.dk>, <hch@lst.de>, <linux-block@vger.kernel.org>,
<linux-nvme@lists.infradead.org>, <linux-fsdevel@vger.kernel.org>,
<io-uring@vger.kernel.org>
Cc: <sagi@grimberg.me>, <asml.silence@gmail.com>,
<anuj20.g@samsung.com>, <joshi.k@samsung.com>,
Hannes Reinecke <hare@suse.de>,
Nitesh Shetty <nj.shetty@samsung.com>,
Keith Busch <kbusch@kernel.org>
Subject: [PATCHv14 05/11] block: expose write streams for block device nodes
Date: Wed, 11 Dec 2024 10:35:08 -0800 [thread overview]
Message-ID: <20241211183514.64070-6-kbusch@meta.com> (raw)
In-Reply-To: <20241211183514.64070-1-kbusch@meta.com>
From: Christoph Hellwig <hch@lst.de>
Use the per-kiocb write stream if provided, or map temperature hints to
write streams (which is a bit questionable, but this shows how it is
done).
Reviewed-by: Hannes Reinecke <hare@suse.de>
Reviewed-by: Nitesh Shetty <nj.shetty@samsung.com>
Signed-off-by: Christoph Hellwig <hch@lst.de>
[kbusch: removed statx reporting]
Signed-off-by: Keith Busch <kbusch@kernel.org>
---
block/fops.c | 23 +++++++++++++++++++++++
1 file changed, 23 insertions(+)
diff --git a/block/fops.c b/block/fops.c
index 6d5c4fc5a2168..f16aa39bf5bad 100644
--- a/block/fops.c
+++ b/block/fops.c
@@ -73,6 +73,7 @@ static ssize_t __blkdev_direct_IO_simple(struct kiocb *iocb,
}
bio.bi_iter.bi_sector = pos >> SECTOR_SHIFT;
bio.bi_write_hint = file_inode(iocb->ki_filp)->i_write_hint;
+ bio.bi_write_stream = iocb->ki_write_stream;
bio.bi_ioprio = iocb->ki_ioprio;
if (iocb->ki_flags & IOCB_ATOMIC)
bio.bi_opf |= REQ_ATOMIC;
@@ -206,6 +207,7 @@ static ssize_t __blkdev_direct_IO(struct kiocb *iocb, struct iov_iter *iter,
for (;;) {
bio->bi_iter.bi_sector = pos >> SECTOR_SHIFT;
bio->bi_write_hint = file_inode(iocb->ki_filp)->i_write_hint;
+ bio->bi_write_stream = iocb->ki_write_stream;
bio->bi_private = dio;
bio->bi_end_io = blkdev_bio_end_io;
bio->bi_ioprio = iocb->ki_ioprio;
@@ -333,6 +335,7 @@ static ssize_t __blkdev_direct_IO_async(struct kiocb *iocb,
dio->iocb = iocb;
bio->bi_iter.bi_sector = pos >> SECTOR_SHIFT;
bio->bi_write_hint = file_inode(iocb->ki_filp)->i_write_hint;
+ bio->bi_write_stream = iocb->ki_write_stream;
bio->bi_end_io = blkdev_bio_end_io_async;
bio->bi_ioprio = iocb->ki_ioprio;
@@ -398,6 +401,26 @@ static ssize_t blkdev_direct_IO(struct kiocb *iocb, struct iov_iter *iter)
if (blkdev_dio_invalid(bdev, iocb, iter))
return -EINVAL;
+ if (iov_iter_rw(iter) == WRITE) {
+ u16 max_write_streams = bdev_max_write_streams(bdev);
+
+ if (iocb->ki_write_stream) {
+ if (iocb->ki_write_stream > max_write_streams)
+ return -EINVAL;
+ } else if (max_write_streams) {
+ enum rw_hint write_hint =
+ file_inode(iocb->ki_filp)->i_write_hint;
+
+ /*
+ * Just use the write hint as write stream for block
+ * device writes. This assumes no file system is
+ * mounted that would use the streams differently.
+ */
+ if (write_hint <= max_write_streams)
+ iocb->ki_write_stream = write_hint;
+ }
+ }
+
nr_pages = bio_iov_vecs_to_alloc(iter, BIO_MAX_VECS + 1);
if (likely(nr_pages <= BIO_MAX_VECS)) {
if (is_sync_kiocb(iocb))
--
2.43.5
next prev parent reply other threads:[~2024-12-11 18:58 UTC|newest]
Thread overview: 16+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <CGME20241211190851epcas5p2a359c12000fc73df8920e4801563504c@epcas5p2.samsung.com>
2024-12-11 18:35 ` [PATCHv14 00/11] block write streams with nvme fdp Keith Busch
2024-12-11 18:35 ` [PATCHv14 01/11] fs: add a write stream field to the kiocb Keith Busch
2024-12-11 18:35 ` [PATCHv14 02/11] block: add a bi_write_stream field Keith Busch
2024-12-11 18:35 ` [PATCHv14 03/11] block: introduce max_write_streams queue limit Keith Busch
2024-12-11 18:35 ` [PATCHv14 04/11] block: introduce a write_stream_granularity " Keith Busch
2024-12-11 18:35 ` Keith Busch [this message]
2024-12-11 18:35 ` [PATCHv14 06/11] io_uring: enable per-io write streams Keith Busch
2024-12-11 18:35 ` [PATCHv14 07/11] nvme: add a nvme_get_log_lsi helper Keith Busch
2024-12-11 18:35 ` [PATCHv14 08/11] nvme: pass a void pointer to nvme_get/set_features for the result Keith Busch
2024-12-11 18:35 ` [PATCHv14 09/11] nvme: add FDP definitions Keith Busch
2024-12-11 18:35 ` [PATCHv14 10/11] nvme: register fdp parameters with the block layer Keith Busch
2024-12-12 13:14 ` Hannes Reinecke
2024-12-13 5:53 ` Nitesh Shetty
2024-12-16 16:12 ` Christoph Hellwig
2024-12-11 18:35 ` [PATCHv14 11/11] nvme: use fdp streams if write stream is provided Keith Busch
2024-12-12 11:39 ` [PATCHv14 00/11] block write streams with nvme fdp Kanchan Joshi
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=20241211183514.64070-6-kbusch@meta.com \
--to=kbusch@meta.com \
--cc=anuj20.g@samsung.com \
--cc=asml.silence@gmail.com \
--cc=axboe@kernel.dk \
--cc=hare@suse.de \
--cc=hch@lst.de \
--cc=io-uring@vger.kernel.org \
--cc=joshi.k@samsung.com \
--cc=kbusch@kernel.org \
--cc=linux-block@vger.kernel.org \
--cc=linux-fsdevel@vger.kernel.org \
--cc=linux-nvme@lists.infradead.org \
--cc=nj.shetty@samsung.com \
--cc=sagi@grimberg.me \
/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