On Fri, Apr 26, 2024 at 12:09:37AM +0530, Kanchan Joshi wrote: > From: Anuj Gupta <anuj20.g@xxxxxxxxxxx> > > Do it only once when the parent bio completes. > > Signed-off-by: Anuj Gupta <anuj20.g@xxxxxxxxxxx> > Signed-off-by: Kanchan Joshi <joshi.k@xxxxxxxxxxx> > --- > block/bio-integrity.c | 10 +++++++--- > 1 file changed, 7 insertions(+), 3 deletions(-) > > diff --git a/block/bio-integrity.c b/block/bio-integrity.c > index b4042414a08f..b698eb77515d 100644 > --- a/block/bio-integrity.c > +++ b/block/bio-integrity.c > @@ -119,7 +119,8 @@ static void bio_integrity_uncopy_user(struct bio_integrity_payload *bip) > ret = copy_to_iter(bvec_virt(&src_bvec), bytes, &iter); > WARN_ON_ONCE(ret != bytes); > > - bio_integrity_unpin_bvec(copy, nr_vecs, true); > + if (!bio_flagged((bip->bip_bio), BIO_CLONED)) > + bio_integrity_unpin_bvec(copy, nr_vecs, true); > } This feels wrong. I suspect the problem is that BIP_COPY_USER is inherited for clone bios while it shouldn't.