<?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.36 (Ruby 3.4.9) -->
<?rfc docmapping="yes"?>
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-cel-nfsv4-copy-implementation-experience-03" category="info" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.33.0 -->
  <front>
    <title abbrev="NFSv4.2 COPY Implementation Experience">Network File System version 4.2 COPY Operation Implementation Experience</title>
    <seriesInfo name="Internet-Draft" value="draft-cel-nfsv4-copy-implementation-experience-03"/>
    <author fullname="Olga Kornievskaia">
      <organization abbrev="RedHat">Red Hat</organization>
      <address>
        <postal>
          <country>United States of America</country>
        </postal>
        <email>okorniev@redhat.com</email>
      </address>
    </author>
    <author fullname="Chuck Lever" role="editor">
      <organization>Independent</organization>
      <address>
        <postal>
          <country>United States of America</country>
        </postal>
        <email>cel-ietf@chucklever.net</email>
      </address>
    </author>
    <date year="2026" month="May" day="15"/>
    <area>Web and Internet Transport</area>
    <workgroup>Network File System Version 4</workgroup>
    <keyword>NFSv4.2</keyword>
    <keyword>COPY</keyword>
    <keyword>CLONE</keyword>
    <keyword>WRITE_SAME</keyword>
    <keyword>offload</keyword>
    <abstract>
      <?line 64?>

<t>This document describes the authors' experience implementing the
NFSv4.2 COPY operation. It recommends and motivates updates to
the specification of that operation. This is not a normative
document.</t>
    </abstract>
    <note removeInRFC="true">
      <name>About This Document</name>
      <t>
        The latest revision of this draft can be found at <eref target="https://chucklever.github.io/i-d-update-copy-spec/#go.draft-cel-nfsv4-copy-implementation-experience.html"/>.
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-cel-nfsv4-copy-implementation-experience/"/>.
      </t>
      <t>
        Discussion of this document takes place on the
        nfsv4 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/chucklever/i-d-update-copy-spec"/>.</t>
    </note>
  </front>
  <middle>
    <?line 71?>

<section anchor="introduction">
      <name>Introduction</name>
      <t><xref target="RFC7862"/> introduces a facility to the NFSv4 protocol for NFS clients
to request that an NFS server copy data from one file to another.
Because the data copy happens on the NFS server, it avoids the transit
of file data between client and server during the copy operation.
This reduces latency, network bandwidth requirements, and the exposure
of file data to third parties when handling the copy request.</t>
      <t>Based on implementation experience, this document reports on areas where
specification wording can be improved to better guarantee interoperation.
These are mostly errors of omission that allow interoperability gaps to
arise due to subtleties and ambiguities in the original specification of
the COPY operation in <xref target="RFC7862"/>.</t>
      <section anchor="executive-summary">
        <name>Executive Summary</name>
        <t>This document addresses several areas where the copy offload specification
in <xref target="RFC7862"/> has shown to be insufficient to ensure good interoperability:</t>
        <ul spacing="normal">
          <li>
            <t>The specification does not clearly state which copy offload operations
are mandatory-to-implement for servers supporting synchronous versus
asynchronous copy (<xref target="sec-sync-v-async"/>).</t>
          </li>
          <li>
            <t>Multiple issues affect copy stateids, including
inconsistent terminology (<xref target="sec-stateid-terms"/>),
race conditions between operations (<xref target="sec-reply-race"/>),
and
unclear lifetime requirements (<xref target="sec-lifetime"/>).</t>
          </li>
          <li>
            <t>Insufficient guidance exists for when callback services should return
specific status codes (<xref target="sec-cb-offload-status"/>),
which status codes are valid for reporting
completion (<xref target="sec-completion-status"/>),
and
whether callbacks are required after cancellation
(<xref target="sec-cancel-implementation"/>).</t>
          </li>
          <li>
            <t>Several operations lack clarity, including the meaning of "optional"
fields in OFFLOAD_STATUS (<xref target="sec-status-implementation"/>),
permission for short COPY results (<xref target="sec-short-copy-results"/>),
and
requirements for polling when callbacks are lost
(<xref target="sec-completion-reliability"/>).</t>
          </li>
          <li>
            <t>The description of the FATTR4_CLONE_BLKSIZE attribute lacks essential
details about units, semantics, and scope (<xref target="sec-fattr4-clone-blksize"/>).</t>
          </li>
          <li>
            <t>No guidance exists for handling asynchronous copies during server
shutdown or client state recovery after server restart
(<xref target="sec-server-shutdown"/>).</t>
          </li>
          <li>
            <t>Missing recommendations for denial-of-service mitigations specific
to copy offload operations (<xref target="sec-security-considerations"/>).</t>
          </li>
        </ul>
      </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?>

<t>This document is Informative. However, it utilizes BCP14 compliance
keywords in two ways:</t>
      <ul spacing="normal">
        <li>
          <t>As part of quotations of Normative RFCs, or</t>
        </li>
        <li>
          <t>As part of suggested improvements to Normative language found in
Normative RFCs.</t>
        </li>
      </ul>
      <t>These BCP14 keyword usages are Informative only.</t>
    </section>
    <section anchor="sec-sync-v-async">
      <name>Synchronous versus Asynchronous COPY</name>
      <t>The NFSv4.2 protocol is designed so that an NFSv4.2 server
is considered protocol compliant whether it implements the COPY
operation or not. This means that NFSv4.2 server implementers
are free to not implement COPY.</t>
      <t>If implementers choose to provide it, the COPY operation comes
in two distinct flavors:</t>
      <ul spacing="normal">
        <li>
          <t>synchronous, where the server reports the final status of the
operation directly in the response to the client's COPY request</t>
        </li>
        <li>
          <t>asynchronous, where the server agrees to report the final status
of the operation at a later time via a callback operation</t>
        </li>
      </ul>
      <t><xref target="RFC7862"/> does not take a position on whether a client or server
is mandated to implement either or both forms of COPY, though it
does clearly state that to support inter-server copy, asynchronous
copy is mandatory-to-implement.</t>
      <t>The implementation requirements for these two forms of copy offload
are quite distinct from each other. Some implementers have chosen
to avoid the more complex asynchronous form of COPY.</t>
      <t>However, NFS clients must be able to detect what an NFS server
provides in order to fall back quickly and gracefully when the copy
offload facility of their choice is not available.</t>
      <section anchor="detecting-support-for-copy">
        <name>Detecting Support For COPY</name>
        <t><xref section="4.1.2" sectionFormat="of" target="RFC7862"/> states:</t>
        <ul empty="true">
          <li>
            <t>Inter-server copy, intra-server copy, and intra-server clone are each
<bcp14>OPTIONAL</bcp14> features in the context of server-side copy.  A server may
choose independently to implement any of them.  A server implementing
any of these features may be <bcp14>REQUIRED</bcp14> to implement certain
operations.  Other operations are <bcp14>OPTIONAL</bcp14> in the context of a
particular feature (see Table 5 in Section 13) but may become
<bcp14>REQUIRED</bcp14>, depending on server behavior.  Clients need to use these
operations to successfully copy a file.</t>
          </li>
        </ul>
        <t><xref target="RFC7862"/> distinguishes between implementations that support
inter-server or intra-server copy, but does not differentiate
between implementations that support synchronous versus asynchronous
copy.</t>
        <t>To interoperate successfully, a client and server must be able
to determine which forms of COPY are implemented and fall back to
a normal READ/WRITE-based copy when necessary. The following
additional text can make this more clear:</t>
        <ul empty="true">
          <li>
            <t>Given the operation of the signaling in the ca_synchronous field
as described in <xref section="15.2.3" sectionFormat="of" target="RFC7862"/>, an implementation
that supports the NFSv4.2 COPY operation <bcp14>MUST</bcp14> support synchronous
copy and <bcp14>MAY</bcp14> support asynchronous copy.</t>
          </li>
        </ul>
      </section>
      <section anchor="mandatory-to-implement-operations">
        <name>Mandatory-To-Implement Operations</name>
        <t>The synchronous form of copy offload does not need the client or
server to implement the NFSv4.2 OFFLOAD_CANCEL, OFFLOAD_STATUS, or
CB_OFFLOAD operations.</t>
        <t>Moreover, the COPY_NOTIFY operation is required only when an
implementation provides inter-server copy offload. Thus a minimum
viable synchronous-only copy implementation can get away with
implementing only the COPY operation and can leave the other
three operations mentioned here unimplemented.</t>
        <t>The asynchronous form of copy offload is not possible without
the implementation of CB_OFFLOAD, and not reliable without the
implementation of OFFLOAD_STATUS. <xref section="4.1.2" sectionFormat="of" target="RFC7862"/>
ties the requirement to implement these operations to the
condition that the server's COPY operation returns a stateid,
rather than directly to declared support for asynchronous COPY.
Tying the requirement to the declared capability instead can
make this requirement clearer:</t>
        <ul empty="true">
          <li>
            <t>When an NFS server implementation provides an asynchronous copy
capability, it <bcp14>MUST</bcp14> implement the OFFLOAD_CANCEL and OFFLOAD_STATUS
operations, and <bcp14>MUST</bcp14> implement the CB_OFFLOAD callback operation.</t>
          </li>
        </ul>
      </section>
    </section>
    <section anchor="copy-stateids">
      <name>Copy stateIDs</name>
      <t>There are a number of areas where <xref target="RFC7862"/> is mute or unclear on
the details of copy stateids. We start by defining some terms.</t>
      <section anchor="sec-stateid-terms">
        <name>Terminology</name>
        <t>An NFSv4 stateid is a fixed-length blob of data (a hash, if you will)
that represents operational state known to both an NFSv4 client and
server. A stateid can represent open file state, file lock state, or
a delegation.</t>
        <t><xref target="RFC7862"/> introduces a new category of stateid that it calls a
"copy stateid". That document lacks a specific definition of this
term. The term is applied to at least two different usages of a
stateid, neither of which can be used for the other use, and
neither of which can be used for existing categories of stateid
(open, lock, and delegation).</t>
        <t><xref target="RFC7862"/> refers to what is returned in cnr_stateid result of a
COPY_NOTIFY response (<xref section="15.3.2" sectionFormat="of" target="RFC7862"/>)
and what is to be used as the ca_src_stateid argument in a COPY
request (<xref section="15.2.2" sectionFormat="of" target="RFC7862"/>) as "a copy stateid":</t>
        <ul empty="true">
          <li>
            <t>The cnr_stateid is a copy stateid that uniquely describes the state
needed on the source server to track the proposed COPY.</t>
          </li>
        </ul>
        <t><xref section="15.2.3" sectionFormat="of" target="RFC7862"/> refers to what is returned in the
wr_callback_id field of a COPY response as a "copy stateid":</t>
        <ul empty="true">
          <li>
            <t>The wr_callback_id stateid is termed a "copy stateid" in this context.</t>
          </li>
        </ul>
        <t>A field named wr_callback_id appears in the WRITE_SAME response
for the same purpose, but <xref section="15.12.3" sectionFormat="of" target="RFC7862"/> avoids
referring to this as a "copy stateid". It also appears as part of
the argument of a CB_OFFLOAD request just like COPY's wr_callback_id.
It is not referred to as a "copy stateid" in that section.</t>
        <t><xref section="4.8" sectionFormat="of" target="RFC7862"/> is entitled "Copy Offload Stateids",
