Hi Here I'm submitting the first version of NVMe copy offload patches as a request for comment. They use the token-based approach as we discussed on the phone call. The first patch adds generic copy offload support to the block layer - it adds two new bio types (REQ_OP_COPY_READ_TOKEN and REQ_OP_COPY_WRITE_TOKEN) and a new ioctl BLKCOPY and a kernel function blkdev_issue_copy. The second patch adds copy offload support to the NVMe subsystem. The third patch implements a "nvme-debug" driver - it is similar to "scsi-debug", it simulates a nvme host controller, it keeps data in memory and it supports copy offload according to NVMe Command Set Specification 1.0a. (there are no hardware or software implementations supporting copy offload so far, so I implemented it in nvme-debug) TODO: * implement copy offload in device mapper linear target * implement copy offload in software NVMe target driver * make it possible to complete REQ_OP_COPY_WRITE_TOKEN bios asynchronously * should we use copy_file_range instead of a new ioctl? How to test this: * apply the three patches * select CONFIG_NVME_DEBUG * compile the kernel * modprobe nvme-debug; nvme connect -t debug -a 123 -n 456 * issue the BLKCOPY ioctl on /dev/nvme0n1, for example, you can use this program: http://people.redhat.com/~mpatocka/patches/kernel/xcopy/example/blkcopy.c Mikulas