Commit 55251fbd authored by Damien Le Moal's avatar Damien Le Moal Committed by Jens Axboe

block: Do not force full zone append completion in req_bio_endio()

This reverts commit 748dc0b6.

Partial zone append completions cannot be supported as there is no
guarantees that the fragmented data will be written sequentially in the
same manner as with a full command. Commit 748dc0b6 ("block: fix
partial zone append completion handling in req_bio_endio()") changed
req_bio_endio() to always advance a partially failed BIO by its full
length, but this can lead to incorrect accounting. So revert this
change and let low level device drivers handle this case by always
failing completely zone append operations. With this revert, users will
still see an IO error for a partially completed zone append BIO.

Fixes: 748dc0b6 ("block: fix partial zone append completion handling in req_bio_endio()")
Cc: stable@vger.kernel.org
Signed-off-by: default avatarDamien Le Moal <dlemoal@kernel.org>
Reviewed-by: default avatarChristoph Hellwig <hch@lst.de>
Link: https://lore.kernel.org/r/20240328004409.594888-2-dlemoal@kernel.orgSigned-off-by: default avatarJens Axboe <axboe@kernel.dk>
parent 038105a2
...@@ -770,16 +770,11 @@ static void req_bio_endio(struct request *rq, struct bio *bio, ...@@ -770,16 +770,11 @@ static void req_bio_endio(struct request *rq, struct bio *bio,
/* /*
* Partial zone append completions cannot be supported as the * Partial zone append completions cannot be supported as the
* BIO fragments may end up not being written sequentially. * BIO fragments may end up not being written sequentially.
* For such case, force the completed nbytes to be equal to
* the BIO size so that bio_advance() sets the BIO remaining
* size to 0 and we end up calling bio_endio() before returning.
*/ */
if (bio->bi_iter.bi_size != nbytes) { if (bio->bi_iter.bi_size != nbytes)
bio->bi_status = BLK_STS_IOERR; bio->bi_status = BLK_STS_IOERR;
nbytes = bio->bi_iter.bi_size; else
} else {
bio->bi_iter.bi_sector = rq->__sector; bio->bi_iter.bi_sector = rq->__sector;
}
} }
bio_advance(bio, nbytes); bio_advance(bio, nbytes);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment