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: Brian Foster <bfoster@redhat.com> Signed-off-by: Christoph Hellwig <hch@lst.de> Signed-off-by: Jens Axboe <axboe@fb.com>
This commit is contained in:
Родитель
3684aa7099
Коммит
af3e3a5259
|
@ -300,6 +300,7 @@ static void bio_chain_endio(struct bio *bio)
|
|||
{
|
||||
struct bio *parent = bio->bi_private;
|
||||
|
||||
if (!parent->bi_error)
|
||||
parent->bi_error = bio->bi_error;
|
||||
bio_endio(parent);
|
||||
bio_put(bio);
|
||||
|
@ -1753,6 +1754,8 @@ void bio_endio(struct bio *bio)
|
|||
*/
|
||||
if (bio->bi_end_io == bio_chain_endio) {
|
||||
struct bio *parent = bio->bi_private;
|
||||
|
||||
if (!parent->bi_error)
|
||||
parent->bi_error = bio->bi_error;
|
||||
bio_put(bio);
|
||||
bio = parent;
|
||||
|
|
Загрузка…
Ссылка в новой задаче