diff --git a/block/bio.c b/block/bio.c
index 963d1d406b3aeac59174544d6aca64ddb8cd7b2a..50e579088aca4c5ebc8eb0fc62c10b7fc94a714c 100644
--- a/block/bio.c
+++ b/block/bio.c
@@ -277,7 +277,7 @@ static struct bio *__bio_chain_endio(struct bio *bio)
 {
 	struct bio *parent = bio->bi_private;
 
-	if (!parent->bi_status)
+	if (bio->bi_status && !parent->bi_status)
 		parent->bi_status = bio->bi_status;
 	bio_put(bio);
 	return parent;