{
  "slug": "nvme-write-zeroes",
  "term": "NVMe Write Zeroes",
  "aliases": [
    "NVMe Write Zeros"
  ],
  "definition": "NVMe Write Zeroes is an NVM command for clearing logical blocks without a host-supplied zero-filled data payload.",
  "note": "For range operation (NSZ=0), NVM Command Set 1.3 ties successful completion to zero-valued subsequent successful reads until another write to that LBA range. DULBE can still cause an error after deallocation. DEAC=1 requests deallocation; DEAC=0 does not prohibit it when deallocated reads support zero values. [nvm-cs13]\n\nLinux v6.16 sets DEAC on its normal Write Zeroes path only when REQ_NOUNMAP is absent and the namespace DEAC feature (NVME_NS_DEAC) is set. Its separate controller-quirk path can instead issue Dataset Management. A block-layer operation name therefore does not uniquely identify the transmitted command. [linux-zeroes]\n\nWith NSZ=1, successful completion requires checking LBACZ. LBACZ=1 identifies whole-namespace clearing, while LBACZ=0 identifies the NLB range. Error completion does not establish that nothing was cleared. These are command-result distinctions, not physical-remanence evidence. [nvm-cs13]",
  "status": "shipping",
  "advantages": [],
  "limitations": [
    {
      "text": "Logical zero readback is not proof that hidden physical copies were erased.",
      "citationIds": [
        "wei"
      ]
    }
  ],
  "related": [
    "nvme",
    "nvme-dlfeat",
    "nvme-dulbe",
    "deallocated-read-behavior",
    "discard",
    "sanitize-nvme"
  ],
  "supersedes": [],
  "supersededBy": [],
  "firstSeen": null,
  "lastSeen": null,
  "updated": "2026-10-23",
  "citations": [
    {
      "id": "nvm-cs13",
      "title": "NVM Express NVM Command Set 1.3, section 3.3.8. Copyright 2008-2026 NVM Express, Inc. All rights reserved.",
      "url": "https://nvmexpress.org/wp-content/uploads/NVM-Express-NVM-Command-Set-Specification-Revision-1.3-Ratified-2026.07.31.pdf",
      "accessed": "2026-10-23"
    },
    {
      "id": "linux-zeroes",
      "title": "Linux v6.16: nvme_setup_write_zeroes and namespace DEAC selection",
      "url": "https://github.com/torvalds/linux/blob/v6.16/drivers/nvme/host/core.c",
      "accessed": "2026-10-23"
    },
    {
      "id": "wei",
      "title": "Wei et al., FAST 2011: Reliably Erasing Data From Flash-Based Solid State Drives, sections 2-3",
      "url": "https://www.usenix.org/legacy/events/fast11/tech/full_papers/Wei.pdf",
      "accessed": "2026-10-23"
    },
    {
      "id": "hesela-discard",
      "title": "Hesela: Write Zeroes and deallocation",
      "url": "https://hesela.com/analyses/discard-is-not-zeroing/#write-zeroes",
      "accessed": "2026-10-23"
    }
  ],
  "provenance": [
    "Protocol semantics from NVM Command Set 1.3 section 3.3.8, printed pages 57-61; the NSZ completion-scope supplement uses section 3.3.8.1 and Figure 88.",
    "Linux v6.16 source inspection, not a device trace. FAST 2011 provides historical SSD-remanence evidence, not a test of NVMe Write Zeroes or contemporary drives."
  ]
}
