<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc version 1.7.35 (Ruby 2.6.10) -->
<?rfc docmapping="yes"?>
<?rfc comments="yes"?>
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-haynes-nfsv4-recalldevice-03" category="std" consensus="true" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.33.0 -->
  <front>
    <title abbrev="RECALL_DEVICE">Deviceid-Scoped Layout Recall for NFSv4.2</title>
    <seriesInfo name="Internet-Draft" value="draft-haynes-nfsv4-recalldevice-03"/>
    <author initials="T." surname="Haynes" fullname="Thomas Haynes">
      <organization>Hammerspace</organization>
      <address>
        <email>loghyr@gmail.com</email>
      </address>
    </author>
    <date/>
    <area>Transport</area>
    <workgroup>Network File System Version 4</workgroup>
    <keyword>Internet-Draft</keyword>
    <abstract>
      <?line 53?>

<t>The Parallel Network File System (pNFS) allows the metadata
server to recall a layout from a client by file id, by file
system id, or across all of a client's layouts.  It also lets
the server delete a deviceid via CB_NOTIFY_DEVICEID.  It does
not provide a mechanism for the metadata server to recall, in a
single operation, all layouts that reference a specific
deviceid.  This document presents an extension to RFC7862 that
adds a deviceid-scoped layout recall: a single CB_LAYOUTRECALL
operation recalls every layout a client holds that references a
given deviceid, leaving unrelated layouts in place.  Without
this capability, device unavailability can trigger large
volumes of failed WRITE and LAYOUTERROR traffic, and
administrators lack a surgical way to retire a deviceid
without disturbing layouts that reference healthy devices.</t>
    </abstract>
    <note removeInRFC="true">
      <name>About This Document</name>
      <t>
        The latest revision of this draft can be found at <eref target="https://ietf-wg-nfsv4.github.io/recalldeviceid/draft-haynes-nfsv4-recalldevice.html"/>.
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-haynes-nfsv4-recalldevice/"/>.
      </t>
      <t>
        Discussion of this document takes place on the
        Network File System Version 4 Working Group mailing list (<eref target="mailto:nfsv4@ietf.org"/>),
        which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/nfsv4/"/>.
        Subscribe at <eref target="https://www.ietf.org/mailman/listinfo/nfsv4/"/>.
      </t>
      <t>Source for this draft and an issue tracker can be found at
        <eref target="https://github.com/ietf-wg-nfsv4/recalldeviceid"/>.</t>
    </note>
    <note>
      <name>Note to Readers</name>
      <?line 70?>

<t>This is an individual submission and does not reflect Working Group
consensus.  The "About This Document" section above has the current
discussion venue, latest rendering, and source location.</t>
    </note>
  </front>
  <middle>
    <?line 76?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>In the Network File System version 4 (NFSv4) with a Parallel NFS
(pNFS) metadata server (<xref target="RFC8881"/>), there is no mechanism for
the metadata server to recall layouts from a client based on the
deviceid (see Section 3.3.14 of <xref target="RFC8881"/>) those layouts
reference.  The Flex Files layout type (<xref target="RFC8435"/>) is the
primary motivating use case: a Flex Files layout describes data
spread across multiple data servers, each identified by a
distinct deviceid, often deliberately deployed across separate
power or fault domains so that a single domain failure does not
lose data.</t>
      <t>The absence of a deviceid-scoped recall has two distinct
operational consequences.  This section describes each, shows
why the existing recall and notification mechanisms are the
wrong shape to address it, and motivates the extension specified
in the rest of the document.</t>
      <section anchor="problem-1-traffic-amplification-during-device-unavailability">
        <name>Problem 1: Traffic amplification during device unavailability</name>
        <t>When a deviceid becomes unavailable -- because a power fault
domain has been isolated, because a device has been taken down
for maintenance, or because of a transient I/O failure --
clients holding layouts that reference the deviceid continue to
issue I/O against it.  Each such attempt produces a WRITE (see
Section 18.32 of <xref target="RFC8881"/>) that fails with NFS4ERR_NXIO (see
Section 15.1.16.3 of <xref target="RFC8881"/>), followed by a LAYOUTERROR
(see Section 15.6 of <xref target="RFC7862"/>) returned to the metadata
server.  The metadata server learns about the failure once per
(client, layout) pair; the network and the metadata server pay
for the retries.</t>
        <t>Structurally, the wasted RPC count is approximately
<strong>2 x C x L x W</strong>, where:</t>
        <ul spacing="normal">
          <li>
            <t><strong>C</strong> is the number of clients holding layouts that reference