and states:</t>
        <ul empty="true">
          <li>
            <t>A server may perform a copy offload operation asynchronously.  An
asynchronous copy is tracked using a copy offload stateid.  Copy
offload stateids are included in the COPY, OFFLOAD_CANCEL,
OFFLOAD_STATUS, and CB_OFFLOAD operations.</t>
          </li>
        </ul>
        <t>The term "copy offload stateid" is not used anywhere else in <xref target="RFC7862"/>,
therefore it is unclear whether this section refers only to the values
that can appear in a wr_stateid field, or if it refers to all copy
stateids.</t>
        <t>Note also that <xref section="15.8.3" sectionFormat="of" target="RFC7862"/> does not refer to
the oca_stateid argument of an OFFLOAD_CANCEL request by any
special name, nor does it restrict the category of stateid
that may appear in this argument.
Likewise for the osa_stateid argument of an OFFLOAD_STATUS request
(<xref section="15.9.3" sectionFormat="of" target="RFC7862"/>)
and the coa_stateid argument of a CB_OFFLOAD request
(<xref section="16.1.3" sectionFormat="of" target="RFC7862"/>).</t>
        <t>To alleviate this confusion, it is appropriate to construct
definitions for the specific usages of stateids that represent
the state of ongoing offloaded operations. Perhaps the following
might be helpful:</t>
        <dl>
          <dt>copy stateid:</dt>
          <dd>
            <t>A stateid that uniquely and globally describes the state
needed on the source server to track a COPY operation.
A copy stateid begins its lifetime when an NFS server forms
the response to a COPY_NOTIFY operation.</t>
          </dd>
          <dt>offload stateid:</dt>
          <dd>
            <t>A stateid that uniquely describes the completion state of an
offloaded operation (either WRITE_SAME or COPY).</t>
          </dd>
        </dl>
      </section>
      <section anchor="use-of-delegation-stateids">
        <name>Use of Delegation Stateids</name>
        <t>According to <xref section="15.2.1" sectionFormat="of" target="RFC7862"/>:</t>
        <ul empty="true">
          <li>
            <t>The ca_dst_stateid <bcp14>MUST</bcp14> refer to a stateid that is valid for a WRITE
operation and follows the rules for stateids in Sections 8.2.5 and
18.32.3 of <xref target="RFC8881"/>.  For an inter-server copy, the ca_src_stateid
<bcp14>MUST</bcp14> be the cnr_stateid returned from the earlier COPY_NOTIFY
operation, while for an intra-server copy ca_src_stateid <bcp14>MUST</bcp14> refer
to a stateid that is valid for a READ operation and follows the rules
for stateids in Sections 8.2.5 and 18.22.3 of <xref target="RFC8881"/>.</t>
          </li>
        </ul>
        <t>The first sentence appears to allow the use of delegation stateids,
while the second seems to clearly exclude the use of delegation stateids.
Since the specification does not describe how a server needs to respond
to operations that conflict with delegation stateids, one must assume
that the first sentence is incorrect.</t>
        <t>In terms of implementation guidance, in light of types of open permitted
by <xref target="RFC9754"/>, in particular, OPEN4_SHARE_ACCESS_WANT_OPEN_XOR_DELEGATION,
OPEN operations performed to acquire stateids for a COPY operation might
receive only a delegation stateid. When preparing for a COPY operation,
NFSv4 clients need to indicate that a delegation is not wanted.</t>
      </section>
      <section anchor="cnrleasetime">
        <name>cnr_lease_time</name>
        <t><xref section="15.3.3" sectionFormat="of" target="RFC7862"/> states that the copy stateid returned
by COPY_NOTIFY is valid for <tt>cnr_lease_time</tt> seconds, as chosen by
the source server. A value of zero indicates an infinite lease. To
renew the copy lease, the client resends the same COPY_NOTIFY request
to the source server before the lease expires.</t>
        <t>The <tt>cnr_lease_time</tt> value is not propagated to the destination
server. The destination server therefore has no direct knowledge of
the deadline by which it must begin reading from the source. Instead,
the source server enforces the deadline by revoking the copy stateid
once the lease expires, causing any subsequent read attempt by the
destination to fail with NFS4ERR_PARTNER_NO_AUTH. The purpose of
<tt>cnr_lease_time</tt> is thus to allow the source server to bound the
window during which it must hold resources for a copy that may never
start, not to coordinate timing with the destination.</t>
        <t>The Linux NFS server implements a periodic cleanup of expired copy
stateids. The Linux NFS client does not currently exercise the
NFS4ERR_PARTNER_NO_AUTH recovery path.</t>
      </section>
      <section anchor="use-of-offload-stateids-as-a-completion-cookie">
        <name>Use of Offload Stateids As A Completion Cookie</name>
        <t>As implementation of copy offload proceeds, developers face
a number of questions regarding the use of copy stateids to
report operational completion.</t>
        <t><xref section="4.8" sectionFormat="of" target="RFC7862"/> states that a copy offload stateid's seqid
<bcp14>MUST NOT</bcp14> be zero. Unlike ordinary open or lock stateids, there is no
defined mechanism for the seqid of a copy offload stateid to be
incremented: the stateid is created by the COPY response and freed
when the client replies to CB_OFFLOAD or issues OFFLOAD_CANCEL. The
seqid <bcp14>SHOULD</bcp14> be set to 1 at creation and left unchanged thereafter.
Peers <bcp14>SHOULD</bcp14> match copy offload stateids using the <tt>other</tt> field
only, since there is no state transition that would cause the seqid to
change.</t>
        <t>A server <bcp14>MUST NOT</bcp14> re-use a copy offload stateid for a new operation
while the original stateid is still active. Once freed — either by a
client reply to CB_OFFLOAD or by OFFLOAD_CANCEL — the server <bcp14>MAY</bcp14>
re-use the stateid value for a subsequent operation.</t>
        <t>The client's callback service must remember a copy offload stateid
from the time it appears in a COPY response until the corresponding
CB_OFFLOAD has been received and replied to. The callback service is
not required to remember stateids after the CB_OFFLOAD reply has
been sent.</t>
        <t>When the client's callback service receives a CB_OFFLOAD for a
stateid it does not recognize, it returns NFS4ERR_BAD_STATEID. This
can occur if the CB_OFFLOAD arrives before the matching COPY response
has been processed; <xref target="sec-reply-race"/> describes how the callback
service should handle that race. If the callback service has
definitively determined that the stateid is unknown, the server <bcp14>SHOULD</bcp14>
treat the NFS4ERR_BAD_STATEID reply as authorization to purge the
copy offload stateid, as described in <xref target="sec-cb-offload-status"/>.
There is no open state on the NFSv4 server to recover in this
situation.</t>
      </section>
      <section anchor="sec-reply-race">
        <name>COPY Reply Races With CB_OFFLOAD Request</name>
        <t>Due to the design of the NFSv4.2 COPY and COPY_OFFLOAD
operations, an NFS client's callback service cannot recognize
a copy stateid presented by a CB_OFFLOAD request until after
the client has received and processed the COPY response. This
COPY response both confirms that an asynchronous copy
operation has started and provides the copy stateid. Under
some conditions, the client may process the CB_OFFLOAD request
before processing the matching COPY reply.</t>
        <t>There are a few alternatives to consider when designing the
client callback service implementation of the CB_OFFLOAD
operation. Among other designs, client implementers might
choose to:</t>
        <ul spacing="normal">
          <li>
            <t>Maintain a cache of unmatched CB_OFFLOAD requests in the
expectation of a matching COPY response arriving imminently.
(Danger of accruing unmatched copy stateids over time).</t>
          </li>
          <li>
            <t>Have CB_OFFLOAD return NFS4ERR_DELAY if the copy stateid
is not recognized. (Danger of infinite looping).</t>
          </li>
          <li>
            <t>Utilize a referring call list contained in the CB_SEQUENCE
in the same COMPOUND (as described in
<xref section="20.9.3" sectionFormat="of" target="RFC8881"/>) to determine whether an
ingress CB_OFFLOAD is likely to match a COPY operation the
client sent previously.</t>
          </li>
        </ul>
        <t>While the third alternative might appear to be the most
bullet-proof, there are still issues with it:</t>
        <ul spacing="normal">
          <li>
            <t>There is no normative requirement in <xref target="RFC8881"/> or <xref target="RFC7862"/>
that a server implement referring call lists, and it is known
that some popular server implementations in fact do not
implement them. Thus a client callback service cannot depend
on a referring call list being available.</t>
          </li>
          <li>
            <t>Client implementations must take care to place no more than
one non-synchronous COPY operation per COMPOUND. If there are
any more than one, then the referring call list becomes useless
for disambiguating CB_OFFLOAD requests.</t>
          </li>
        </ul>
        <t>The authors recommend that the implementation notes for the
CB_OFFLOAD operation contain appropriate and explicit guidance
for tackling this race, rather than a simple reference to
<xref target="RFC8881"/>.</t>
      </section>
      <section anchor="sec-lifetime">
        <name>Lifetime Requirements</name>
        <t>An NFS server that implements only synchronous copy does not
require the stricter COPY stateid lifetime requirements described
in <xref section="4.8" sectionFormat="of" target="RFC7862"/>. A stateid used with a synchronous
copy lives only until the COPY operation has completed.</t>
        <t>Regarding asynchronous copy offload,
the second paragraph of <xref section="4.8" sectionFormat="of" target="RFC7862"/> states:</t>
        <ul empty="true">
          <li>
            <t>A copy offload stateid will be valid until either (A) the client or
server restarts or (B) the client returns the resource by issuing an
OFFLOAD_CANCEL operation or the client replies to a CB_OFFLOAD
operation.</t>
          </li>
        </ul>
        <t>This paragraph is unclear about what "client restart" means, at least
in terms of what specific actions a server should take and when, how
long a COPY stateid is required to remain valid, and how a client
needs to act during state recovery. A stronger statement about
COPY stateid lifetime can improve the guarantee of interoperability:</t>
        <ul empty="true">
          <li>
            <t>When a COPY stateid is used for an asynchronous copy, an NFS
server <bcp14>MUST</bcp14> retain the COPY stateid, except as follows below.
An NFS server <bcp14>MAY</bcp14> invalidate and purge a COPY stateid in the
following circumstances:</t>
            <t>o The server instance restarts.</t>
            <t>o The server expires the owning client's lease.</t>
            <t>o The server receives an EXCHANGE_ID or DESTROY_CLIENTID request
  from the owning client that results in the destruction of that
  client's lease.</t>
            <t>o The server receives an OFFLOAD_CANCEL request from the owning
  client that matches the COPY stateid.</t>
            <t>o The server receives a reply to a CB_OFFLOAD request from the
  owning client that matches the COPY stateid.</t>
          </li>
        </ul>
        <t>Implementers have found the following behavior to work well for
clients when recovering state after a server restart:</t>
        <ul empty="true">
          <li>
            <t>When an NFSv4 client discovers that a server instance has restarted,
it must recover state associated with files on that server, including
state that manages offloaded copy operations. When an NFS server
restart is detected, the client purges existing COPY state and
redrives its incompleted COPY requests from their beginning. No
other recovery is needed for pending asynchronous copy operations.</t>
          </li>
        </ul>
      </section>
    </section>
    <section anchor="status-codes-their-meanings-and-their-usage">
      <name>Status Codes, Their Meanings, and Their Usage</name>
      <t><xref target="RFC7862"/> specifies the use of certain status codes for use with copy
