On Thu, Jun 29, 2017 at 11:35:44AM -0700, Shaohua Li wrote: > > - > > /* Auto-generate integrity metadata if this is a write */ > > if (bio_data_dir(bio) == WRITE) > > bio_integrity_process(bio, bi->profile->generate_fn); > > @@ -370,14 +364,12 @@ static void bio_integrity_verify_fn(struct work_struct *work) > > struct blk_integrity *bi = bdev_get_integrity(bio->bi_bdev); > > > > bio->bi_status = bio_integrity_process(bio, bi->profile->verify_fn); > > - > > - /* Restore original bio completion handler */ > > - bio->bi_end_io = bip->bip_end_io; > > + bio_integrity_free(bio); > > bio_endio(bio); > > should we directly call bi_end_io here? Otherwise, looks reasonable to me. We should call bio_endio to get the proper chaining behavior.