On Wed, Feb 16, 2022 at 08:32:45AM -0500, Mikulas Patocka wrote: > > > On Mon, 7 Feb 2022, Nitesh Shetty wrote: > > > + goto retry; > > + return PTR_ERR(bio); > > + } > > + > > + bio->bi_iter.bi_sector = sector >> SECTOR_SHIFT; > > + bio->bi_opf = op; > > + bio_set_dev(bio, bdev); > > @@ -346,6 +463,8 @@ int blkdev_issue_copy(struct block_device *src_bdev, int nr, > > > > if (blk_check_copy_offload(src_q, dest_q)) > > ret = blk_copy_offload(src_bdev, nr, rlist, dest_bdev, gfp_mask); > > + else > > + ret = blk_copy_emulate(src_bdev, nr, rlist, dest_bdev, gfp_mask); > > > > return ret; > > } > > The emulation is not reliable because a device mapper device may be > reconfigured and it may lose the copy capability between the calls to > blk_check_copy_offload and blk_copy_offload. > > You should call blk_copy_emulate if blk_copy_offload returns an error. > > Mikulas > > I agree, it was in our todo list to fallback to emulation for partial copy offload failures. In next version we will add this. -- Nitesh Shetty