offload operations but provides insufficient guidance on when and how
these codes should be used, particularly for the CB_OFFLOAD callback
operation. The lack of clarity around error handling creates
interoperability risks, as client and server implementers may make
different assumptions about compliant behavior.</t>
      <section anchor="sec-cb-offload-status">
        <name>Status Codes for the CB_OFFLOAD Operation</name>
        <t><xref section="16.1.3" sectionFormat="of" target="RFC7862"/> describes the CB_OFFLOAD command, but
provides no information, normative or otherwise, about how the NFS
client's callback service is to use CB_OFFLOAD's response status codes. The set
of permitted status codes is listed in <xref section="11.3" sectionFormat="of" target="RFC7862"/>.
The usual collection of status codes related to compound structure
and session parameters are available.</t>
        <t>However, Section 11.3 also lists NFS4ERR_BADHANDLE, NFS4ERR_BAD_STATEID,
and NFS4ERR_DELAY, but <xref section="16.1.3" sectionFormat="of" target="RFC7862"/> does not give any
direction about when an NFS client's callback service should return them.
In a protocol specification, it is usual practice to describe server
responses to a malformed request, but that is entirely missing in that
section of <xref target="RFC7862"/>.</t>
        <section anchor="nfs4errbadhandle">
          <name>NFS4ERR_BADHANDLE</name>
          <t><xref section="15.1.2.1" sectionFormat="of" target="RFC8881"/> defines NFS4ERR_BADHANDLE this way:</t>
          <ul empty="true">
            <li>
              <t>Illegal NFS filehandle for the current server. The current filehandle
failed internal consistency checks.</t>
            </li>
          </ul>
          <t>There is no filesystem on an NFS client to determine whether a
filehandle is valid, thus this definition of NFS4ERR_BADHANDLE is not
sensible for the CB_OFFLOAD operation.</t>
          <t>The CB_RECALL operation might have been the model for the CB_OFFLOAD
operation. <xref section="20.2.3" sectionFormat="of" target="RFC8881"/> states:</t>
          <ul empty="true">
            <li>
              <t>If the handle specified is not one for which the client holds a
delegation, an NFS4ERR_BADHANDLE error is returned.</t>
            </li>
          </ul>
          <t>Thus, if the coa_fh argument specifies a filehandle for which the
NFS client currently has no pending copy operation, the NFS client's
callback service returns the status code NFS4ERR_BADHANDLE. The
protocol specification does not mandate that the NFS client's
callback service remember filehandles after a copy operation has
completed.</t>
          <t>Per <xref section="4.8" sectionFormat="of" target="RFC7862"/>, a copy offload stateid is freed when
the client replies to a CB_OFFLOAD operation. Any reply, including
an error status, constitutes such a reply. The NFS server <bcp14>SHOULD</bcp14>
therefore purge the copy offload stateid upon receiving
NFS4ERR_BADHANDLE from the callback service, since there is no
recovery action available for this permanent error.</t>
          <t>The authors recommend that <xref section="16.1.3" sectionFormat="of" target="RFC7862"/> should be
updated to describe this use of NFS4ERR_BADHANDLE.</t>
        </section>
        <section anchor="nfs4errbadstateid">
          <name>NFS4ERR_BAD_STATEID</name>
          <t><xref section="15.1.5.2" sectionFormat="of" target="RFC8881"/> states that NFS4ERR_BAD_STATEID means
that:</t>
          <ul empty="true">
            <li>
              <t>A stateid does not properly designate any valid state.</t>
            </li>
          </ul>
          <t>In the context of a CB_OFFLOAD operation, "valid state" refers to
either the coa_stateid argument, which is a copy stateid, or the
wr_callback_id argument, which is a copy offload stateid.</t>
          <t>If the NFS client's callback service does not recognize the stateid
contained in the coa_stateid argument, the NFS client's callback
service responds with a status code of NFS4ERR_BAD_STATEID.</t>
          <t>The NFS client is made aware of the copy offload stateid by a response
to a COPY operation. If the CB_OFFLOAD request arrives before the
COPY response, the NFS client's callback service will not recognize that
copy offload stateid.</t>
          <ul spacing="normal">
            <li>
              <t>The NFS server might have provided a referring call in the CB_SEQUENCE
operation included in the COMPOUND with the CB_OFFLOAD (see
<xref section="2.10.6.3" sectionFormat="of" target="RFC8881"/>). In that case the NFS client's
callback service waits for the matching COPY response before taking
further action.</t>
            </li>
            <li>
              <t>If the NFS server provided referring call information but the NFS
client can not find a matching pending COPY request, or if the NFS
server did not provide referring call information, the NFS client's
callback service may proceed immediately.</t>
            </li>
          </ul>
          <t>Once the NFS client's callback service is ready to proceed, it can
resolve whether the copy offload stateid contained in the coa_stateid
argument matches a currently pending copy operation. If it does not,
the NFS client's callback service responds with a status code of
NFS4ERR_BAD_STATEID.</t>
          <t>Per <xref section="4.8" sectionFormat="of" target="RFC7862"/>, a copy offload stateid is freed when
the client replies to a CB_OFFLOAD operation. The NFS server <bcp14>SHOULD</bcp14>
therefore purge the copy offload stateid upon receiving
NFS4ERR_BAD_STATEID from the callback service, as the client has
indicated it cannot correlate the stateid with any pending operation.</t>
          <t>The authors recommend that <xref section="16.1.3" sectionFormat="of" target="RFC7862"/> should be
updated to describe this use of NFS4ERR_BAD_STATEID.</t>
        </section>
        <section anchor="nfs4errdelay">
          <name>NFS4ERR_DELAY</name>
          <t><xref section="15.1.1.3" sectionFormat="of" target="RFC8881"/> has this to say about NFS4ERR_DELAY:</t>
          <ul empty="true">
            <li>
              <t>For any of a number of reasons, the replier could not process this
operation in what was deemed a reasonable time. The client should wait
and then try the request with a new slot and sequence value.</t>
            </li>
          </ul>
          <t>When an NFS client's callback service does not recognize the copy
offload stateid in the wr_callback_id argument but the NFS server has
not provided referring call information, an appropriate response
to that situation is for the NFS client's callback service
to respond with a status code of NFS4ERR_DELAY.</t>
          <t>The NFS server should retry the CB_OFFLOAD operation only a limited
number of times:</t>
          <ul spacing="normal">
            <li>
              <t>The NFS client can subsequently poll for the completion status
of the copy operation using the OFFLOAD_STATUS operation.</t>
            </li>
            <li>
              <t>A buggy or malicious NFS client callback service might always return
an NFS4ERR_DELAY status code, resulting in an infinite loop if the
NFS server never stops retrying.</t>
            </li>
          </ul>
          <t>The NFS server is not permitted to purge the copy offload stateid if
the CB_OFFLOAD status code is NFS4ERR_DELAY.</t>
          <t>The authors recommend that <xref section="16.1.3" sectionFormat="of" target="RFC7862"/> should be
updated to describe this use of NFS4ERR_DELAY.</t>
        </section>
      </section>
      <section anchor="sec-completion-status">
        <name>Status Codes for the OFFLOAD_CANCEL and OFFLOAD_STATUS Operations</name>
        <t>The NFSv4.2 OFFLOAD_STATUS and OFFLOAD_CANCEL operations both list
NFS4ERR_COMPLETE_ALREADY as a permitted status code. However, it
is not otherwise mentioned or defined in <xref target="RFC7862"/>. <xref target="RFC7863"/>
defines a value of 10054 for that status code, but is not otherwise
forthcoming about what its purpose is.</t>
        <t>We find a definition of NFS4ERR_COMPLETE_ALREADY in
<xref section="15.1.9.1" sectionFormat="of" target="RFC8881"/>. The definition is directly related to
the new-to-NFSv4.1 RECLAIM_COMPLETE operation, but is otherwise not
used by other operations.</t>
        <t>The authors recommend removing NFS4ERR_COMPLETE_ALREADY from the
list of permissible status codes for the OFFLOAD_CANCEL and
OFFLOAD_STATUS operations.</t>
      </section>
      <section anchor="status-codes-returned-for-completed-asynchronous-copy-operations">
        <name>Status Codes Returned for Completed Asynchronous Copy Operations</name>
        <t>Once an asynchronous copy operation is complete,
the NFSv4.2 OFFLOAD_STATUS response and the NFSv4.2 CB_OFFLOAD request
can both report a status code that reflects the success or failure of
the copy. This status code is reported in osr_complete field of the
OFFLOAD_STATUS response, and the coa_status field of the CB_OFFLOAD
request.</t>
        <t>Both fields have a type of nfsstat4. Typically an NFSv4 protocol
specification will constrain the values that are permitted in a
field that contains an operation status code, but <xref target="RFC7862"/> does
not appear to do so. Implementers might assume that the list of
permitted values in these two fields is the same as the COPY
operation itself; that is:</t>
        <artwork><![CDATA[
 +----------------+--------------------------------------------------+
 | COPY           | NFS4ERR_ACCESS, NFS4ERR_ADMIN_REVOKED,           |
 |                | NFS4ERR_BADXDR, NFS4ERR_BAD_STATEID,             |
 |                | NFS4ERR_DEADSESSION, NFS4ERR_DELAY,              |
 |                | NFS4ERR_DELEG_REVOKED, NFS4ERR_DQUOT,            |
 |                | NFS4ERR_EXPIRED, NFS4ERR_FBIG,                   |
 |                | NFS4ERR_FHEXPIRED, NFS4ERR_GRACE, NFS4ERR_INVAL, |
 |                | NFS4ERR_IO, NFS4ERR_ISDIR, NFS4ERR_LOCKED,       |
 |                | NFS4ERR_MOVED, NFS4ERR_NOFILEHANDLE,             |
 |                | NFS4ERR_NOSPC, NFS4ERR_OFFLOAD_DENIED,           |
 |                | NFS4ERR_OLD_STATEID, NFS4ERR_OPENMODE,           |
 |                | NFS4ERR_OP_NOT_IN_SESSION,                       |
 |                | NFS4ERR_PARTNER_NO_AUTH,                         |
 |                | NFS4ERR_PARTNER_NOTSUPP, NFS4ERR_PNFS_IO_HOLE,   |
 |                | NFS4ERR_PNFS_NO_LAYOUT, NFS4ERR_REP_TOO_BIG,     |
 |                | NFS4ERR_REP_TOO_BIG_TO_CACHE,                    |
 |                | NFS4ERR_REQ_TOO_BIG, NFS4ERR_RETRY_UNCACHED_REP, |
 |                | NFS4ERR_ROFS, NFS4ERR_SERVERFAULT,               |
 |                | NFS4ERR_STALE, NFS4ERR_SYMLINK,                  |
 |                | NFS4ERR_TOO_MANY_OPS, NFS4ERR_WRONG_TYPE         |
 +----------------+--------------------------------------------------+
]]></artwork>
        <t>However, a number of these do not make sense outside the context of
a forward channel NFSv4 COMPOUND operation, including:</t>
        <ul empty="true">
          <li>
            <t>NFS4ERR_BADXDR,
