Commit af3e3a52 authored by Christoph Hellwig's avatar Christoph Hellwig Committed by Jens Axboe

block: don't unecessarily clobber bi_error for chained bios

Only overwrite the parents bi_error if it was zero. That way a successful
bio completion doesn't reset the error pointer.
Reported-by: default avatarBrian Foster <bfoster@redhat.com>
Signed-off-by: default avatarChristoph Hellwig <hch@lst.de>
Signed-off-by: default avatarJens Axboe <axboe@fb.com>
parent 3684aa70
...@@ -300,7 +300,8 @@ static void bio_chain_endio(struct bio *bio) ...@@ -300,7 +300,8 @@ static void bio_chain_endio(struct bio *bio)
{ {
struct bio *parent = bio->bi_private; struct bio *parent = bio->bi_private;
parent->bi_error = bio->bi_error; if (!parent->bi_error)
parent->bi_error = bio->bi_error;
bio_endio(parent); bio_endio(parent);
bio_put(bio); bio_put(bio);
} }
...@@ -1753,7 +1754,9 @@ void bio_endio(struct bio *bio) ...@@ -1753,7 +1754,9 @@ void bio_endio(struct bio *bio)
*/ */
if (bio->bi_end_io == bio_chain_endio) { if (bio->bi_end_io == bio_chain_endio) {
struct bio *parent = bio->bi_private; struct bio *parent = bio->bi_private;
parent->bi_error = bio->bi_error;
if (!parent->bi_error)
parent->bi_error = bio->bi_error;
bio_put(bio); bio_put(bio);
bio = parent; bio = parent;
} else { } else {
......
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