|
@@ -85,6 +85,12 @@ static void dm_unhook_bio(struct dm_hook_info *h, struct bio *bio)
|
|
|
{
|
|
|
bio->bi_end_io = h->bi_end_io;
|
|
|
bio->bi_private = h->bi_private;
|
|
|
+
|
|
|
+ /*
|
|
|
+ * Must bump bi_remaining to allow bio to complete with
|
|
|
+ * restored bi_end_io.
|
|
|
+ */
|
|
|
+ atomic_inc(&bio->bi_remaining);
|
|
|
}
|
|
|
|
|
|
/*----------------------------------------------------------------*/
|
|
@@ -765,12 +771,6 @@ static void writethrough_endio(struct bio *bio, int err)
|
|
|
|
|
|
dm_unhook_bio(&pb->hook_info, bio);
|
|
|
|
|
|
- /*
|
|
|
- * Must bump bi_remaining to allow bio to complete with
|
|
|
- * restored bi_end_io.
|
|
|
- */
|
|
|
- atomic_inc(&bio->bi_remaining);
|
|
|
-
|
|
|
if (err) {
|
|
|
bio_endio(bio, err);
|
|
|
return;
|