NFS4ERR_DEADSESSION,
NFS4ERR_OP_NOT_IN_SESSION,
NFS4ERR_REP_TOO_BIG,
NFS4ERR_REP_TOO_BIG_TO_CACHE,
NFS4ERR_REQ_TOO_BIG,
NFS4ERR_RETRY_UNCACHED_REP,
NFS4ERR_TOO_MANY_OPS</t>
          </li>
        </ul>
        <t>Some are temporary conditions that can be retried by the NFS server
and therefore do not make sense to report as a copy completion status:</t>
        <ul empty="true">
          <li>
            <t>NFS4ERR_DELAY,
NFS4ERR_GRACE,
NFS4ERR_EXPIRED</t>
          </li>
        </ul>
        <t>Some report an invalid argument or file object type, or some other
operational set up issue that should be reported only via the status
code of the COPY operation:</t>
        <ul empty="true">
          <li>
            <t>NFS4ERR_BAD_STATEID,
NFS4ERR_DELEG_REVOKED,
NFS4ERR_INVAL,
NFS4ERR_ISDIR,
NFS4ERR_FBIG,
NFS4ERR_LOCKED,
NFS4ERR_MOVED,
NFS4ERR_NOFILEHANDLE,
NFS4ERR_OFFLOAD_DENIED,
NFS4ERR_OLD_STATEID,
NFS4ERR_OPENMODE,
NFS4ERR_PARTNER_NO_AUTH,
NFS4ERR_PARTNER_NOTSUPP,
NFS4ERR_ROFS,
NFS4ERR_SYMLINK,
NFS4ERR_WRONG_TYPE</t>
          </li>
        </ul>
        <t>This leaves only a few sensible status codes remaining to report
issues that could have arisen during the offloaded copy:</t>
        <ul empty="true">
          <li>
            <t>NFS4ERR_DQUOT,
NFS4ERR_FHEXPIRED,
NFS4ERR_IO,
NFS4ERR_NOSPC,
NFS4ERR_PNFS_IO_HOLE,
NFS4ERR_PNFS_NO_LAYOUT,
NFS4ERR_SERVERFAULT,
NFS4ERR_STALE</t>
          </li>
        </ul>
        <t>The authors recommend including a section and table that gives
the valid status codes that the osr_complete and coa_status
fields may contain. The status code NFS4_OK (indicating no error
occurred during the copy operation) is not listed but should be
understood to be a valid value for these fields. The meaning for
each of these values is defined in <xref section="15.1" sectionFormat="of" target="RFC8881"/>, or,
for NFSv4.2-specific codes, in <xref section="11.1" sectionFormat="of" target="RFC7862"/>.</t>
        <t>It would also be helpful to implementers to provide guidance about
when these values are appropriate to use, or when they <bcp14>MUST NOT</bcp14> be
used.</t>
      </section>
    </section>
    <section anchor="sec-cancel-implementation">
      <name>OFFLOAD_CANCEL Implementation Notes</name>
      <t>The NFSv4.2 OFFLOAD_CANCEL operation, described in
<xref section="15.8.3" sectionFormat="of" target="RFC7862"/>, is used to terminate an offloaded
copy operation before it completes normally. A CB_OFFLOAD is
not necessary when an offloaded operation completes because of
a cancelation due to CB_OFFLOAD.</t>
      <t>However, the server <bcp14>MUST</bcp14> send a CB_OFFLOAD operation if the
offloaded copy operation completes because of an administrator
action that terminates the copy early.</t>
      <t>In both cases, a subsequent OFFLOAD_STATUS returns the number
of bytes actually copied and a status code of NFS4_OK to
signify that the copy operation is no longer running. The
server should obey the usual lifetime rules for the copy
stateid associated with a canceled asynchronous copy
operation so that an NFS client can determine the status of
the operation as usual.</t>
      <t>The following is a recommended addendum to <xref target="RFC7862"/>:</t>
      <ul empty="true">
        <li>
          <t>When an offloaded copy operation completes, the NFS server sends
a CB_OFFLOAD callback to the requesting client. When an NFS
client cancels an asynchronous copy operation, however, the
server need not send a CB_OFFLOAD notification for the canceled
copy. A client should not depend on receiving completion notification
after it cancels an offloaded copy operation using the OFFLOAD_CANCEL
operation.</t>
          <t>An NFS server is still <bcp14>REQUIRED</bcp14> to send a CB_OFFLOAD notification
if an asynchronous copy operation is terminated by administrator
action.</t>
          <t>For a canceled asynchronous copy operation, CB_OFFLOAD and
OFFLOAD_STATUS report the number of bytes copied and a
completion status of NFS4_OK.</t>
        </li>
      </ul>
    </section>
    <section anchor="sec-status-implementation">
      <name>OFFLOAD_STATUS Implementation Notes</name>
      <t>Paragraph 2 of <xref section="15.9.3" sectionFormat="of" target="RFC7862"/> states:</t>
      <ul empty="true">
        <li>
          <t>If the optional osr_complete field is present, the asynchronous
operation has completed.  In this case, the status value indicates
the result of the asynchronous operation.</t>
        </li>
      </ul>
      <t>The use of the term "optional" can be (and has been) construed to mean
that a server is not required to set that field to one, ever. This
confusion arises from conflating the the term "optional" with the
BCP14 keyword <bcp14>OPTIONAL</bcp14>.</t>
      <t>Moreover, this XDR data item is always present. The protocol's XDR
definition does not permit an NFS server not to include the field
in its response.</t>
      <t>The following text makes it more clear what was originally intended:</t>
      <ul empty="true">
        <li>
          <t>To process an OFFLOAD_STATUS request, an NFS server must first
find an outstanding COPY operation that matches the request's
COPY stateid argument.</t>
          <t>If that COPY operation is still ongoing, the server forms a response
with an osr_complete array containing zero elements, fills in the
osr_count field with the number of bytes processed by the COPY
operation so far, and sets the osr_status field to NFS4_OK.</t>
          <t>If the matching copy has completed but the server has not yet seen
or processed the client's CB_OFFLOAD reply, the server forms a
response with an osr_complete array containing one element which is
set to the final status code of the copy operation. It fills in the
osr_count field with the number of bytes that were processed by the
COPY operation, and sets the osr_status to NFS4_OK.</t>
          <t>If the server can find no copy operation that matches the presented
COPY stateid, the server sets the osr_status field to
NFS4ERR_BAD_STATEID.</t>
        </li>
      </ul>
      <t>Since a single-element osr_complete array contains the status code of
a COPY operation, the specification needs to state explicitly that:</t>
      <ul empty="true">
        <li>
          <t>When a single element is present in the osr_complete array, that
element <bcp14>MUST</bcp14> contain only one of status codes permitted for the
COPY operation (see <xref section="11.2" sectionFormat="of" target="RFC7862"/>) or NFS4_OK.</t>
        </li>
      </ul>
    </section>
    <section anchor="sec-copy-implementation">
      <name>COPY Implementation Notes</name>
      <section anchor="sec-short-copy-results">
        <name>Short COPY results</name>
        <t>When a COPY request takes a long time, an NFS server must
ensure it can continue to remain responsive to other requests.
To prevent other requests from blocking, an NFS server
implementation might, for example, notice that a COPY operation
is taking longer than a few seconds and terminate it early.</t>
        <t><xref section="15.2.3" sectionFormat="of" target="RFC7862"/> states:</t>
        <ul empty="true">
          <li>
            <t>If a failure does occur for a synchronous copy, wr_count will be set
to the number of bytes copied to the destination file before the
error occurred.</t>
          </li>
        </ul>
        <t>This text considers only a failure status and not a short COPY, where
the COPY response contains a byte count shorter than the client's
request, but still returns a final status of NFS4_OK. Both the Linux
and FreeBSD implementations of the COPY operation truncate large COPY
requests in this way. The reason for returning a short COPY result is
that the NFS server has need to break up a long byte range to schedule
its resources more fairly amongst its clients. Usually the purpose of
this truncation is to avoid denial-of-service.</t>
        <t>Including the following text can make a short COPY result explicitly
permissible:</t>
        <ul empty="true">
          <li>
            <t>If a server chooses to terminate a COPY before it has completed
copying the full requested range of bytes, either because of a
pending shutdown request, an administrative cancel, or because
the server wants to avoid a possible denial of service, it <bcp14>MAY</bcp14>
return a short COPY result, where the response contains the
actual number of bytes copied and a final status of NFS4_OK.
In this way, a client can send a subsequent COPY for the
remaining byte range, ensuring that forward progress is made.</t>
          </li>
        </ul>
      </section>
      <section anchor="sec-completion-reliability">
        <name>Asynchronous Copy Completion Reliability</name>
        <t>Often, NFSv4 server implementations do not retransmit backchannel
requests. There are common scenarios where lack of a retransmit can
result in a backchannel request getting dropped entirely. Common
scenarios include:</t>
        <ul spacing="normal">
          <li>
            <t>The server dropped the connection because it lost a forechannel
NFSv4 request and wishes to force the client to retransmit all
of its pending forechannel requests</t>
          </li>
          <li>
            <t>The GSS sequence number window under-flowed</t>
          </li>
          <li>
            <t>A network partition occurred</t>
          </li>
        </ul>
        <t>In these cases, pending NFSv4 callback requests are lost.</t>
        <t>NFSv4 clients and servers can recover when operations such as
CB_RECALL and CB_GETATTR go missing: After a delay, the server
revokes the delegation and operation continues.</t>
        <t>A lost CB_OFFLOAD causes the client's workload to wait
indefinitely for a completion event that will never arrive,
unless that client has a mechanism for probing the pending COPY.</t>
        <t>Typically, polling for completion means the client sends
an OFFLOAD_STATUS request. Note however that Table 5 in
<xref section="13" sectionFormat="of" target="RFC7862"/> labels OFFLOAD_STATUS <bcp14>OPTIONAL</bcp14>.</t>
        <t>Implementers of the SCSI protocol have reported that it is
in fact not possible to make SCSI XCOPY <xref target="XCOPY"/> reliable
without the use of polling. The NFSv4.2 COPY use case seems
no different in this regard.</t>
        <t>The authors recommend the following addendum to <xref target="RFC7862"/>:</t>
        <ul empty="true">
          <li>
            <t>NFSv4 servers are not required to retransmit lost backchannel
requests. If an NFS client implements an asynchronous copy
capability, it <bcp14>MUST</bcp14> implement a mechanism for recovering from
a lost CB_OFFLOAD request. The NFSv4.2 protocol provides
one such mechanism in the form of the OFFLOAD_STATUS operation.</t>
          </li>
        </ul>
        <t>In addition, Table 5 should be updated to make OFFLOAD_STATUS
<bcp14>REQUIRED</bcp14> (i.e., column 3 of the OFFLOAD_STATUS row should
read the same as column 3 of the CB_OFFLOAD row in Table 6).</t>
      </section>
      <section anchor="inter-server-copy-considerations">
        <name>Inter-server Copy Considerations</name>
        <section anchor="managing-foreign-file-handles">
          <name>Managing Foreign File Handles</name>
          <t>A NFSv4.2 COPY operation operates on file handle arguments that
are provided by PUTFH operations that precede the COPY operation
in an NFSv4 COMPOUND, as described in <xref section="15.2.3" sectionFormat="of" target="RFC7862"/>:</t>
          <ul empty="true">
            <li>
              <t>The COPY operation requests that a range in the file specified
by SAVED_FH be copied to a range in the file specified by
CURRENT_FH.</t>
            </li>
          </ul>
          <t>Typically an NFSv4 server performs checking of a file handle
