Christoph, > Yikes. Overloading REQ_OP_READ and REQ_OP_WRITE with something > entirely different brings us back the horrors of the block layer 15 > years ago. Don't do that. Please add separate REQ_COPY_IN/OUT (or > maybe SEND/RECEIVE or whatever) methods. I agree, I used REQ_COPY_IN and REQ_COPY_OUT in my original series. >> + /* setting copy limits */ >> + if (blk_queue_flag_test_and_set(QUEUE_FLAG_COPY, q)) > > I don't understand this comment. > >> +struct nvme_copy_token { >> + char *subsys; >> + struct nvme_ns *ns; >> + sector_t src_sector; >> + sector_t sectors; >> +}; > > Why do we need a subsys token? Inter-namespace copy is pretty crazy, > and not really anything we should aim for. But this whole token design > is pretty odd anyway. The only thing we'd need is a sequence number / > idr / etc to find an input and output side match up, as long as we > stick to the proper namespace scope. Yeah, I don't think we need to carry this in a token. Doing the sanity check up front in blkdev_copy_offload() should be fine. For NVMe it's not currently possible to copy across and for SCSI we'd just make sure the copy scope is the same for the two block devices before we even issue the operations. -- Martin K. Petersen Oracle Linux Engineering