the affected deviceid,</t>
          </li>
          <li>
            <t><strong>L</strong> is the average number of such layouts per client, and</t>
          </li>
          <li>
            <t><strong>W</strong> is the number of write attempts per layout during the
unavailability window.</t>
          </li>
        </ul>
        <t>The factor of two captures the WRITE-then-LAYOUTERROR pair
generated per attempt.  For a representative deployment with
<strong>C = 100</strong>, <strong>L = 50</strong>, and a several-minute unavailability
window in which each layout sees <strong>W = 1000</strong> write attempts,
the wasted RPC count is on the order of <strong>10 million</strong>.  These
numbers are illustrative order-of-magnitude estimates derived
from the structural relationship; deployment-specific
measurements are out of scope for this specification, but the
structural multiplier is what the extension eliminates.</t>
        <t>A single deviceid-scoped recall delivered to each affected
client replaces the (C x L x W) retry traffic with a single
CB_LAYOUTRECALL per client plus the client-side processing to
return the affected layouts.</t>
        <t>The existing recall mechanisms are the wrong shape for this
problem.  LAYOUTRECALL4_ALL recalls every layout a client
holds, including layouts pointing at healthy deviceids; this
fixes the traffic amplification at the cost of evicting
unrelated layouts and forcing them to be re-issued.
LAYOUTRECALL4_FILE recalls layouts one file at a time, which
adds an RPC per affected file to the recovery cost; for a
deployment where the number of affected files is large, the
per-file recall traffic is itself a scaling concern.</t>
      </section>
      <section anchor="problem-2-cleanly-retiring-a-deviceid">
        <name>Problem 2: Cleanly retiring a deviceid</name>
        <t>The metadata server can signal to clients that a deviceid no
longer exists by setting NOTIFY_DEVICEID4_DELETE in the
CB_NOTIFY_DEVICEID callback (see Section 20.12 of <xref target="RFC8881"/>).
This flag cannot be set while any layout still references the
deviceid: once a delete is announced, a client cannot have
in-flight I/O against a deviceid that no longer exists.</t>
        <t>The result is that an administrator who wants to retire a
deviceid -- for hardware refresh, decommission, capacity
rebalancing, or removal of a failed device from the
namespace -- has no surgical option.  The available choices
are:</t>
        <ul spacing="normal">
          <li>
            <t>Wait for the affected layouts to expire naturally.  The wait
is bounded by a lease period and by the slowest client.</t>
          </li>
          <li>
            <t>Use LAYOUTRECALL4_ALL to recall every layout from every
client.  This evicts layouts pointing at healthy deviceids
in the same operation, and may produce a thundering herd of
re-LAYOUTGET requests once the recall completes.</t>
          </li>
          <li>
            <t>Use LAYOUTRECALL4_FILE for every affected file.  This
generates one recall RPC per file and is expensive at scale.</t>
          </li>
          <li>
            <t>Fence the deviceid (see Section 12.5.5 of <xref target="RFC8881"/>).
This is disruptive: clients with active I/O see I/O failures
rather than orderly recall, and the operation may invalidate
concurrent legitimate I/O.</t>
          </li>
        </ul>
        <t>A deviceid-scoped recall provides the missing surgical option:
the metadata server recalls exactly the layouts referencing the
to-be-retired deviceid, waits for client acknowledgement, and
then sends CB_NOTIFY_DEVICEID with NOTIFY_DEVICEID4_DELETE.
The deviceid is retired without disturbing layouts that
reference other deviceids.</t>
      </section>
      <section anchor="what-this-document-specifies">
        <name>What this document specifies</name>
        <t>Using the process detailed in <xref target="RFC8178"/>, the revisions in
this document become an extension of NFSv4.2 <xref target="RFC7862"/>.
They are built on top of the external data representation
(XDR) <xref target="RFC4506"/> generated from <xref target="RFC7863"/>.</t>
        <t>The extension adds a deviceid-scoped recall to CB_LAYOUTRECALL:
a single callback identifies a deviceid and the client returns
every layout it holds that references that deviceid.  The
extension closes both operational gaps described above with a
single new layout-recall scope.</t>
      </section>
    </section>
    <section anchor="requirements-language">
      <name>Requirements Language</name>
      <t>The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL
NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>",
"<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are to be interpreted as
described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they
appear in all capitals, as shown here.</t>
      <?line -18?>

</section>
    <section anchor="capability">
      <name>Client Capability Advertisement</name>
      <t>Before the server may send a CB_LAYOUTRECALL with