presented by a PUTFH operation. <xref section="18.19" sectionFormat="of" target="RFC8881"/> gives
examples of such checking, which might include access control based
on security policy. In fact, <xref section="15.2" sectionFormat="of" target="RFC8881"/> permits a
long list of possible status codes in response to a PUTFH:</t>
          <ul empty="true">
            <li>
              <t>NFS4ERR_BADHANDLE, NFS4ERR_BADXDR, NFS4ERR_DEADSESSION,
NFS4ERR_DELAY, NFS4ERR_MOVED, NFS4ERR_OP_NOT_IN_SESSION,
NFS4ERR_REP_TOO_BIG, NFS4ERR_REP_TOO_BIG_TO_CACHE,
NFS4ERR_REQ_TOO_BIG, NFS4ERR_RETRY_UNCACHED_REP,
NFS4ERR_SERVERFAULT, NFS4ERR_STALE, NFS4ERR_TOO_MANY_OPS,
NFS4ERR_WRONGSEC</t>
            </li>
          </ul>
          <t>Setting aside status codes having to do with NFSv4 session
management, at least NFS4ERR_BADHANDLE, NFS4ERR_MOVED,
NFS4ERR_STALE, or NFS4ERR_WRONGSEC might be the result of the
server's examination of the presented file handle argument.</t>
          <t>During an inter-server COPY operation, at least one of the file
handle arguments presented via PUTFH is for a file that does not
reside on the server receiving the COPY request. Special
considerations must be taken to avoid treating that foreign file
handle as a local file handle; otherwise the PUTFH operation fails
and the COPY will never be executed. <xref section="15.2.3" sectionFormat="of" target="RFC7862"/>
therefore notes that:</t>
          <ul empty="true">
            <li>
              <t>If a server supports the inter-server copy feature, a PUTFH followed
by a SAVEFH <bcp14>MUST NOT</bcp14> return NFS4ERR_STALE for either operation.
These restrictions do not pose substantial difficulties for servers.
CURRENT_FH and SAVED_FH may be validated in the context of the
operation referencing them and an NFS4ERR_STALE error returned for an
invalid filehandle at that point.</t>
            </li>
          </ul>
          <t>This section appears to permit PUTFH in this scenario to return
NFS4ERR_BADHANDLE, NFS4ERR_MOVED, and NFS4ERR_WRONGSEC by omitting
their mention.</t>
          <t>The Linux NFS server implementation's PUTFH operation, for example,
is likely to return an NFS4ERR_BADHANDLE status code for a file
handle that is foreign to it. A server implementer can reasonably
extrapolate from the above text that other status codes, in addition
to NFS4ERR_STALE, are to be excluded; otherwise inter-server COPY
will not work at all.  However, an explicit BCP14 "<bcp14>MUST NOT</bcp14>" for
NFS4ERR_STALE but not for other likely status code responses
is potentially confusing.</t>
          <t>Further, this NFSv4.2 COPY-related usage of PUTFH re-purposes the
PUTFH operation. In all previous usages of PUTFH, careful checking
of an incoming file handle is a critical part of the mission of the
PUTFH operation. However, if a COPY operation is present in a
COMPOUND, the server must defer assessment of file handle arguments
until it is clear that the client has requested an inter-server
COPY. Because PUTFH is used in nearly every NFSv4 COMPOUND, this is
a significant new burden for servers that implement inter-server
COPY.</t>
          <t>A protocol design that enables more efficient server implementation
might have been the addition of a new operation that enables a client
to provide a file handle that might be expected to fail local
checking on the server, for the sole use of inter-server COPY.
Call this putative operation "PUTFOREIGNFH".</t>
        </section>
      </section>
    </section>
    <section anchor="sec-copy-notify-implementation">
      <name>COPY_NOTIFY Implementation Notes</name>
      <section anchor="ip-addresses-in-a-copynotify-response">
        <name>IP Addresses in a COPY_NOTIFY Response</name>
        <t>The <tt>cnr_source_server</tt> list returned by COPY_NOTIFY contains one or
more <tt>netloc4</tt> network locations (<xref section="4.7" sectionFormat="of" target="RFC7862"/>) that
the source server is willing to accept connections from for the
inter-server copy. The NFS client passes these network locations
unchanged as the <tt>ca_source_server</tt> list in the subsequent COPY
request to the destination server (<xref section="15.2.3" sectionFormat="of" target="RFC7862"/>).</t>
        <t>In practice, the Linux NFS client and server treat the
<tt>cnr_source_server</tt> list as an opaque token: the client passes it
through to the destination without interpretation, and the Linux NFS
server acting as destination does not currently use the listed network
locations to select a connection endpoint. Connection establishment
proceeds using whatever network path is available.</t>
        <t>A source server that needs to direct the destination to a specific
copy protocol or service endpoint can use a URL-type <tt>netloc4</tt> entry
for this purpose (see <xref section="4.6" sectionFormat="of" target="RFC7862"/>). Implementations
that do not support this mechanism <bcp14>SHOULD</bcp14> return at least one
<tt>NL4_NETADDR</tt> entry so that a destination that does consult the list
has a usable address.</t>
      </section>
    </section>
    <section anchor="sec-clone-implementation">
      <name>CLONE Implementation Notes</name>
      <section anchor="sec-fattr4-clone-blksize">
        <name>The FATTR4_CLONE_BLKSIZE Attribute</name>
        <t><xref section="4.1.2" sectionFormat="of" target="RFC7862"/> states that an NFS server that implements
the CLONE operation is required to implement the FATTR4_CLONE_BLKSIZE
attribute:</t>
        <ul empty="true">
          <li>
            <t>If a server supports the CLONE feature, then it <bcp14>MUST</bcp14> support the
CLONE operation and the clone_blksize attribute on any file system on
which CLONE is supported (as either source or destination file).</t>
          </li>
        </ul>
        <t>Although the Linux NFS server implements the NFSv4.2 CLONE operation,
it does not implement FATTR4_CLONE_BLKSIZE.</t>
        <t>The specification has very little to say about what this attribute
conveys. <xref section="12.2.1" sectionFormat="of" target="RFC7862"/> states only:</t>
        <ul empty="true">
          <li>
            <t>The clone_blksize attribute indicates the granularity of a CLONE
operation.</t>
          </li>
        </ul>
        <t>There are no units mentioned in this section. There are several
plausible alternatives: bytes, kilobytes, or even sectors.
<xref target="RFC7862"/> needs to make clear the underlying semantics of this
attribute value.</t>
        <t>There is no mention of what value should be used when the shared
file system does not provide or require a restrictive clone block
size. The Linux NFS client assumes that "0" means no alignment
restrictions; it skips clone alignment checking if clone_blksize
value happens to be zero. That implementation also appears to
tolerate a server that does not return the FATTR4_CLONE_BLKSIZE
attribute at all.</t>
        <t>The change history of draft-ietf-nfsv4-minorversion2 suggests that
at one point, the NFSv4.2 specification contained much more detail
about how FATTR4_CLONE_BLKSIZE was to be used. For example, older
revisions of that draft stated:</t>
        <ul empty="true">
          <li>
            <t>Both cl_src_offset and cl_dst_offset must be aligned to the clone
block size Section 12.2.1. The number of bytes to be cloned must
be a multiple of the clone block size, except in the case in which
cl_src_offset plus the number of bytes to be cloned is equal to
the source file size.</t>
          </li>
        </ul>
        <t><xref section="12" sectionFormat="of" target="RFC7862"/> does not specify whether FATTR4_CLONE_BLKSIZE
is a per-file, per-file system, or per-server attribute. Per-file is
perhaps the most appropriate because some modern file systems can use
different block sizes for different files.</t>
        <t>Note that <xref section="4.1.2" sectionFormat="of" target="RFC7862"/> states that the attribute <bcp14>MUST</bcp14>
be implemented, but <xref section="12.1" sectionFormat="of" target="RFC7862"/> defines this attribute
as <bcp14>RECOMMENDED</bcp14>. This contradiction needs to be rectified.</t>
        <t>An alternative to correcting the missing details is to instead
deprecate the FATTR4_CLONE_BLKSIZE attribute. Server and filesystem
combinations that cannot provide a fast, unrestricted byte-range clone
mechanism would simply not make an NFSv4.2 CLONE operation available to
NFSv4 clients.</t>
        <t>It might be that was the intention of the redaction of the alignment
text from draft-ietf-nfsv4-minorversion2, and the FATTR4_CLONE_BLKSIZE
attribute was simply missed during that edit of the document.</t>
      </section>
    </section>
    <section anchor="sec-server-shutdown">
      <name>Handling NFS Server Shutdown</name>
      <t>Asynchronous copy operations present unique challenges during server
shutdown and restart events. Unlike other NFSv4 operations that typically
complete quickly, asynchronous copies can be long-running operations
that are still in progress when an NFS server needs to shut down.</t>
      <t>Additionally, clients must be able to recover the state of pending
copy operations after a server restart. <xref target="RFC7862"/> does not provide
guidance for either scenario, leaving implementors to guess at
appropriate and safe behavior. This section addresses how servers
should handle ongoing asynchronous copy operations during server
shutdown, and how clients should handle state recovery after detecting
a server restart.</t>
      <section anchor="graceful-shutdown">
        <name>Graceful Shutdown</name>
        <t>This section discusses what happens to ongoing asynchronous copy
operations when an NFS server shuts down due to an administrator
action.</t>
        <t>When an NFS server shuts down, it typically stops accepting work
from the network. However, asynchronous copy is work the NFS server
has already accepted. Normal network corking will not terminate
ongoing work; corking stops only new work from being accepted.</t>
        <t>Thus, as an early part of NFS server shut down processing, the NFS
server <bcp14>SHOULD</bcp14> explicitly terminate ongoing asynchronous copy operations.
This triggers sending CB_OFFLOAD notifications for each terminated
copy operation prior to the backchannel closing down. Each completion
notification shows how many bytes the NFS server successfully copied
before the copy operation was terminated by the shutdown.</t>
        <t>To prevent the destruction of the backchannel while asynchronous
copy operations are ongoing, DESTROY_SESSION <bcp14>SHOULD</bcp14> return
NFS4ERR_BACK_CHAN_BUSY and DESTROY_CLIENTID <bcp14>MUST</bcp14> return
NFS4ERR_CLIENTID_BUSY until pending asynchronous copy operations
have terminated
(see <xref section="18.37" sectionFormat="of" target="RFC8881"/> and <xref section="18.50.3" sectionFormat="of" target="RFC8881"/>).</t>
        <t>Once copy activity has completed, shut down processing can also
proceed to remove all copy completion state (copy stateids, copy
offload stateids, and copy completion status codes).</t>
        <t>An alternative implementation is that ongoing COPY operations are
simply terminated without a CB_OFFLOAD notification. In that case,
NFS clients recognize that the NFS server has restarted, and as part
of their state recovery, they can reissue any COPY operations that
were pending during the previous server epoch, as described in the
next subsection.</t>
        <t>Unlike a synchronous operation such as WRITE or READ, an asynchronous
COPY has already received its initial response: the client holds a
copy offload stateid and cannot make forward progress until it
receives CB_OFFLOAD or determines that the server has restarted.
Sending CB_OFFLOAD before closing the backchannel allows the client to
proceed immediately, rather than waiting until the lease expires or
another indication of server restart arrives. The alternative recovery
path described above is available regardless, but it imposes
additional delay on the client.</t>
      </section>
      <section anchor="client-recovery-actions">
        <name>Client Recovery Actions</name>
        <t>In order to ensure the proper completion of asynchronous COPY
