On Wed, Feb 16, 2022 at 08:32:45AM -0500, Mikulas Patocka wrote:
On Mon, 7 Feb 2022, Nitesh Shetty wrote:
quoted
+ 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