LAYOUTRECALL4_DEVICEID, it <bcp14>MUST</bcp14> know that the client supports
the new union arm.  Per <xref target="RFC8178"/> Section 6, a server <bcp14>MUST NOT</bcp14>
send a new callback operation or new union arm to a client that
has not indicated support for it.</t>
      <t>A client that supports LAYOUTRECALL4_DEVICEID signals this by
setting a new flag in the eia_flags field of the EXCHANGE_ID
operation (see Section 18.35 of <xref target="RFC8881"/>):</t>
      <sourcecode type="xdr"><![CDATA[
///    const EXCHGID4_FLAG_SUPP_RECALL_DEVICEID = 0x02000000;
///
]]></sourcecode>
      <t>A client that sets EXCHGID4_FLAG_SUPP_RECALL_DEVICEID in its
EXCHANGE_ID request advertises that it supports handling
CB_LAYOUTRECALL with a LAYOUTRECALL4_DEVICEID recall type.</t>
      <t>A server <bcp14>MUST NOT</bcp14> send a CB_LAYOUTRECALL with
LAYOUTRECALL4_DEVICEID to a client that did not set
EXCHGID4_FLAG_SUPP_RECALL_DEVICEID in its EXCHANGE_ID request.</t>
      <t>Two kinds of server must be distinguished here.  A server with no
knowledge of EXCHGID4_FLAG_SUPP_RECALL_DEVICEID <bcp14>MUST</bcp14> reject the
EXCHANGE_ID with NFS4ERR_INVAL, because <xref target="RFC8881"/> Section 18.35.3
requires that of any undefined bit in eia_flags; it has no choice to
make.  A server that knows the flag from this document but does not
implement deviceid-scoped recall accepts the EXCHANGE_ID and simply
never sends LAYOUTRECALL4_DEVICEID.</t>
      <t>A client therefore cannot assume that setting the flag is free.  It
<bcp14>SHOULD</bcp14> probe as <xref target="RFC8178"/> Section 4.4.3 describes: send the
EXCHANGE_ID with the flag set, and on NFS4ERR_INVAL retry without it.
The client cannot learn why the first attempt failed, since
EXCHANGE_ID returns NFS4ERR_INVAL for several other reasons, so it
<bcp14>MUST</bcp14> treat any NFS4ERR_INVAL as grounds to retry without the flag
rather than as a permanent failure.</t>
      <t>A server <bcp14>MUST NOT</bcp14> set EXCHGID4_FLAG_SUPP_RECALL_DEVICEID in eir_flags
unless the client set it in eia_flags.  <xref target="RFC8881"/> Section 18.35.3
permits a server to set a result bit the client did not request, but a
client with no knowledge of this flag has no way to interpret it, and
an implementation that validates eir_flags against the bits it knows
will reject the reply.</t>
      <t>If the client does not set EXCHGID4_FLAG_SUPP_RECALL_DEVICEID,
the server <bcp14>MAY</bcp14> fall back to recalling individual layouts via
LAYOUTRECALL4_FILE (one CB_LAYOUTRECALL per layout file that
references the unavailable deviceid), as described in Section 20.3
of <xref target="RFC8881"/>.  This is less efficient but correct, and preserves
interoperability with clients that predate this extension.</t>
    </section>
    <section anchor="extension-to-cblayoutrecall-recall-layout-from-client">
      <name>Extension to CB_LAYOUTRECALL - Recall Layout from Client</name>
      <t>The original union layoutrecall4 (see Section 20.3.1 of <xref target="RFC8881"/>) is:</t>
      <sourcecode type="xdr"><![CDATA[
enum layoutrecall_type4 {
        LAYOUTRECALL4_FILE = LAYOUT4_RET_REC_FILE,
        LAYOUTRECALL4_FSID = LAYOUT4_RET_REC_FSID,
        LAYOUTRECALL4_ALL  = LAYOUT4_RET_REC_ALL
};

union layoutrecall4 switch(layoutrecall_type4 lor_recalltype) {
   case LAYOUTRECALL4_FILE:
           layoutrecall_file4 lor_layout;
   case LAYOUTRECALL4_FSID:
           fsid4              lor_fsid;
   case LAYOUTRECALL4_ALL:
           void;
   };
]]></sourcecode>
      <t>The proposed extension is:</t>
      <sourcecode type="xdr"><![CDATA[
///    const LAYOUT4_RET_REC_DEVICEID  = 4;
///
///    enum layoutrecall_type4 {
///           LAYOUTRECALL4_FILE     = LAYOUT4_RET_REC_FILE,
///           LAYOUTRECALL4_FSID     = LAYOUT4_RET_REC_FSID,
///           LAYOUTRECALL4_ALL      = LAYOUT4_RET_REC_ALL,
///           LAYOUTRECALL4_DEVICEID = LAYOUT4_RET_REC_DEVICEID
///   };
///
/// union layoutrecall4 switch(layoutrecall_type4 lor_recalltype) {
///   case LAYOUTRECALL4_FILE:
///           layoutrecall_file4 lor_layout;
///   case LAYOUTRECALL4_FSID:
///           fsid4              lor_fsid;
///   case LAYOUTRECALL4_DEVICEID:
///           deviceid4          lor_deviceid;
///   case LAYOUTRECALL4_ALL:
///           void;
///   };
]]></sourcecode>
      <section anchor="completion">
        <name>Completing a Deviceid-Scoped Recall</name>
        <t>A deviceid-scoped recall is a bulk recall, in the same sense that