operations that were active during an NFS server restart, clients
need to track these operations and restart them as part of NFSv4
state recovery.</t>
        <t>Per <xref section="4.8" sectionFormat="of" target="RFC7862"/>, a copy offload stateid is invalidated
when the client or server restarts. Upon detecting a server restart,
copy offload stateids from the previous server epoch are no longer
valid; any attempt to use them via OFFLOAD_STATUS or OFFLOAD_CANCEL
will result in an error response from the server.</t>
        <t>As part of NFSv4 state recovery following a server restart, the
client <bcp14>SHOULD</bcp14> reissue any COPY operations that were pending at the
time of the restart. The client is responsible for tracking which
asynchronous COPY operations were in flight and for restarting them
once the server is available and the client has completed the NFSv4
state recovery protocol.</t>
      </section>
    </section>
    <section anchor="sec-security-considerations">
      <name>Security Considerations</name>
      <t>One critical responsibility of an NFS server implementation is
to manage its finite set of resources in a way that minimizes the
opportunity for network actors (such as NFS clients) to maliciously
or unintentionally trigger a denial-of-service scenario.  The authors
recommend the following addendum to <xref section="4.9" sectionFormat="of" target="RFC7862"/>.</t>
      <ul empty="true">
        <li>
          <t>Restricting Copies of Special Files</t>
          <t>Certain files on Unix-based systems act as an infinite source of
data. One example is /dev/null. Another example is the system's
random data generator. Server implementers should recognize
these data sources and prevent unlimited copy operations from
them (or to their sink counterparts).</t>
          <t>Limiting Size of Individual COPY Operations</t>
          <t>NFS server implementations have so far chosen to limit the byte
range of COPY operations, either by setting a fixed limit on the
number of bytes a single COPY can process, where the server
truncates the copied byte range, or by setting a timeout. In
either case, the NFS server returns a short COPY result.</t>
          <t>Client implementations accommodate a short COPY result by sending
a fresh COPY for the remainder of the byte range, until the
full byte range has been processed.</t>
          <t>Limiting the Number of Outstanding Asynchronous COPY Operations</t>
          <t>It is easily possible for NFS clients to send more asynchronous
COPY requests than NFS server resources can handle. For example, a
client could create a large file, and then request multiple copies
of that file's contents.</t>
          <t>A good quality server implementation <bcp14>SHOULD</bcp14> block clients from
starting many COPY operations. The implementation might apply a
fixed per-client limit, a per-server limit, or a dynamic limit
based on available resources. When that limit has been reached,
subsequent COPY requests will receive NFS4ERR_OFFLOAD_NO_REQS
in response until more server resources become available.</t>
          <t>Managing Abandoned COPY State on the Server</t>
          <t>A related issue is how much COPY state can accrue on a server
due to lost CB_OFFLOAD requests. The mandates in <xref target="sec-lifetime"/>
require a server to retain abandoned COPY state indefinitely.
A server can reject new asynchronous COPY requests using
NFS4ERR_OFFLOAD_NO_REQS when there are many abandoned COPY
stateids.</t>
          <t>Considerations For The NFSv4 Callback Service</t>
          <t>There is a network service running on each NFSv4.2 client to
handle CB_OFFLOAD operations. This service might handle only
reverse-direction operations on an existing forward channel
RPC transport, or it could also be available via separate
transport connections from the NFS server.</t>
          <t>The CB_OFFLOAD operation manages stateids that can have a
lifetime longer than a single NFSv4 callback operation. The
client's callback service must take care to prune any cached
state in order to avoid a potential denial of service.</t>
        </li>
      </ul>
      <section anchor="securing-inter-server-copy">
        <name>Securing Inter-server COPY</name>
        <t>To date, there have been no implementations of RPCSEC GSSv3
