block: Fix BUG_ON when pi errors occur
authorSagi Grimberg <sagig@mellanox.com>
Wed, 13 Aug 2014 11:49:31 +0000 (14:49 +0300)
committerJens Axboe <axboe@fb.com>
Fri, 22 Aug 2014 01:37:47 +0000 (20:37 -0500)
When getting a pi error we get to bio_integrity_end_io with
bi_remaining already decremented to 0 where we will eventually
need to call bio_endio with restored original bio completion handler.
Calling bio_endio invokes a BUG_ON(). We should call bio_endio_nodec
instead, like what is done in bio_integrity_verify_fn.

Signed-off-by: Sagi Grimberg <sagig@mellanox.com>
Signed-off-by: Jens Axboe <axboe@fb.com>
block/bio-integrity.c

index bc423f7b02da856a6987089b6750322c9b7cbfe4..f14b4abbebd89a0b812a67b06e3a9bb2dffb707b 100644 (file)
@@ -520,7 +520,7 @@ void bio_integrity_endio(struct bio *bio, int error)
         */
        if (error) {
                bio->bi_end_io = bip->bip_end_io;
-               bio_endio(bio, error);
+               bio_endio_nodec(bio, error);
 
                return;
        }