LAYOUTRECALL4_FSID is: it names a scope rather than a file, and
<xref target="RFC8881"/> Section 12.5.5.2.1.5 applies to it as written.  This
document defines no exception to that section.</t>
        <t><xref target="RFC8881"/> Section 18.44.3 requires a LAYOUTRETURN with a matching
scope to complete a recall, even if all current layout ranges have
been previously returned individually.  The scope here is the
deviceid, and the LAYOUT4<em>RET_REC</em>* constants are shared between
layoutrecall_type4 (used in CB_LAYOUTRECALL) and layoutreturn_type4
(used in LAYOUTRETURN, see Section 18.44.1 of <xref target="RFC8881"/>), so adding
LAYOUT4_RET_REC_DEVICEID = 4 gives layoutreturn_type4 a
LAYOUTRETURN4_DEVICEID value as well.</t>
        <t>No new arm of layoutreturn4 is needed, and none may be added: that
union carries a default case, which <xref target="RFC8178"/> Section 4.2 forbids
extending.  None is needed because the aggregate returns carry no
body.  <xref target="RFC8881"/> Section 18.44.3 identifies the file system of a
LAYOUTRETURN4_FSID from the current filehandle, and uses no filehandle
at all for LAYOUTRETURN4_ALL; LAYOUTRETURN4_DEVICEID is the same
shape, and takes the default void arm.  Adding the enum value is
permitted on its own: <xref target="RFC8178"/> Section 4.2 lists addition of new,
previously unused values to existing enums among the allowed
extensions.</t>
        <t>The recall being completed is identified by being the only one
outstanding.  <xref target="RFC8881"/> Section 12.5.5.2.1.5 requires that a server
not initiate a bulk recall while another recall is in progress or its
LAYOUTRETURN is pending, so at most one deviceid-scoped recall is
outstanding for a client at a time, and a void-bodied
LAYOUTRETURN4_DEVICEID is unambiguous.</t>
        <t>An honoring client therefore completes the recall in one of two ways:</t>
        <ul spacing="normal">
          <li>
            <t>it returns the affected layouts, individually or otherwise, and then
sends a LAYOUTRETURN whose lr_returntype is LAYOUTRETURN4_DEVICEID;
or</t>
          </li>
          <li>
            <t>it replies to the CB_LAYOUTRECALL with NFS4ERR_NOMATCHING_LAYOUT,
when it holds no layout referencing the deviceid and no valid
mapping for it (<xref target="RFC8881"/> Section 20.3.3).</t>
          </li>
        </ul>
        <t>Once that LAYOUTRETURN is sent, the layout stateids for the returned
layouts are freed, and the client <bcp14>MUST</bcp14> send LAYOUTGET to obtain a new
layout stateid before using a layout for any of those files again.</t>
        <t>A server with no knowledge of LAYOUTRETURN4_DEVICEID returns
NFS4ERR_BADXDR, or an RPC XDR decode error, as <xref target="RFC8178"/> Section
4.4.3 describes for an unrecognised switch arm.  NFS4ERR_UNION_NOTSUPP
is the answer of a responder that does know the arm, so it is not the
error for this case.  A client has no reason to probe for it: a server
that sent LAYOUTRECALL4_DEVICEID has demonstrated knowledge of the
value, and <xref target="capability"/> forbids sending that recall otherwise.</t>
        <t>The server <bcp14>MUST NOT</bcp14> send CB_LAYOUTRECALL with LAYOUTRECALL4_DEVICEID
to a client that has not set EXCHGID4_FLAG_SUPP_RECALL_DEVICEID
(see <xref target="capability"/>).  This satisfies the requirement in Section 6
of <xref target="RFC8178"/> that a server establish client awareness before
sending new callback extensions.</t>
        <t>The existing clora_iomode field in CB_LAYOUTRECALL4args
