{
  "slug": "nfs-change-attribute",
  "term": "NFS change attribute",
  "aliases": [
    "NFSv4 change attribute",
    "FATTR4_CHANGE"
  ],
  "definition": "The NFSv4 change attribute is a server-generated value used to detect changes to a file's data, a directory's entries or an object's attributes.",
  "note": "Validation: NFSv4 cache checks use change rather than time_modify alone, whose granularity can hide successive updates. It is a 64-bit value, not a content checksum or proof of stable storage. [rfc8881]\n\nDirectory updates: Without a directory delegation, serialized operations can compare a previous after value with the next before value in change_info4. With a valid starting cache, matching values establish continuity only when both operations report their change information atomically. Replies to concurrent requests may arrive in a different order. A cached listing assembled from multiple READDIR calls needs GETATTR checks before its first and after its last call to validate directory consistency; the continuation cookie does not replace this check. [rfc8881]\n\nOrdering: A baseline change value need not be a monotonically increasing counter. NFSv4.2 change_attr_type advertises per-filesystem behavior, including monotonic and version-counter forms. A client cannot infer the newest parallel reply merely by choosing the largest value unless the applicable behavior supports that ordering. [rfc7862]",
  "status": "shipping",
  "advantages": [],
  "limitations": [
    {
      "text": "Matching values from different servers are not comparable without established change-class continuity.",
      "citationIds": [
        "rfc8881"
      ]
    }
  ],
  "related": [
    "nfs-attribute-cache",
    "nfs-lookup-cache",
    "nfs-write-verifier",
    "nfs-readdir-cookie"
  ],
  "supersedes": [],
  "supersededBy": [],
  "firstSeen": null,
  "lastSeen": null,
  "citations": [
    {
      "id": "rfc8881",
      "title": "RFC 8881: NFSv4.1, sections 5.8.1.4, 10.3.1, 10.8.1-10.8.2 and 11.11.5.",
      "url": "https://www.rfc-editor.org/rfc/rfc8881.html#section-5.8.1.4",
      "accessed": "2026-11-08"
    },
    {
      "id": "rfc7862",
      "title": "RFC 7862: NFSv4.2, sections 10 and 12.2.3, change_attr_type and reply ordering.",
      "url": "https://www.rfc-editor.org/rfc/rfc7862.html#section-12.2.3",
      "accessed": "2026-11-08"
    },
    {
      "id": "hesela-stability",
      "title": "NFS stable writes: what COMMIT, flush and FUA actually promise",
      "url": "https://hesela.com/analyses/nfs-stable-writes-flush-fua/#change-validation",
      "accessed": "2026-11-08"
    }
  ],
  "updated": "2026-11-08",
  "provenance": [
    "Primary-source protocol review, not a client interoperability or crash test.",
    "Directory continuity follows RFC 8881 section 10.8.1 without directory delegations; the optional NFSv4.2 type is a separate extension.",
    "No universal cross-reboot uniqueness or persistence guarantee is inferred from the change attribute."
  ]
}
