dm cache: increment bi_remaining when bi_end_io is restored
Move the bio->bi_remaining increment into dm_unhook_bio() so the overwrite_endio() handler works as expected. Signed-off-by: Mike Snitzer <snitzer@redhat.com> Signed-off-by: Jens Axboe <axboe@kernel.dk>
This commit is contained in:
parent
bc1e79acc1
commit
8d30726912
|
@ -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;
|
||||
|
|
Loading…
Reference in New Issue