2
0
mirror of git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git synced 2025-09-04 20:19:47 +08:00

block: add a bi_write_stream field

Add the ability to pass a write stream for placement control in the bio.
The new field fits in an existing hole, so does not change the size of
the struct.

Reviewed-by: Hannes Reinecke <hare@suse.de>
Reviewed-by: Nitesh Shetty <nj.shetty@samsung.com>
Signed-off-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Keith Busch <kbusch@kernel.org>
Signed-off-by: Kanchan Joshi <joshi.k@samsung.com>
Link: https://lore.kernel.org/r/20250506121732.8211-3-joshi.k@samsung.com
Signed-off-by: Jens Axboe <axboe@kernel.dk>
This commit is contained in:
Christoph Hellwig 2025-05-06 17:47:23 +05:30 committed by Jens Axboe
parent 732f25a289
commit 5006f85ea2
4 changed files with 8 additions and 0 deletions

View File

@ -251,6 +251,7 @@ void bio_init(struct bio *bio, struct block_device *bdev, struct bio_vec *table,
bio->bi_flags = 0; bio->bi_flags = 0;
bio->bi_ioprio = 0; bio->bi_ioprio = 0;
bio->bi_write_hint = 0; bio->bi_write_hint = 0;
bio->bi_write_stream = 0;
bio->bi_status = 0; bio->bi_status = 0;
bio->bi_iter.bi_sector = 0; bio->bi_iter.bi_sector = 0;
bio->bi_iter.bi_size = 0; bio->bi_iter.bi_size = 0;
@ -827,6 +828,7 @@ static int __bio_clone(struct bio *bio, struct bio *bio_src, gfp_t gfp)
bio_set_flag(bio, BIO_CLONED); bio_set_flag(bio, BIO_CLONED);
bio->bi_ioprio = bio_src->bi_ioprio; bio->bi_ioprio = bio_src->bi_ioprio;
bio->bi_write_hint = bio_src->bi_write_hint; bio->bi_write_hint = bio_src->bi_write_hint;
bio->bi_write_stream = bio_src->bi_write_stream;
bio->bi_iter = bio_src->bi_iter; bio->bi_iter = bio_src->bi_iter;
if (bio->bi_bdev) { if (bio->bi_bdev) {

View File

@ -173,6 +173,7 @@ static struct bio *blk_crypto_fallback_clone_bio(struct bio *bio_src)
bio_set_flag(bio, BIO_REMAPPED); bio_set_flag(bio, BIO_REMAPPED);
bio->bi_ioprio = bio_src->bi_ioprio; bio->bi_ioprio = bio_src->bi_ioprio;
bio->bi_write_hint = bio_src->bi_write_hint; bio->bi_write_hint = bio_src->bi_write_hint;
bio->bi_write_stream = bio_src->bi_write_stream;
bio->bi_iter.bi_sector = bio_src->bi_iter.bi_sector; bio->bi_iter.bi_sector = bio_src->bi_iter.bi_sector;
bio->bi_iter.bi_size = bio_src->bi_iter.bi_size; bio->bi_iter.bi_size = bio_src->bi_iter.bi_size;

View File

@ -832,6 +832,8 @@ static struct request *attempt_merge(struct request_queue *q,
if (req->bio->bi_write_hint != next->bio->bi_write_hint) if (req->bio->bi_write_hint != next->bio->bi_write_hint)
return NULL; return NULL;
if (req->bio->bi_write_stream != next->bio->bi_write_stream)
return NULL;
if (req->bio->bi_ioprio != next->bio->bi_ioprio) if (req->bio->bi_ioprio != next->bio->bi_ioprio)
return NULL; return NULL;
if (!blk_atomic_write_mergeable_rqs(req, next)) if (!blk_atomic_write_mergeable_rqs(req, next))
@ -953,6 +955,8 @@ bool blk_rq_merge_ok(struct request *rq, struct bio *bio)
return false; return false;
if (rq->bio->bi_write_hint != bio->bi_write_hint) if (rq->bio->bi_write_hint != bio->bi_write_hint)
return false; return false;
if (rq->bio->bi_write_stream != bio->bi_write_stream)
return false;
if (rq->bio->bi_ioprio != bio->bi_ioprio) if (rq->bio->bi_ioprio != bio->bi_ioprio)
return false; return false;
if (blk_atomic_write_mergeable_rq_bio(rq, bio) == false) if (blk_atomic_write_mergeable_rq_bio(rq, bio) == false)

View File

@ -220,6 +220,7 @@ struct bio {
unsigned short bi_flags; /* BIO_* below */ unsigned short bi_flags; /* BIO_* below */
unsigned short bi_ioprio; unsigned short bi_ioprio;
enum rw_hint bi_write_hint; enum rw_hint bi_write_hint;
u8 bi_write_stream;
blk_status_t bi_status; blk_status_t bi_status;
atomic_t __bi_remaining; atomic_t __bi_remaining;