(see Section 20.3.1 of <xref target="RFC8881"/>) applies normally: the client
<bcp14>MUST</bcp14> return all layouts matching both the given deviceid and the
given iomode.  The server can determine that the client no longer
has any layouts with the given deviceid and iomode once the client
replies with NFS4ERR_NOMATCHING_LAYOUT.</t>
      </section>
    </section>
    <section anchor="extraction-of-xdr">
      <name>Extraction of XDR</name>
      <t>This document contains the external data representation (XDR)
<xref target="RFC4506"/> description of the extension to CB_LAYOUTRECALL.
The XDR description is presented in a manner that facilitates easy
extraction into a ready-to-compile format. To extract the
machine-readable XDR description, use the following shell script, which relies on the sh, grep,
and sed utilities as specified by <xref target="POSIX"/>:</t>
      <sourcecode type="shell"><![CDATA[
<CODE BEGINS>
#!/bin/sh
grep '^ *///' $* | sed 's?^ */// ??' | sed 's?^ *///$??'
<CODE ENDS>
]]></sourcecode>
      <t>For example, if the script is named 'extract.sh' and this document is
named 'spec.txt', execute the following command:</t>
      <sourcecode type="shell"><![CDATA[
<CODE BEGINS>
sh extract.sh < spec.txt > recalldevice.x
<CODE ENDS>
]]></sourcecode>
      <t>This script removes leading blank spaces and the sentinel sequence '///'
from each line. XDR descriptions with the sentinel sequence are embedded
throughout the document.</t>
      <t>Note that the XDR code contained in this document depends on types from
the NFSv4.2 nfs4_prot.x file (generated from <xref target="RFC7863"/>).  This includes
both nfs types that end with a 4, such as offset4, length4, etc., as
well as more generic types such as uint32_t and uint64_t.</t>
      <t>The extracted XDR extends types that are already defined in
<xref target="RFC7863"/> rather than introducing new types.  An implementer <bcp14>MUST</bcp14>
integrate the extracted block into the base XDR by <strong>replacing</strong>
the existing layoutrecall_type4 enum declaration and layoutrecall4
union declaration with the extended versions in this document, and
by adding the LAYOUT4<em>RET_REC_DEVICEID constant in the same file
area as the existing LAYOUT4_RET_REC</em>* constants.  Appending the
extracted block verbatim to the RFC 7863 XDR produces duplicate-
type errors at compile time.</t>
      <t>The EXCHGID4_FLAG_SUPP_RECALL_DEVICEID constant is purely additive
and is added to the EXCHGID4 flag constant block without replacing
anything.</t>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>The extension introduced by this document inherits the Security
Considerations of CB_LAYOUTRECALL in Section 20.3 of <xref target="RFC8881"/>
and of NFSv4.2 in <xref target="RFC7862"/>.  Three aspects of the deviceid-scoped
recall warrant explicit mention.</t>
      <dl>
        <dt>Blast radius:</dt>
        <dd>
          <t>A single CB_LAYOUTRECALL with LAYOUTRECALL4_DEVICEID can cause
a client to return many layouts in one callback exchange.  This
is not a new risk category -- LAYOUTRECALL4_FSID and
LAYOUTRECALL4_ALL already allow wider-scoped recalls -- but
administrators sizing callback-channel timeouts and client-side
recall-handler resources <bcp14>SHOULD</bcp14> account for the possibility that
a deviceid-scoped recall triggers per-layout cleanup work
proportional to the number of layouts that reference the
deviceid.</t>
        </dd>
        <dt>Cross-client scope:</dt>
        <dd>
          <t>In deployments where a single deviceid is shared across clients
serving different tenants or applications, a deviceid-scoped
recall is cross-client by construction: every client that holds
a layout referencing the deviceid is recalled.  This is the same
property as LAYOUTRECALL4_FSID and does not introduce a new
information-exposure surface.  Deployments that prefer
per-tenant failure-domain isolation <bcp14>MAY</bcp14> treat this extension as
an operational benefit: by assigning distinct deviceids per
tenant, deviceid-scoped recall becomes a per-tenant operation
with no cross-tenant effect.</t>
        </dd>
        <dt>Capability negotiation as defence in depth:</dt>
        <dd>
          <t>The capability flag defined in <xref target="capability"/> ensures that a
