RFC 9754: Extensions for Opening and Delegating Files in NFSv4.2
- T. Haynes,
- T. Myklebust
Abstract
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).¶
Status of This Memo
This is an Internet Standards Track document.¶
This document is a product of the Internet Engineering Task Force (IETF). It represents the consensus of the IETF community. It has received public review and has been approved for publication by the Internet Engineering Steering Group (IESG). Further information on Internet Standards is available in Section 2 of RFC 7841.¶
Information about the current status of this document, any
errata, and how to provide feedback on it may be obtained at
https://
Copyright Notice
Copyright (c) 2025 IETF Trust and the persons identified as the document authors. All rights reserved.¶
This document is subject to BCP 78 and the IETF Trust's Legal
Provisions Relating to IETF Documents
(https://
1. Introduction
In the Network File System version 4 (NFSv4), a client may be granted a delegation for a file (see Section 1.8.4 of [RFC8881]). This allows the client to act as the authority for the file's data and metadata. This document presents a number of extensions that enhance the functionality of opens and delegations. These allow the client to:¶
Using the process detailed in [RFC8178], the revisions in this document become an extension of NFSv4.2 [RFC7862]. They are built on top of the External Data Representation (XDR) [RFC4506] generated from [RFC7863].¶
1.1. Definitions
This document uses the following terminology:¶
- offline file:
- A file that exists on a device that is not connected to the server. There is typically a cost associated with bringing the file to an online status. Historically, this would be a file on tape media, and the cost would have been finding and loading the tape. A more modern interpretation is that the file is in the cloud, and the cost is a monetary one in downloading the file.¶
- proxy:
- The proxying of attributes occurs when a client has the authority, as granted by the appropriate delegation, to represent the attributes normally maintained by the server. For read attributes, this occurs when the client has either a read or write delegation for the file. For write attributes, this occurs when the client has a write delegation for the file. The client having this authority is the "proxy" for those attributes.¶
Further, the definitions of the following terms are referenced as follows:¶
1.2. Requirements Language
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in BCP 14 [RFC2119] [RFC8174] when, and only when, they appear in all capitals, as shown here.¶
2. Offline Files
If a file is offline, then the server has immediate high
A compound with a GETATTR or READDIR can report the file's attributes
without bringing the file online. However, either an OPEN or a LAYOUTGET
might cause the file server to retrieve the archived data contents, bringing the
file online. For non-parallel NFS systems (see Section 12 of [RFC8881]), the OPEN operation
requires a filehandle to retrieve the data content. For parallel NFS (pNFS) systems, the
filehandle retrieved from an OPEN need not cause the data content to be
retrieved. However, when the LAYOUTGET operation is processed, a layout
If the client is not aware that the file is offline, it might inadvertently open the file to determine what type of file it is accessing. By interrogating the new attribute fattr4_offline, a client can predetermine the availability of the file, avoiding the need to open it at all. Being offline might also involve situations in which the file is archived in the cloud, i.e., there can be an expense in both retrieving the file to bring it online and in sending the file back to offline status.¶
3. Determining OPEN Feature Support
Section 4.4.2 of [RFC8178] allows for extending a particular minor version of the NFSv4 protocol without requiring the definition of a new minor version. The client can probe the capabilities of the server and, based on the result, determine if both it and the server support optional features not previously specified as part of the minor version.¶
The fattr4
Two new flags are provided:¶
Subsequent extensions can use this framework when introducing new OPTIONAL functionality to OPEN by creating a new flag for each OPTIONAL parameter.¶
Since fattr4
Some other concerns are how to process both currently REQUIRED flags and OPTIONAL flags that become REQUIRED in the future. The server MUST mark REQUIRED flags as being supported. Note that these flags MUST only change from OPTIONAL to REQUIRED when the NFSv4 minor version is incremented.¶
4. OPEN Grants Either an Open or a Delegation Stateid
The OPEN procedure returns an open stateid to the client to reference the state of the file. The client could also request a delegation stateid in the OPEN arguments. The file can be considered open for the client as long as the count of open and delegated stateids is greater than 0. Either type of stateid is sufficient to enable the server to treat the file as if it were open, which allows READ, WRITE, LOCK, and LAYOUTGET operations to proceed. If the client gets both an open and a delegation stateid as part of the OPEN, then it has to return them both to the server. A further consideration is that during each operation, the client can send a costly GETATTR.¶
If the client knows that the server supports the
OPEN4
The client is already prepared to not get a delegation
stateid, even if requested. In order to not send an open
stateid, the server MUST indicate that fact with the result
flag of OPEN4
Note that the OPEN4
In this scenario, returning just a delegation stateid would hide
information from the client. If the client already has an open stateid,
then the server SHOULD ignore the
OPEN4
4.1. Implementation Experience
The CLOSE operation neither explicitly nor implicitly releases any delegation stateids. This is not symmetrical with the OPEN operation, which can grant both an open and a delegation stateid. This specification could have tried to extend the CLOSE operation to release both stateids, but implementation experience shows that is more costly than the approach that has been proposed.¶
Consider a small workload of creating a file with content. This involves
three synchronous operations and one asynchronous operation with
existing implementations
With the proposed approach of setting the
OPEN
This approach reduces the cost of synchronous operations by 33% and the total number of operations by 25%. Contrast that with the alternative proposal of having CLOSE return both stateids, which would not reduce the number of synchronous operations.¶
5. Proxying of Times
When a client is granted a write delegation on a file, it becomes the authority for the file contents and associated attributes. If the server queries the client as to the state of the file via a CB_GETATTR, then according to the unextended NFSv4 protocol, it can only determine the size of the file and the change attribute. In the case of the client holding the delegation, it has the current values of the access and modify times. There is no way that other clients can have access to these values. To notify the server of the proxied values, the client could send a compound of the form SEQ, PUTFH, SETATTR (time_modify | time_access), DELEGRETURN; however, the SETATTR operation would cause either or both of the change attribute or time_metadata attribute to be modified to the current time on the server. There is no current provision to obtain these values before delegation return using CB_GETATTR. As a result, it cannot pass on these times to an application expecting POSIX compliance, as is often necessary for correct operation.¶
With the addition of the new
OPEN4
If a server informs the client via the fattr4
When the server grants a delegation stateid, it
MUST inform the client by setting the appropriate
flag in the open
These new attributes are invalid to be used with GETATTR, VERIFY, and NVERIFY, and they can only be used with CB_GETATTR and SETATTR by a client holding an appropriate delegation. The SETATTR SHOULD be either 1) in a separate compound before the one containing the DELEGRETURN or 2) in the same compound as an operation before the DELEGRETURN. Failure to properly sequence the operations may lead to race conditions.¶
A key prerequisite of this approach is that the server and client are in
time synchronization with each other. Note that while the base NFSv4.2
does not require such synchronization
When the time presented is before the original time, then the update is ignored. When the time presented is in the future, the server can either clamp the new time to the current time or return NFS4ERR_DELAY to the client, allowing it to retry. Note that if the clock skew is large, the delay approach would result in access to the file being denied until the clock skew is exceeded.¶
A change in the access time MUST NOT advance the change time, also known as the time_metadata attribute. However, a change in the modify time might advance the change time (and in turn, the change attribute). If the modify time is greater than the change time and before the current time, then the change time is adjusted to the modify time and not the current time (as is most likely done on most SETATTR calls that change the metadata). If the modify time is in the future, it will be clamped to the current time.¶
Note that each of the possible times (access, modify, and change) are compared to the current time. They should all be compared against the same time value for the current time (i.e., they do not retrieve a different value of the current time for each calculation).¶
If the client sets the OPEN4
5.1. Use Case for NFSv3 Client Proxy
Consider an NFSv3 client that wants to access data on a server that only supports NFSv4.2. An implementation may introduce an NFSv3 server that functions as an NFSv4.2 client, serving as a gateway between the two otherwise incompatible systems. As NFSv3 is a stateless protocol, the state is not kept on the client, but rather on the NFSv3 server. As the NFSv3 server is already managing the state, it can proxy file delegations to avoid spurious GETATTRs. That is, as the client queries the NFSv3 server for the attributes, they can be served without the NFSv3 server sending a GETATTR to the NFSv4.2 server.¶
6. Extraction of XDR
This document contains the XDR [RFC4506] description of the
new open flags for delegating the file to the client. The XDR description
is embedded in this document in a way that makes it simple for the reader
to extract into a ready
That is, if the above script is stored in a file called "extract.sh" and this document is in a file called "spec.txt", then the reader can do the following:¶
The effect of the script is to remove leading blank space from each line, plus a sentinel sequence of "///". XDR descriptions with the sentinel sequence are embedded throughout the document.¶
Note that the XDR code contained in this document depends on types from the NFSv4.2 nfs4_prot.x file (generated from [RFC7863]). This includes both nfs types that end with a 4 (such as offset4 and length4) as well as more generic types (such as uint32_t and uint64_t).¶
While the XDR can be appended to that from [RFC7863], the various code snippets belong in their respective areas of that XDR.¶
7. Security Considerations
While this document extends some capabilities for client delegation, there are no new security concerns. The client cannot be queried by other clients as to the cached attributes. The client could report false data for the cached attributes, but it already has this ability via a SETATTR operation.¶
8. IANA Considerations
This document has no IANA actions.¶
9. Normative References
- [RFC2119]
-
Bradner, S., "Key words for use in RFCs to Indicate Requirement Levels", BCP 14, RFC 2119, DOI 10
.17487 , , <https:///RFC2119 www >..rfc -editor .org /info /rfc2119 - [RFC4506]
-
Eisler, M., Ed., "XDR: External Data Representation Standard", STD 67, RFC 4506, DOI 10
.17487 , , <https:///RFC4506 www >..rfc -editor .org /info /rfc4506 - [RFC7862]
-
Haynes, T., "Network File System (NFS) Version 4 Minor Version 2 Protocol", RFC 7862, DOI 10
.17487 , , <https:///RFC7862 www >..rfc -editor .org /info /rfc7862 - [RFC7863]
-
Haynes, T., "Network File System (NFS) Version 4 Minor Version 2 External Data Representation Standard (XDR) Description", RFC 7863, DOI 10
.17487 , , <https:///RFC7863 www >..rfc -editor .org /info /rfc7863 - [RFC8174]
-
Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words", BCP 14, RFC 8174, DOI 10
.17487 , , <https:///RFC8174 www >..rfc -editor .org /info /rfc8174 - [RFC8178]
-
Noveck, D., "Rules for NFSv4 Extensions and Minor Versions", RFC 8178, DOI 10
.17487 , , <https:///RFC8178 www >..rfc -editor .org /info /rfc8178 - [RFC8881]
-
Noveck, D., Ed. and C. Lever, "Network File System (NFS) Version 4 Minor Version 1 Protocol", RFC 8881, DOI 10
.17487 , , <https:///RFC8881 www >..rfc -editor .org /info /rfc8881
Acknowledgments
Trond Myklebust, Tom Haynes, and David Flynn all worked on the prototype at Hammerspace.¶
Dave Noveck, Chuck Lever, Rick Macklem, and Zaheduzzaman Sarker provided reviews of the document.¶
Jeff Layton provided experience from an implementation he authored.¶