diff options
author | Jens Axboe <axboe@kernel.dk> | 2017-06-27 09:22:02 -0600 |
---|---|---|
committer | Jens Axboe <axboe@kernel.dk> | 2017-06-27 12:05:27 -0600 |
commit | cb6934f8ea1a595902ca37e250e0917d4dd7b2a7 (patch) | |
tree | 4280f328f9b632f6940a613e852f264918619e55 /block/blk-merge.c | |
parent | c75b1d9421f80f4143e389d2d50ddfc8a28c8c35 (diff) | |
download | lwn-cb6934f8ea1a595902ca37e250e0917d4dd7b2a7.tar.gz lwn-cb6934f8ea1a595902ca37e250e0917d4dd7b2a7.zip |
block: add support for write hints in a bio
No functional changes in this patch, we just use up some holes
in the bio and request structures to define a write hint that
we psas down the stack.
Ensure that we don't merge requests that have different life time
hints assigned to them, and that we inherit the write hint when
cloning a bio.
Reviewed-by: Martin K. Petersen <martin.petersen@oracle.com>
Reviewed-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Jens Axboe <axboe@kernel.dk>
Diffstat (limited to 'block/blk-merge.c')
-rw-r--r-- | block/blk-merge.c | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/block/blk-merge.c b/block/blk-merge.c index 5df13041b851..99038830fb42 100644 --- a/block/blk-merge.c +++ b/block/blk-merge.c @@ -673,6 +673,13 @@ static struct request *attempt_merge(struct request_queue *q, return NULL; /* + * Don't allow merge of different write hints, or for a hint with + * non-hint IO. + */ + if (req->write_hint != next->write_hint) + return NULL; + + /* * If we are allowed to merge, then append bio list * from next to rq and release next. merge_requests_fn * will have updated segment counts, update sector @@ -791,6 +798,13 @@ bool blk_rq_merge_ok(struct request *rq, struct bio *bio) !blk_write_same_mergeable(rq->bio, bio)) return false; + /* + * Don't allow merge of different write hints, or for a hint with + * non-hint IO. + */ + if (rq->write_hint != bio->bi_write_hint) + return false; + return true; } |