server cannot silently change the callback wire format for a
client that did not opt in.  A client that does not advertise
EXCHGID4_FLAG_SUPP_RECALL_DEVICEID continues to receive only
the layoutrecall_type4 values defined in <xref target="RFC8881"/>.  A server
that sends LAYOUTRECALL4_DEVICEID to a client that did not
advertise support is in violation of Section 6 of <xref target="RFC8178"/>.
Such a client does not recognise the union arm, so it responds as
<xref target="RFC8178"/> Section 4.4.3 describes for that case, with
NFS4ERR_BADXDR or an RPC XDR decode error, and <bcp14>SHOULD</bcp14> log the
server for operator attention.</t>
        </dd>
      </dl>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>This document has no IANA actions.</t>
    </section>
  </middle>
  <back>
    <references anchor="sec-combined-references">
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <reference anchor="RFC2119">
          <front>
            <title>Key words for use in RFCs to Indicate Requirement Levels</title>
            <author fullname="S. Bradner" initials="S." surname="Bradner"/>
            <date month="March" year="1997"/>
            <abstract>
              <t>In many standards track documents several words are used to signify the requirements in the specification. These words are often capitalized. This document defines these words as they should be interpreted in IETF documents. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="2119"/>
          <seriesInfo name="DOI" value="10.17487/RFC2119"/>
        </reference>
        <reference anchor="RFC4506">
          <front>
            <title>XDR: External Data Representation Standard</title>
            <author fullname="M. Eisler" initials="M." role="editor" surname="Eisler"/>
            <date month="May" year="2006"/>
            <abstract>
              <t>This document describes the External Data Representation Standard (XDR) protocol as it is currently deployed and accepted. This document obsoletes RFC 1832. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="67"/>
          <seriesInfo name="RFC" value="4506"/>
          <seriesInfo name="DOI" value="10.17487/RFC4506"/>
        </reference>
        <reference anchor="RFC7862">
          <front>
            <title>Network File System (NFS) Version 4 Minor Version 2 Protocol</title>
            <author fullname="T. Haynes" initials="T." surname="Haynes"/>
            <date month="November" year="2016"/>
            <abstract>
              <t>This document describes NFS version 4 minor version 2; it describes the protocol extensions made from NFS version 4 minor version 1. Major extensions introduced in NFS version 4 minor version 2 include the following: Server-Side Copy, Application Input/Output (I/O) Advise, Space Reservations, Sparse Files, Application Data Blocks, and Labeled NFS.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7862"/>
          <seriesInfo name="DOI" value="10.17487/RFC7862"/>
        </reference>
        <reference anchor="RFC7863">
          <front>
            <title>Network File System (NFS) Version 4 Minor Version 2 External Data Representation Standard (XDR) Description</title>
            <author fullname="T. Haynes" initials="T." surname="Haynes"/>
            <date month="November" year="2016"/>
            <abstract>
              <t>This document provides the External Data Representation (XDR) description for NFS version 4 minor version 2.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7863"/>
          <seriesInfo name="DOI" value="10.17487/RFC7863"/>
        </reference>
        <reference anchor="RFC8174">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
            <author fullname="B. Leiba" initials="B." surname="Leiba"/>
            <date month="May" year="2017"/>
            <abstract>
              <t>RFC 2119 specifies common key words that may be used in protocol specifications. This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the defined special meanings.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="8174"/>
          <seriesInfo name="DOI" value="10.17487/RFC8174"/>
        </reference>
        <reference anchor="RFC8178">
          <front>
            <title>Rules for NFSv4 Extensions and Minor Versions</title>
            <author fullname="D. Noveck" initials="D." surname="Noveck"/>
            <date month="July" year="2017"/>
            <abstract>
              <t>This document describes the rules relating to the extension of the NFSv4 family of protocols. It covers the creation of minor versions, the addition of optional features to existing minor versions, and the correction of flaws in features already published as Proposed Standards. The rules relating to the construction of minor versions and the interaction of minor version implementations that appear in this document supersede the minor versioning rules in RFC 5661 and other RFCs defining minor versions.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8178"/>
          <seriesInfo name="DOI" value="10.17487/RFC8178"/>
        </reference>
        <reference anchor="RFC8881">
          <front>
            <title>Network File System (NFS) Version 4 Minor Version 1 Protocol</title>
            <author fullname="D. Noveck" initials="D." role="editor" surname="Noveck"/>
            <author fullname="C. Lever" initials="C." surname="Lever"/>
            <date month="August" year="2020"/>
            <abstract>
              <t>This document describes the Network File System (NFS) version 4 minor version 1, including features retained from the base protocol (NFS version 4 minor version 0, which is specified in RFC 7530) and protocol extensions made subsequently. The later minor version has no dependencies on NFS version 4 minor version 0, and is considered a separate protocol.</t>
              <t>This document obsoletes RFC 5661. It substantially revises the treatment of features relating to multi-server namespace, superseding the description of those features appearing in RFC 5661.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8881"/>
          <seriesInfo name="DOI" value="10.17487/RFC8881"/>
        </reference>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="POSIX" target="https://standards.ieee.org/ieee/1003.1/7700/">
          <front>
            <title>IEEE Standard for Information Technology--Portable Operating System Interface (POSIX) Base Specifications, Issue 8</title>
            <author>
              <organization>IEEE</organization>
            </author>
            <author>
              <organization>The Open Group</organization>
            </author>
            <date year="2024"/>
          </front>
          <seriesInfo name="IEEE" value="Std 1003.1-2024"/>
        </reference>
        <reference anchor="RFC1813" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.1813.xml">
          <front>
            <title>NFS Version 3 Protocol Specification</title>
            <author fullname="B. Callaghan" initials="B." surname="Callaghan"/>
            <author fullname="B. Pawlowski" initials="B." surname="Pawlowski"/>
            <author fullname="P. Staubach" initials="P." surname="Staubach"/>
            <date month="June" year="1995"/>
            <abstract>
              <t>This paper describes the NFS version 3 protocol. This paper is provided so that people can write compatible implementations. This memo provides information for the Internet community. This memo does not specify an Internet standard of any kind.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="1813"/>
          <seriesInfo name="DOI" value="10.17487/RFC1813"/>
        </reference>
        <reference anchor="RFC8435">
          <front>
            <title>Parallel NFS (pNFS) Flexible File Layout</title>
            <author fullname="B. Halevy" initials="B." surname="Halevy"/>
            <author fullname="T. Haynes" initials="T." surname="Haynes"/>
            <date month="August" year="2018"/>
            <abstract>
              <t>Parallel NFS (pNFS) allows a separation between the metadata (onto a metadata server) and data (onto a storage device) for a file. The flexible file layout type is defined in this document as an extension to pNFS that allows the use of storage devices that require only a limited degree of interaction with the metadata server and use already-existing protocols. Client-side mirroring is also added to provide replication of files.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8435"/>
          <seriesInfo name="DOI" value="10.17487/RFC8435"/>
        </reference>
      </references>
    </references>
    <?line 479?>

