On 3/1/2023 4:38 PM, Jonmichael Hands wrote: > Hi Logan, Martin, > just to be clear, the Linux implementation of write zeros is correctly > tagging DEAC to 1 during the NVMe write zeros command? This should be > very fast on drives that support write zeros with TRIM (most controllers > will have the same internal path as a TRIM updating the FTL to > deallocate the LBAs). Size of the command really shouldn't affect it > much, it is much more correlated with the firmware implementation of above. > Thanks! > JM > Screenshot 2023-03-01 at 4.35.43 PM.png Yes, it does please see [1]. -ck 1. NVMe DEC bit tagging in NVMe write-zeroes command setup. static inline blk_status_t nvme_setup_write_zeroes(struct nvme_ns *ns, struct request *req, struct nvme_command *cmnd) { memset(cmnd, 0, sizeof(*cmnd)); if (ns->ctrl->quirks & NVME_QUIRK_DEALLOCATE_ZEROES) return nvme_setup_discard(ns, req, cmnd); cmnd->write_zeroes.opcode = nvme_cmd_write_zeroes; cmnd->write_zeroes.nsid = cpu_to_le32(ns->head->ns_id); cmnd->write_zeroes.slba = cpu_to_le64(nvme_sect_to_lba(ns, blk_rq_pos(req))); cmnd->write_zeroes.length = cpu_to_le16((blk_rq_bytes(req) >> ns->lba_shift) - 1); if (!(req->cmd_flags & REQ_NOUNMAP) && (ns->features & NVME_NS_DEAC)) *cmnd->write_zeroes.control |= cpu_to_le16(NVME_WZ_DEAC);* if (nvme_ns_has_pi(ns)) { cmnd->write_zeroes.control |= cpu_to_le16(NVME_RW_PRINFO_PRACT); switch (ns->pi_type) { case NVME_NS_DPS_PI_TYPE1: case NVME_NS_DPS_PI_TYPE2: nvme_set_ref_tag(ns, cmnd, req); break; } } return BLK_STS_OK; }