{
  "slug": "nvme-namespace-write-protection",
  "term": "NVMe namespace write protection",
  "aliases": [
    "Namespace Write Protection Config",
    "NVMe namespace write protect"
  ],
  "definition": "NVMe namespace write protection is an optional controller capability that restricts changes to a namespace according to its protection state.",
  "note": "Identify Controller reports optional support through NWPC. Basic support covers unprotected and protected states; until-power-cycle and permanent protection have separate capability bits. [libnvme-nwpc] Get Features identifier 84h reports the configured state. [base23-wp]\n\nOrdinary protection survives power cycles and Controller Level Resets but remains changeable. Until-power-cycle protection survives a Controller Level Reset and clears on power cycle. Permanent protection survives both events. Set Features cannot change an already active until-power-cycle or permanent state. Although the feature is not saveable, these persistence rules still apply. [base23-wp]\n\nAll attached controllers enforce protection. Entering it commits the namespace's volatile cached data and metadata. Configuring protection must not itself set SMART's All Media Read-Only warning. [base23-wp]",
  "status": "shipping",
  "advantages": [],
  "limitations": [
    {
      "text": "Entering until-power-cycle or permanent protection also requires the corresponding RPMB Write Protection Control permission; NWPC support alone is insufficient. Until-power-cycle mode is prohibited in multi-domain subsystems. These entry controls clear on a power cycle or Controller Level Reset; clearing an entry permission does not remove an already active protection state.",
      "citationIds": [
        "base23-wp"
      ]
    }
  ],
  "related": [
    "namespace-nvme",
    "nvme-reservation",
    "nvme-critical-warning",
    "nvme-format-nvm",
    "sanitize-nvme",
    "read-only-mount"
  ],
  "supersedes": [],
  "supersededBy": [],
  "firstSeen": null,
  "lastSeen": null,
  "updated": "2026-11-08",
  "citations": [
    {
      "id": "base23-wp",
      "title": "NVM Express Base 2.3: sections 5.2.26.1.35, 8.1.17 and Figure 690. Copyright 2025 NVM Express, Inc.; all rights reserved.",
      "url": "https://nvmexpress.org/wp-content/uploads/NVM-Express-Base-Specification-Revision-2.3-2025.08.01-Ratified.pdf",
      "accessed": "2026-11-08"
    },
    {
      "id": "libnvme-nwpc",
      "title": "libnvme v1.15: nvme_id_ctrl_nwpc capability flags",
      "url": "https://github.com/linux-nvme/libnvme/blob/v1.15/src/nvme/types.h#L2428",
      "accessed": "2026-11-08"
    },
    {
      "id": "hesela-nvme",
      "title": "Hesela: NVM Express, namespace protection and command behavior",
      "url": "https://hesela.com/tech/nvme/",
      "accessed": "2026-11-08"
    }
  ],
  "provenance": [
    "Protocol and pinned API source review; no device command, hardware experiment or immutable-backup certification."
  ]
}
