Hi Martin, I don't mind going though that route, here are some points about benefits of not using REQ_SPECIAL_PAYLOAD for write-zeroes :- 1. We are using RQF_SPECIAL_PAYLOAD for only discard commands and not for write-zeroes because it does not have any payload. Using this in the code will trigger more code changes to handle in the completion path. 2. Right now, blk_rq_nr_phys_segments() is used in:- nvme/host/pci.c nvme/target/loop.c In order to keep the code consistent, I think we should use the same function call everywhere in the nvme code base:- nvme/host/rdam.c : nvme_rdma_map_data() for the first check. nvme/host/fc.c : nvme_fc_queue_rq(). 3. Also blk_rq_nr_phys_segments() takes RQF_SPECIAL_PAYLOAD into account so no more changes required for discard and write-zeroes cases. Regards, -Chaitanya On 2/20/19, 2:55 PM, "Martin K. Petersen" <martin.petersen@xxxxxxxxxx> wrote: Chaitanya, > - if (!blk_rq_payload_bytes(rq)) > + if (!blk_rq_nr_phys_segments(rq)) Wouldn't it be better to set RQF_SPECIAL_PAYLOAD and friends in nvme_setup_write_zeroes() like it's done for discard? -- Martin K. Petersen Oracle Linux Engineering