<section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>Trond Myklebust and Paul Saab were involved in the initial requirements
for this functionality.</t>
      <t>Chuck Lever and Benjamin Coddington reviewed the document.</t>
      <t>Brian Pawlowski and Gorry Fairhurst helped guide this process.</t>
    </section>
  </back>
  <!-- ##markdown-source:
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
3S9TtvqcMqiPWLXhzqoQ+bqjqzgRRKc8aTRHZfh1OEMMaM3ONdJABLtkgWkF
H4ZE7Js8bRxA4oLDXGNARbrevnEP/Z3YwXClAqgXGhl2e8xjY3NP3xGrYpuM
glM9/+30l5OrD+f3F2eNY7I2WHjTO97ACoCP//rXv/TDKFf7+/t0UEul6ILn
+0DR6/3lyYf7208fP963mjdA84/64OHg6ID/vaXRNNPGxi02/Q2TYXeIv6qx
jYDM4NW96nlPGjfYCXwyokRsI8X3BYAd7A4RYcXO8mRdP/4PqruhIwjnXIgn
DqhvZoDewgAKc8tMf4kJdVCNxptY6TgJk/OESRm7KfSQ/ZbW1ZaYD0gbKyxD
M3wDOcyK3P6DzvEINjXpatWPL67+enJZl9YbutVWvN6xyiUkeTFSToSskfD5
OKa68DAmg6oV/C1HVEmIJOGhaszMfGltkOei3QluZFPxuVULvZRFfXwTE7Ln
xzuggokiOy/cumXJ2SKNXqmUYr+HgttVou0EIBd2kj61Nc6BsMpGioDSxNTp
sM9aPu9XPhRQrchSfNrm5Pq9fu+4PigaiAJvlVu1CFYNsbEtTF9KC7CUvNld
7YQ9/VyX1+EQahznZKj+eEIS3Q5Bq8iumTTjprX1yGf6+qyHuDkSUO5ZcRnW
V6yMBR4WrDLt0WAJNVCRHCSHb9AeNqua+YwhZAcXOTMpbchnPTv8wDd5Qtba
XLRWlWlCMLsZtyw7raZuQ7RPWQpRR96geRpMs5hQ0CBbaawQfI33GFKpNaFm
6n2AbvmAoqrneBPzLQUV4grHgYoO/YPBSFhhrQ3pnqv3XlVniLQhbSD2tqmW
UhQK/oTruCvw/GLc2kdoIfg2xneaXTTAOZAlVuFoXpUgyLAaPQshs1rEZltt
8gWl6dvKxaGEwYXHVlYmom6eTAan8pLxZAuzNopsx6odint10s4KZKnoGAff
FWVIpyNvsZwxYdNOsbQ43lfnMJB1q3yIl0lMIvAq7eAc4bzZqLO+625o5Lxs
VG8EGEoakeXxJKZMRYCScEiY3t8oKR73DjeOJGPXQB82LWetOe4pOgPd+0az
9Ro5i+tH/7APzbgj7eDHnV1Dbhm1bAy5JU3aPoQYsWUI5UKPb5XatnMHEUTT
F1u2kmT5vTyg7y9la9QssWVrg4ogrdtsIRWUueTx212zYFutWcYuHvV16x/N
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
aJyqxsZaVZ7YX18MEYdnIgjROKnxAZlPCCa58SpbUzJMMup2Sj0epuuETB1s
dm9Puuwx/d6eKpqBa0txg/NHgLDE+KaDZk2Dq5I+zW++U2maMIMyRLlp6TY0
RIpZ1Jda56w7KxuhMtOqqfFtbfojENoEn++380Rph9g5n1fox6p11oHgITYz
CxkFRKVJVszF6obWqETcohaRruJkhbGfo4wtuG7K27yefMNRY71BxJAyp1uO
kn4vrPKtpFxgCVSFKX3rdhgtWwjHpJW4McWqIFDAgRSoo8zpUOkUw5Bri+zc
etdd0Ebr+4RbPjSF0sb+JD3Mp9rzURxdR4trR2VriId32ug9DJ2Mvv2QXACy
HUgbTrZw1Q3FdmKtQgpv8pxYYh9IUkDqRLgUNN8lhu4Ww9WWSG0H3HWw9Wb6
U+iWURLXoejgpMa5WQBlsyY08jl1A0PSVZJJo6U4ZBLSGpTH7osOfxyFOsi3
VI3JfrYeVwSXw6UX7IGuG7WqDo5vWZYFU96+ke7if3Lk84R2iUyKGKTO1d2Q
xqUamkIm7Uqxi8olck/bad/jYCK5OxUS2XnmXOwPNrleyAzc1d4pl+75xlrX
Z6URXcMo59Tt+IUG81FV7hssvYXUt0J239dUjXMG6MUp3SbuhtN9ooK14yJt
3LVy/uKJWb/yxDm8lIz9tWR/XEuLELDme7HxmJeHntA11IKrSAzzqz/nscGI
msO0RNSkcbgS08/lyvvAN623Ui4qawiD/6iwwb3LtI4dNQ6tqxqk57PNITWz
3hwTFLI+6q/chy83kIbXfwKlC7PM6KoadYKP5S8ynDWYHI64QSovDNkLx0Jf
R9dfB5ZbwORQqFFAmknaR+IU6Gn/aasNd4hoP6a8myKQoz49kc/a/XNWOxou
q3d2aWm4yWyapFbr0QShQiIC9G9YLqKR6tUtmSlsnmqSQjrhBlbXmLWwmLJK
cuNOPYSDQA0w1pN++vMMdfkz6KMkepyOI16l1GAvPknys+CplnTBROTmL2Fp
vbUhLiMMnjYrHnXlhB1b6PejCb4tJPIVat//A6YvpATM4qjqZC3Q4uvRLVY0
OzFCvUqmkDrLzkavnb1/4jb9bqoWUSkPL+Kgj/A8VR1Ct+sQdJND3zLC3GiR
qSpXvv/EN6uGepOvSzmv1d/QNebdrqmOX6jbUdelMCm/PV19g2F7X55k4aZw
UCKaXjQ9k9u9Icx+py9Ork62oIwmkvBVMX5TkuHwJ0tI+2iSk+rCBrsG9XUg
rt2Ofnw2Nomzzx4xaQ6m6F9XXxI7pAZKovijKRN9a8xQL/kgMF1kySLkKtaX
/pNm7cipqno3LtNIXAVsiAx0WsIYLrk7kCZ/Z9N/mBlVdzLGrwX/9ZpFbOka
/Vr29C6PwdqPZkl/qOhLzOM/ZHRK9d7E+bSkJjvkluROJiVdVGUK/MWOnvpf
XmyuIptNAAA=

-->

</rfc>