<xref target="RFC7861"/>, which is mandatory-to-implement for secure
server-to-server copy (see <xref section="4.9" sectionFormat="of" target="RFC7862"/>.</t>
        <t>There are several implementations of RPC-with-TLS <xref target="RFC9289"/>,
including on systems that also implement the NFSv4.2 COPY
operation. There has been some discussion of using TLS to
secure the server-to-server copy mechanism.</t>
        <t>Although TLS is able to provide integrity and confidentiality
of in-flight copy data, the user authentication capability
provided by RPCSEC GSSv3 is still missing. What is still missing
is the ability to pass a capability token. GSSv3 generates a
capability on the source server that is passed through the
client to the destination server to be used against the
source server.</t>
        <t>Both Kerberos context establishment and TLS handshake are one-time
costs per transport connection, not per-operation costs. For
inter-server copy operations, which are long-running by nature, those
setup costs are amortized over the lifetime of the connection and are
unlikely to dominate overall copy performance. The more significant
obstacle to using TLS as a substitute for RPCSEC GSSv3 is the missing
user authentication capability described above, not connection
establishment overhead.</t>
      </section>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>This document requests 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="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="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>
        <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="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>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="RFC7861">
          <front>
            <title>Remote Procedure Call (RPC) Security Version 3</title>
            <author fullname="A. Adamson" initials="A." surname="Adamson"/>
            <author fullname="N. Williams" initials="N." surname="Williams"/>
            <date month="November" year="2016"/>
            <abstract>
              <t>This document specifies version 3 of the Remote Procedure Call (RPC) security protocol (RPCSEC_GSS). This protocol provides support for multi-principal authentication of client hosts and user principals to a server (constructed by generic composition), security label assertions for multi-level security and type enforcement, structured privilege assertions, and channel bindings. This document updates RFC 5403.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7861"/>
          <seriesInfo name="DOI" value="10.17487/RFC7861"/>
        </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="RFC9289">
          <front>
            <title>Towards Remote Procedure Call Encryption by Default</title>
            <author fullname="T. Myklebust" initials="T." surname="Myklebust"/>
            <author fullname="C. Lever" initials="C." role="editor" surname="Lever"/>
            <date month="September" year="2022"/>
            <abstract>
              <t>This document describes a mechanism that, through the use of opportunistic Transport Layer Security (TLS), enables encryption of Remote Procedure Call (RPC) transactions while they are in transit. The proposed mechanism interoperates with Open Network Computing (ONC) RPC implementations that do not support it. This document updates RFC 5531.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9289"/>
          <seriesInfo name="DOI" value="10.17487/RFC9289"/>
        </reference>
        <reference anchor="RFC9754">
          <front>
            <title>Extensions for Opening and Delegating Files in NFSv4.2</title>
            <author fullname="T. Haynes" initials="T." surname="Haynes"/>
            <author fullname="T. Myklebust" initials="T." surname="Myklebust"/>
            <date month="March" year="2025"/>
            <abstract>
              <t>The Network File System v4 (NFSv4) allows a client to both open a file and be granted a delegation of that file. This delegation provides the client the right to authoritatively cache metadata on the file locally. This document presents several extensions for both opening the file and delegating it to the client. This document extends NFSv4.2 (see RFC 7863).</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9754"/>
          <seriesInfo name="DOI" value="10.17487/RFC9754"/>
        </reference>
        <reference anchor="XCOPY" target="https://webstore.ansi.org/standards/incits/ansiincits4082005">
          <front>
            <title>Information Technology - SCSI Primary Commands - 3 (SPC-3)</title>
            <author>
              <organization>INCITS T10</organization>
            </author>
            <date year="2005"/>
          </front>
          <seriesInfo name="ANSI INCITS" value="408-2005"/>
        </reference>
      </references>
    </references>
    <?line 1252?>

<section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>Special thanks to Rick Macklem and Dai Ngo for their insights
and work on implementations of NFSv4.2 COPY.</t>
      <t>The authors are grateful to Bill Baker, Jeff Layton, Greg Marsden,
and Martin Thomson for their input and support.</t>
      <t>Special thanks to
Area Director
Gorry Fairhurst,
NFSV4 Working Group Chairs
Brian Pawlowski
and
Christopher Inacio,
and
NFSV4 Working Group Secretary
Thomas Haynes
for their guidance and oversight.</t>
    </section>
  </back>
  <!-- ##markdown-source:
H4sIAAAAAAAAA8V963YbR5rY/3qKDv3D0i4AWbI8I2s2ykIkJTGmSA1B2ePd
s4duAAWwV41uTHeDNMbrPXmIPECeJY+SJ8l3rVs3KM8k2czZs6YAdHXVV9/9
Oh6PjemKrrQvs6ML293XzafsTVHabLZvO7vJ7mzTFnWVPZ88y44vP/yYXW5t
k3f40dlmW9qNrTr+5+nP8E1hq4U9Mvl83tg7XPLN7M49+sADi7yz67rZv8yK
alUbs6wXVb6BTS2bfNWNF7YcV6v27vl4UW/34yJaaGzdQuOvvjbb4mX2z129
GGVt3XSNXbXw137Df8C6m3y7Lar1v5i2y6vlTV7WFbxnb1sDG/7amGLbvMy6
Ztd2z7766tuvnpm8sTkc5Qc7z+CB7KzqbFPZLrtu8qrdwjuODIJt3dS77QEo
fq9QPDKf7B6+Xr402TgT6OCfCCD67/nlxSn+8cPV2fXpzWz6nv5Vr1ZlnS+N
yXfdbd3g0yaD/612ZcmAuizXefZd3VSFvWs/5UVO39fNOq+KvxCcXmZXdpm9
yzv6Rq8IPtOPFvWu6vAOPlZFBz+dAXxtC+/OphsA8IKXtJu8KF9m9Sd+1z82
dnmbd5NFvelv6vh2t/iUnVvAIvqmqRHR7LLo6mZgf2fV0m4t/L/qb9gQ4khh
u9U/LvClJb5zAtdkTFU3G3jBnQWoZVdvjn//4nfP5M8XL148fQlXDjjX+81T
/+fX8ue3z158q3/+/pvn+Oef8OJe0j7GL/lf9I8ub9a2e5nddt22ffnkyb2d
t3BoOwGcKSZw7CeEfnmzbJ8U1aLo2if4Df/5/KsXgHvf8EJCnGe6R0Cja7u4
reqyXu8BNWbHs7PsQ1Ns8mafHdebDSzbwudfZ49mH47HXz8+4vtWxKH/jeW/
dAMA+Ivjs+tZdv30K/q8RXJqESr6+6PpBbyFf3YEu4EdjnGLvPYSruVlRls2
d7baERSFHohs4Z/dfgu/+QEoA4gve4tfwqd8dfSbf8TLQ8jAx3mzuPWwwx/h
J3A9E/3RE/zgybyp71v7hJ5/As81dlv759ZFd7ubI2Y+8TjxpBgvx7stbpmZ
Sbu1C3i0RNQKLizAIlmnqAefffLFup78dWxqctttSmPG4zGQYds1+QLQ9Pq2
aJE/7fCJbGnbRVPMAdu7WyuX136Z+TUytzrCE35kIl5bK5ueZGcdwAWAAL8F
xEAWtqkB1YmU+DDwktrge/A8xQoIi9AM6KwD0g7Xok3C/1V1l+WZoyyj+57w
qTbFcllaY75AbtnUy90CHzfml1+E/n79FRg9fwNvz7NVvijKotvDRujAdJZs
29TAyOsyA9THj7JFCWfvWgO/auyfd3BhvMO8oq8Bb+G+MgQ+4iQs29SbDPh7
tkJmDE/lsPFbuFLz2i7yXWvpZfRTeugWZIOtgMNUugtZc5QV8Ja7uljyhXTI
+4vOAIhoaVpiDpzf2kp2SZCWHS13jdwSv8dDlK8deCgBApGwWuxHWSVCZA6L
3BfL7pbOWzR04SDHcG1cDfChbneNjTdCQCyaZbbNmw4oObu/hW3dwkNltA2B
IVza67wF/grHjnE2wLcRLhkgKJJa0xGoUEDSO2AfMQahpMM3LuCC5oSyTX0H
L4INArBAjmbrXQ6g7KxFfLBNBBgL9wNrA7q2XbnPbNMADSBW1puiJXnKl1+W
9X3w+JwxaZ1vCa/zpoB1lju6/3Y3B3ZKMEEQ5pt5sd4V9O+C77xuinVR5WWP
FohAYtrCZwKUBjh+8QWoNXaxQ6LIZrsNMuWUtPPlsrFtC69skb3AqwIABjjC
Ij/eh4nfCHcKq9zW9xWDFDbU7lbwY0JA+AiQGbAjW9f1sgchEHxjIOiU6pe1
ZfpelDZvAO4tSl3YXbG4jXfm4NASy4aLQokGUm4/7mrP/Yh6mRBgs7st4g0i
RbuvFrdNXdW7ltTMHS0Tfkpve/TLL61djPHz8d2Yvv/118cT2Pv7XdkV8BJg
SO0Ob3S1souOn6JNA7UC4VaLcodYCKvD37DbAnQyBI9tNoWIUX0JPzXGr1p4
ywhlSr7AG6lAacGjOir3p9engSTK/Rh/L48COOD/7yqCZFYWK8C8jY1IWZ/V
L+VoZ+E9AoYuc2T59mfYekvwJIpeAOrPc9CwELoFMhDAhV25hDd0u6aCd+vV
EjwIoiBY9J2L+Viucsxfy7b5qqMn8Hbv8rJY0suZ9hmkIFi2SFGAObqs+yRe
lqEBG0cO7PbOawtIgCJXHX0Jxy1LRvnMLUyfJmJVADYTUgpupUTILEBzAFwP
0IAobGNB7YS/gZkc1Vv8fV6iLrMqbLkkXnD55s355fTkZnY9vf44CxFk1/a3
gOfbIj4xXyKMB4ndMcMAcgdUdXCnb1hFkG8iCEXogStt65L4dnTnDLcSWGMA
IA/5xpaF0LlACCmdtYqtl+42ezO9vr56fkN2x83r8+9mZ/90muVdB8rHDsi+
pFchuwJFIy/hXUvbgT4Gr5/Xuw6Qu0B51IISDj9YiGhq4XBWd7XC1UAlQkNr
PC8/tcVfFM0v6kHkdpIq5QbIp0WWMkNBFL/ddUvkgPCgSF7mWKj0wE/2glMi
igHioJsHQOPPx7qM8ha8SXiN05wEqXB7YJ8AKIB2xkJ3oO90xVp+oSSHOm99
iGH6ly92iJ9j4ktL/Zo2AdrTVYgK53kF0nJtUZ7YDOxIEq9tdvT+4+z6aMT/
zS4u6e+r0z9+PLs6PcG/Z++m5+fuDyO/mL27/Hh+4v/yTx5fvn9/enHCD8On
WfSROXo//fGI7/no8sP12eXF9PyIxWck5hrrhBLAfws8Cem7NaraokTKXh9/
+J//4+lzEGr/CaTas6dPvwWpxv948fT3z+EfiPX8troCacT/BMzdG1TWgK/C
KkATQBjbostLxECViShQAY5/988ImX95mf3DfLF9+vyVfIAHjj5UmEUfEsz6
n/QeZiAOfDTwGgfN6PME0vF+pz9G/1a4Bx/+w38BkrHZ+OmL//LKpDoH/H3m
jdxJ9q6+t6rWgrJSAkm2eBdwE8RECiRJ9VWwbnRfZ/f5viWtYdqSaok85M+7
uhOchn9d6CvQRoarADM/+nW7W6+BAPHuWRdk1AY88U+WgudAa7sKkQQoKV53
YkQ75B3LNrNdC08xXwwOS2hD1DTrKRywteAz4tW/fNHTNpjg1LxyRgnCF6zk
dQWnaevQEKHfCYMqkHExbcPv3MMK5c4JRLgJJ1bYyCBnglc2gfOAWiY2GAqw
lt8Zv9AvAidE3xUYQZYoEXU6r5Th4gCVs1X0QLa4reuWfo7XA7uGfY2yAdUX
DmBbI4ixBNYNAhZUvRKMpIaRJADtKFBuHR9m+wE/WrHCzQoHyyW4c/+uJfDA
BZoAoqMDD98CTK1ai8z2v2xV2pJVAzvIH95CvgbIEPLxZnp7wU2wlPR7wUsm
O63JSJm7K3L4wGli7oexseuU6i7/BEYNiPS24EutHALkKr6cuozIwzo120z+
9mxBj8Av52DQolTaEOQQAHhd9W59Czdn6L2xIk84Q6YQaeLMnceB6TyK4GZI
grmNpMo9k2JqNvZUmI7IFVHFbTWUjISn8Ahsz6MS2u42B02UTfZsBhgXI+tt
DuQNGAvKCboEyD5n9a5urGimP8dKBL5eAQV7d3ww8C5km13bodzK5+w0AI0H
7Yr7nqfBCI0QgwQOhDgBJ0RpRMgAJ1p8AsCj8FqjXYCeURZhzs4zqhw4Fwij
XNHgyVC5UHfLHbrBYEtsZp7QplBFmclFvgE4E8sAzJtZ8rhkzydPgTPAih4V
CQuQQl+xKzu+evTK5Ak2EBMOP0ZNjtgsXg+so9IoW1kgm8Yb08D5Ovszc35R
s5Cl4LqTLJsqIW7yPawirKfwTuByH2N9Xil0NuHjoScM1vG/gtXcjuAdeKcq
4+OFF7YBpbaCh72KBm+4ZCLzWhue2R22f8YcFiCXy2IHZoe+O3vUAgO+Jmz6
Bp/Sy3n69eMMlGzZGjJUeF43OMoYDGSlVHrUuQWcL2qghuxYsLWyzBzEm9Xa
6BRM6QuwDVtGPiK7nJxFk4RHEeWBPt7CKs7MjSlbRI7wDhPxjroZwh48oON+
ywJM9IZMic6a3/KKAS9Bnz0hE6pDB5KNzjzyrDXwyYVUboTK0SGgro6Ip9LN
e96zpIU8oaObib2hJVzg9OQJRW/Gc/KqEcSJ5iuLe8qb/YSssVWNnitE2nzJ
3gV4nHAJ/WUblBSkUjM3QyZOVPsWlJoqkUoiplAbyclyUuTMbyLuh+Ytkkib
RVq4ZxhPv5k8m3wdcQzkAMkdwRLhJbXeZ9vzP2ekag/cJlI84SJAEtRb95Oe
B4j53Xsnfq7rsYsk+nBky4JoiNdHNpjDRaYbpz2gqiqYEbGG8GTqEzieXhyf
no8SHwFpu8evb+TTkJUY8x7usCZJo7rUDej7Z28ib2Lr/SDO1gH4mES6BlIn
4d96SsQvJBQwTKtis9sY0FKQ/QTQGdMbWLjHyyPyrS1cBKj72T0oGiYKNdBz
Awoh3iM+Cnh6x2oWyW3T3aL+GXAkWqhGrZkUsl0V0JWoE4MiO7pGEYqgR7UF
ngz3We86ctIm50ESdrfC4gwfZQ+Jf5S0zv6j8R1PsodkqyFHMmuoTgHqoVNr
E/6ML3YORtHPnJaqWq0HNDv38HbFXTky8A1KKng0UJaJp6H/C+0TIS7UxfLU
5pmY6706xpKNU3hEFwELW53rRQVGXE4XbjyjCh8mfmWZY/3AeBzGaA6hNPyq
xwCQU7hXk8lKPCWm0Zg26Zbjq4vEIqPBwDIB/fZ1erIij517+eyEmU7DyhBI
gN1mjoJwFXn0o6AXapcdRhmcWxi4KUOZ3WqK6OrAnmQ/2IxcVtl8D78C+4Tc
X6gMk5ua2eN14MwWEzbyZRszFdNUV8a9oB7ws12OS1utwYyYl/UcN0BBpEc5
RhduAd6rbF/vgEzK8rEh7ARzCVQq0j4cbMRostmnSsMRaJmoQRwIYGGzE1Tg
ZCvIN9yiuGbF0Sz6fsR/lzU6uvkDYLQ5wKK0a72Xg5HFyt5nml1Ceqi8kg5S
dHTL8DtzFEL9CBlo3nn/CbtBc+9P54vwsrdoDQKaBTv+ReDdgo3P2hksBreN
8Uoyl0UNUpcF6Y5KzbBlse5WGnXh8NkOtQmxppi54keEyuazz5B7lWNxBIyC
XysvNY8Q6CMCMtOGh+7jBLyNXaHxBYcii4joHjkSqxKLqrlRGLN3m08Xijxn
vz+KFI+vE3b62OBG9CXsS6Tz5K1TbpqFe1verMXZBTyELSENEj9KFJzkPbjg
UR7R3RExLrzM8EBEMuHPGI1AhMF7yn0StaffwCqoaXB0lT6td83C+SCQxzak
QsJXwAVBoMFPxTp9UC37zD2gULlvbpSJ3WDoBrU/ug0XluBryPFYR8PHT9YI
IIFYjpeRPOk8wWIYwTmm8mpMClqmK7IX15mMPu/J7c8ozrfwfLbdNQgktiwi
CD3tgYgj9oYgxRH4mvc2cGJKlMjLtnY7yp3fkji0wy+GoBcUimX/ihZFWXxi
1QgEd3zSiTnrVG/hHQlr6O+FgYEKNp9uEtv0L+JTwpqoUnUlrHdE4ulStKSZ
CJGjEZFSYPqHtjdGrkjJyg+EKyKRXJLpXpEVkcZqESsQmy06YymAk8SyeT9o
vbJcT75gC5tDdQ6NxamVKN/odkjUbzziIf3bseWjoQ0d6b0we6n2LLltSf6I
UIKPEBXg9tAkK+g6VY6rG4/wS+5NaZR1Zlan7vISsIUFKTLpIIqBCKMERhQz
IqN6hW/y1E7BDgSfUxGMuahB8hLy0roRWbxIqcKZQLSm5v7UyE5TVoqoXqW6
leL7HI23Pad8gPhH6h6hFcwvoD23XVMsOuHWPSHMQEAM9EBg8pT3T8w5kNM9
JnA4udd+dpsSslU/cMz8v02gwUKGHTkHVh6g9WjR34EhkCzKHgm4KXtXsNOV
GeJqh/HhkaAOnBo4fsO/qClO0DW7RWe8duHcp1718DqDo5pYKzNO+FCyTLWu
OdRNKG+XkY/rg21uKVEm8kdsivUtOUdubbld7UpgGSF/emleBspbLALJ1wl6
ZF4ekIe/SRrmaRYbyJBI7s7tGmwQgGPr8yru+2YGOXFMGjPIhw1wuLSELzx0
0PhsQRqEgzzYRgNAzx6JqhZIOvHcPmZd/mNLj584DczxcRCli4XkVME5Ev3g
aYSDXoHJb5Zt51CbjB6lfG9EikLcBmkeOW8xNJzY70V4IoburrSMow4ZvYez
zV7Atr4hBfVV9hQYkUjof5bc238BSYBua3Qw9X3RfR0PVqHtzyVPKtI1Rfeh
uAHlxuUNaN9NeNfhUTAghHbFyr0/dl2m6qWHG3q/Pgc59AJ+DmywzucBh2B7
1gMbC7RV0bSoI1QdZYSq3sIyor6nN+0Ymbw671OjDAOAfQ3ogID/2A09ryEj
+zOJ4s+sNDGzAjfQTyH1nl+hluwW9pUreSIvkAAcUucS/bChb4RkJHDNEoUI
+mkGz0EZnuTOzdsW2LZxLpQEQJi7WgH9oIMEY58VW9B4qsQfoVkpGBABBoPc
EM28/ZYZL1molO/TdXZpQBCSioBJ4egvhWd8GAA0lw+nF89vZu+mV6c30+Pj
09ns5ofpxfUNfn7zp8urm5PT89O3UwwrjAx+GMJAdDNRFRfkYPEow8iWOIiI
e4PSu7Aa/s7yAcBN2C8DQgM2ixxlaLGRCc13H20oqiXesYQTo+VFlbrPxaEH
HA0JFc1fe4OMOjFsvk71E1ZTvSMsYvxK5wj0kItH9PdT/MKfBL85N4QDhqC9
mJ4AQp8E6We4ob/Yxp+zZR5BYtmSKW/B1q8ByuhgcLukL0ahW5lEsmQNk/0S
G8KsTYhqGAvDOWuZ+AUti8m4cPmqzfbOyBtXxygoFvlaA8fsYEL7n933etrr
+HMnhp2Ki/mlVS0+RXLtgJGxtmoSLW2+pKyT+V7cDqDYSGAF5DOcLydZ5Xgy
n3CC+Y3oPxz1rwBMGXjzQsRq+ILG3tWfovxllQq1Mp8ITqMMU7zJCqn2mPnb
IrTpSkDC50C5my0psWgqh1CgGG5RMsMB9H9+enV182F6dX1xegU3dzP9eP2O
YSe2KIKjdx1oC6ETPuLGPXVnTjkuZKwDqsGvJL0thuZtTUmd/LRSPYHAadAV
FdmQo3DEmQaoUJKuQGRabGhZPFKCDYJP50W1+3nQRYv2KaaB10AKJBmq3RYJ
hOG8TIyRLF5MyMBnFe+ahkO79mfbLAqOWpoDYPZJfNu8u43Uo9TGxTSjKRbA
qB52XAO6ALOBz/tu/cgKBGJZoCTCmOudLZH5tRiPtyb06RKpEk9ugNU1LpdU
5GLktUWjSpJKQg+p1xIftuhDDjhsQn+JNuafAfc1kw11IuRYk+xjRT4Ivvpm
z8IKMMY7UEloEpEzu2B7A25yYxe3eVW0G2914EvYChraBnvlDEjVRiI4L72q
z24i+IbY0DyIGnnPE+pFDcDe+KQI5ZvoOyXyCW36RpO9Y5uUsM7wZiXtbo6b
JzJ4it5X2oaqYqVdoSaPh11zFBC+xSzRiflg8fJljU3epUnv7oaZteCOfyJf
7E8SXUV5O8paVYgUxpp9w4UjLtBzT/navhaFjwDYw3sj55nQo7vpxo7x5wdu
hJkDSiWfi+QVPV/e4G8IsLosQbfg1MBL3DjdSfa//tt/10wjtPVNcDX7/sXA
TxJHAT4f5Fu9n6JHduyOKjtgucXbDrh0aJZdh0leadY7s0jEP6LUYbAYJ4LI
VMRqHu93TP2huwogImKmEdUUzeLgvCgY55i8IGoWZwQw0uL9TcT0SrZatIYd
LxLmJdVXNu59YJSvnESjGOjwWkOvbTn36oeYaoagIxtsYz8Ggds4JOhCp9Ci
XlfFX+yIXTgcbFT+/Fr8K6dnJ5yJaNCHVS+AraOjKtl03jT06kCVIZJCyolA
bhw8iRe3rV3+IetXVQRG961IVD2v0fNKCQTlkIt6ig+DzrGKHnAAuqWcZHa4
3LFlL5kgyyAY68llV1GIaxSiNvML0yGT0ZSBFF5yhejupXI+KXulXMtds7YS
B+7j7mggX+NA/cZE4pHMcojzizvCVbRhBNCpHyJe1fFmgDXtXKjzC76jK9r2
VY6axw+oPwQXfCWuQA45BldlzMnOBqpnsXZJKlGeCPlsUSOWFU0cow1UiCHc
BtyLUNYk0RlxiLH0GfTZM6kTxZlA+iA6RpTt0LIvxIQOYhZCwU80XQs0MDU3
uB/a9lYblXKh+ubfyCHxVN1FCb9EXQ9DwL4wKbI6yKvPW+4zErY5hCblV64w
JiHPLeVOh0HuFUiWvMQaeEqvbtVziRnO7ILj69ayVNlRnxX2dLJ4ox40YJVt
avRgkiTi1VG754WjjFA2fV0SM+Uhv8+LCrP7KE13cUvK2q6ig9rlAGQ0FGUy
Kn9c+A3mB7gX8zlKu9og30D1doIVJicowzkhYLFodvgL/+ZYYSQyRNmETsBx
9g6TaKK9IR92bOXk9Hz6ozLcyBbKfIhJiAIQJtiIt2HrGvsg8Os+cg0AnNDH
yvDGsrJoyQWDAAwiMq9vZqd//HgKUp6q6kLr9v2Hy48XJ9mjhGfB77zC++yr
wA+PHi0MwiY5eJIUXdEL1lgxGcKjaCnSxnoIq2k9PwjfodYE4f8DfnBXcAwL
ZacqRVwsGyA145FGJTjyTNSB5VbzXQk6/BgIp16pGp2TUwbVKFFPydAqOq2x
dCzZlUxHyTIaY2JQoDIVhJywkIgNgdQwG7osSW3hAAMJKn2e+MW23lJu6mAa
DmE+2D2oDSAOIejD7JiNyys7RNTCkDl1FdPnqwMoNbdkmAc5zWPJaO3tidQ7
yptfSE3RtsSaTIDmhrUKQhJ0AlZYc5hWdHiE2JI3mBFU9QG+PCq+2/v1cDW6
Wy04GDoBlUCg+VcCcmLxIIa+ipaLinNKthjgLprixiX9vsDM6xoJZwSAWhcG
GkwwVAKNAkqIBcC/ymJR+BJSDqXDjUkhOCYN5OjmDDPIANFoC3xs8pyCQRIg
KCsH5xp3iarUWBNw5ayad+RdS3lU50LeyV4cWZVRI0QiKhjGEsWh70T8cFWt
4zwmym5NDe0wB4lCv0S2edarfyhJ0tFmvXGQYBcKcDHwye955bwE/UC56G3i
/2Ln+zZv8nWTb29xi591DkgUf9AExFQtZFnsEOUNix33aPo41BNqDGbElZEt
sp9Hr6OfqRUggTR2Ys33xOzYwRaE48X4iwqXhg37UCMLQzMTKV/zEAni7Fx3
SikvR97Hijs/4qqokUu2ovIk9fDTEy6ImkucxTFVMRu4PofSjjAfCqwMU9aU
yBBhXZiqyzYckh/Bm/kvhzl4f8aFOYi1Sv1qVKPKiAgYslZDkAse8KxmGN8X
nJWNRXQEXt9JgaR8r9Zf0zB7B3EpYkMKqirhHk0kDkb8xlGBs1Tszwu7xUCM
C3fNLfxngsgaMQJM+S4qgphyK7aC0g2yHH/lo9PZomgWuw32z1kgHbxC1OFG
BiLUKv7OYfSk/xvxEbNP5J6UVWdmsHe//4y3pKvs9E/H76YXb09vzsj3cXI6
u766/PHm+Pzs9OL6zGvZr7Afkroeohdp0J5LwwWY6JZtuFuKtl+hJf6qvR1I
10i2EayrXmTUS9vepT74Nu8MGjSv9J30soHjH36nOQv1eqr0WqmvPMAFLYih
NDjsmHJvS+oXYzRiRSaJ0JknPPax5AnvS7OVfd4qyHVawTllU1xji1EMOMxO
Ut+9mtjy3ratFwU5REnWYGqr9JuhdC9pNuN6VrwKq/Y2eSWpH5pVEHeTaScD
qdawhOyLK1axbAx2GLJkIrzWp4j6m5DQPbA5duQUHYdQRcpFBZetu+2i4fgP
Xvcku6gRfUj6OG9+0WpWJDU4kDqnATkZ5nB9Qb5+VOuwJ8UIERLe9J5bOYje
y599bKlOPsxaFc4vuKY+e677intd4I7we7qfqEQvCMti8mFQhzHUrYNLOysV
ByjqWyvvEGkjCa2jIFwMxKS+94Fc9NAoRnqkHhd4EG5zAaos0Qi1yvFtFNgF
35pej5ymaD9JULRXHxXb1fmeCpKMT12mWPtWpCjJZF/T7MrUSFEMb23ocL6l
ICuPfb9WFDHup1sluTgh3LgfGiWL+mrNqs4K305tFBhlsDnCVEw5G8mx1NOI
UvCwK4ozlBFv/Ou/bL2LIESxifBS6h/l0ghiLCQDlyvlo/qs9Ozk8YP37ii8
BJapEx7Rco0tNRiM10RYwqIGu0fxtXPvElS6NpZunRw+gYnmqmWj3VDaIZme
odcTpOPJ+eloyBHKyaiRK6OXzTt0yeqhXuNNYeYhh6UpqCNKoWd+h28q6pHD
Zi2mguS+OD/KYdFkPQbxFpu1FQupC5acFmG0etei227yUjI3hEHyITVbCFN2
G3RgbKTViOT8mtZfYdpc6os+hJNkiqdBHph4Ezi4N3A5bP/d56wdnpWYwVES
8FAqiQNd6VXiti5R4jr4zP8c9TTAFyvdpjjmKR2XFvsMZP3iU+sciuwSIRHI
fTLr5PoO+IRMsD/N+xhJtJ3aXkTFGf1zs4cMAF1x8dgAT0qjT/DV1ekxNv5I
8mxYNaHQBXuIlrYcWDBk3JEf7FniB4vqs9m/JydVCeaK36ixHfWCwlyB0Htd
YxMjrEb2aTmqyCegYEkR1A7QebFdgnMu5jerW58Q6+VonqKJ24cJbtDH+yWX
RIV9LN9HymId4ZqBSJa3QgPm1j8VR4OHydmzEems4P0un3u7xOn8qVunRsaH
oZBS6Ar4YJsHLPrRoVBu0UogFhlbGJ44YEOHnRqn1Z5181CbBBTgC2fwjTjl
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

-->

</rfc>
