draft-ietf-nfsv4-rfc3010bis-03.txt   draft-ietf-nfsv4-rfc3010bis-04.txt 
NFS version 4 Working Group S. Shepler NFS version 4 Working Group S. Shepler
INTERNET-DRAFT Sun Microsystems, Inc. INTERNET-DRAFT Sun Microsystems, Inc.
Obsoletes: 3010 C. Beame Obsoletes: 3010 C. Beame
Document: draft-ietf-nfsv4-rfc3010bis-03.txt Hummingbird Ltd. Document: draft-ietf-nfsv4-rfc3010bis-04.txt Hummingbird Ltd.
B. Callaghan B. Callaghan
Sun Microsystems, Inc. Sun Microsystems, Inc.
M. Eisler M. Eisler
Network Appliance, Inc. Network Appliance, Inc.
D. Noveck D. Noveck
Network Appliance, Inc. Network Appliance, Inc.
D. Robinson D. Robinson
Sun Microsystems, Inc. Sun Microsystems, Inc.
R. Thurlow R. Thurlow
Sun Microsystems, Inc. Sun Microsystems, Inc.
September 2002 October 2002
NFS version 4 Protocol NFS version 4 Protocol
Status of this Memo Status of this Memo
This document is an Internet-Draft and is in full conformance with This document is an Internet-Draft and is in full conformance with
all provisions of Section 10 of RFC2026. all provisions of Section 10 of RFC2026.
Internet-Drafts are working documents of the Internet Engineering Internet-Drafts are working documents of the Internet Engineering
Task Force (IETF), its areas, and its working groups. Note that Task Force (IETF), its areas, and its working groups. Note that
skipping to change at page 1, line 44 skipping to change at page 1, line 44
material or to cite them other than as "work in progress." material or to cite them other than as "work in progress."
The list of current Internet-Drafts can be accessed at The list of current Internet-Drafts can be accessed at
http://www.ietf.org/ietf/1id-abstracts.txt http://www.ietf.org/ietf/1id-abstracts.txt
The list of Internet-Draft Shadow Directories can be accessed at The list of Internet-Draft Shadow Directories can be accessed at
http://www.ietf.org/shadow.html. http://www.ietf.org/shadow.html.
Abstract Abstract
NFS version 4 is a distributed filesystem protocol which owes This document replaces [RFC3010] as the definition of the NFS version
heritage to NFS protocol versions 2 [RFC1094] and 3 [RFC1813]. 4 protocol.
Draft Specification NFS version 4 Protocol September 2002 Draft Specification NFS version 4 Protocol October 2002
NFS version 4 is a distributed filesystem protocol which owes
heritage to NFS protocol versions 2 [RFC1094] and 3 [RFC1813].
Unlike earlier versions, the NFS version 4 protocol supports Unlike earlier versions, the NFS version 4 protocol supports
traditional file access while integrating support for file locking traditional file access while integrating support for file locking
and the mount protocol. In addition, support for strong security and the mount protocol. In addition, support for strong security
(and its negotiation), compound operations, client caching, and (and its negotiation), compound operations, client caching, and
internationalization have been added. Of course, attention has been internationalization have been added. Of course, attention has been
applied to making NFS version 4 operate well in an Internet applied to making NFS version 4 operate well in an Internet
environment. environment.
Copyright Copyright
Copyright (C) The Internet Society (2000-2002). All Rights Reserved. Copyright (C) The Internet Society (2000-2002). All Rights Reserved.
Key Words Key Words
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
"SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this
document are to be interpreted as described in [RFC2119]. document are to be interpreted as described in [RFC2119].
Draft Specification NFS version 4 Protocol September 2002 Draft Specification NFS version 4 Protocol October 2002
Table of Contents Table of Contents
1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 7 1. Changes since RFC3010 . . . . . . . . . . . . . . . . . . . . 7
1.1. Inconsistencies of this Document with Section 18 . . . . . 7 1.1. Introduction . . . . . . . . . . . . . . . . . . . . . . . 8
1.2. Overview of NFS version 4 Features . . . . . . . . . . . . 8 1.2. Inconsistencies of this Document with Section 18 . . . . . 8
1.2.1. RPC and Security . . . . . . . . . . . . . . . . . . . . 8 1.3. Overview of NFS version 4 Features . . . . . . . . . . . . 9
1.2.2. Procedure and Operation Structure . . . . . . . . . . . 8 1.3.1. RPC and Security . . . . . . . . . . . . . . . . . . . . 9
1.2.3. Filesystem Model . . . . . . . . . . . . . . . . . . . . 9 1.3.2. Procedure and Operation Structure . . . . . . . . . . . . 9
1.2.3.1. Filehandle Types . . . . . . . . . . . . . . . . . . . 9 1.3.3. Filesystem Model . . . . . . . . . . . . . . . . . . . 10
1.2.3.2. Attribute Types . . . . . . . . . . . . . . . . . . 10 1.3.3.1. Filehandle Types . . . . . . . . . . . . . . . . . . 10
1.2.3.3. Filesystem Replication and Migration . . . . . . . . 10 1.3.3.2. Attribute Types . . . . . . . . . . . . . . . . . . . 11
1.2.4. OPEN and CLOSE . . . . . . . . . . . . . . . . . . . . 11 1.3.3.3. Filesystem Replication and Migration . . . . . . . . 11
1.2.5. File locking . . . . . . . . . . . . . . . . . . . . . 11 1.3.4. OPEN and CLOSE . . . . . . . . . . . . . . . . . . . . 12
1.2.6. Client Caching and Delegation . . . . . . . . . . . . 11 1.3.5. File locking . . . . . . . . . . . . . . . . . . . . . 12
1.3. General Definitions . . . . . . . . . . . . . . . . . . 12 1.3.6. Client Caching and Delegation . . . . . . . . . . . . . 12
2. Protocol Data Types . . . . . . . . . . . . . . . . . . . 14 1.4. General Definitions . . . . . . . . . . . . . . . . . . . 13
2.1. Basic Data Types . . . . . . . . . . . . . . . . . . . . 14 2. Protocol Data Types . . . . . . . . . . . . . . . . . . . . 15
2.2. Structured Data Types . . . . . . . . . . . . . . . . . 15 2.1. Basic Data Types . . . . . . . . . . . . . . . . . . . . 15
3. RPC and Security Flavor . . . . . . . . . . . . . . . . . 21 2.2. Structured Data Types . . . . . . . . . . . . . . . . . . 16
3.1. Ports and Transports . . . . . . . . . . . . . . . . . . 21 3. RPC and Security Flavor . . . . . . . . . . . . . . . . . . 22
3.1.1. Client Retransmission Behavior . . . . . . . . . . . . 21 3.1. Ports and Transports . . . . . . . . . . . . . . . . . . 22
3.2. Security Flavors . . . . . . . . . . . . . . . . . . . . 22 3.1.1. Client Retransmission Behavior . . . . . . . . . . . . 22
3.2.1. Security mechanisms for NFS version 4 . . . . . . . . 22 3.2. Security Flavors . . . . . . . . . . . . . . . . . . . . 23
3.2.1.1. Kerberos V5 as a security triple . . . . . . . . . . 22 3.2.1. Security mechanisms for NFS version 4 . . . . . . . . . 23
3.2.1.2. LIPKEY as a security triple . . . . . . . . . . . . 23 3.2.1.1. Kerberos V5 as a security triple . . . . . . . . . . 23
3.2.1.3. SPKM-3 as a security triple . . . . . . . . . . . . 24 3.2.1.2. LIPKEY as a security triple . . . . . . . . . . . . . 24
3.3. Security Negotiation . . . . . . . . . . . . . . . . . . 24 3.2.1.3. SPKM-3 as a security triple . . . . . . . . . . . . . 25
3.3.1. SECINFO . . . . . . . . . . . . . . . . . . . . . . . 24 3.3. Security Negotiation . . . . . . . . . . . . . . . . . . 25
3.3.2. Security Error . . . . . . . . . . . . . . . . . . . . 25 3.3.1. SECINFO . . . . . . . . . . . . . . . . . . . . . . . . 25
3.4. Callback RPC Authentication . . . . . . . . . . . . . . 25 3.3.2. Security Error . . . . . . . . . . . . . . . . . . . . 26
4. Filehandles . . . . . . . . . . . . . . . . . . . . . . . 27 3.4. Callback RPC Authentication . . . . . . . . . . . . . . . 26
4.1. Obtaining the First Filehandle . . . . . . . . . . . . . 27 4. Filehandles . . . . . . . . . . . . . . . . . . . . . . . . 28
4.1.1. Root Filehandle . . . . . . . . . . . . . . . . . . . 27 4.1. Obtaining the First Filehandle . . . . . . . . . . . . . 28
4.1.2. Public Filehandle . . . . . . . . . . . . . . . . . . 27 4.1.1. Root Filehandle . . . . . . . . . . . . . . . . . . . . 28
4.2. Filehandle Types . . . . . . . . . . . . . . . . . . . . 28 4.1.2. Public Filehandle . . . . . . . . . . . . . . . . . . . 28
4.2.1. General Properties of a Filehandle . . . . . . . . . . 28 4.2. Filehandle Types . . . . . . . . . . . . . . . . . . . . 29
4.2.2. Persistent Filehandle . . . . . . . . . . . . . . . . 29 4.2.1. General Properties of a Filehandle . . . . . . . . . . 29
4.2.3. Volatile Filehandle . . . . . . . . . . . . . . . . . 29 4.2.2. Persistent Filehandle . . . . . . . . . . . . . . . . . 30
4.2.4. One Method of Constructing a Volatile Filehandle . . . 30 4.2.3. Volatile Filehandle . . . . . . . . . . . . . . . . . . 30
4.3. Client Recovery from Filehandle Expiration . . . . . . . 31 4.2.4. One Method of Constructing a Volatile Filehandle . . . 31
5. File Attributes . . . . . . . . . . . . . . . . . . . . . 33 4.3. Client Recovery from Filehandle Expiration . . . . . . . 32
5.1. Mandatory Attributes . . . . . . . . . . . . . . . . . . 34 5. File Attributes . . . . . . . . . . . . . . . . . . . . . . 34
5.2. Recommended Attributes . . . . . . . . . . . . . . . . . 34 5.1. Mandatory Attributes . . . . . . . . . . . . . . . . . . 35
5.3. Named Attributes . . . . . . . . . . . . . . . . . . . . 34 5.2. Recommended Attributes . . . . . . . . . . . . . . . . . 35
5.4. Classification of Attributes . . . . . . . . . . . . . . 35 5.3. Named Attributes . . . . . . . . . . . . . . . . . . . . 35
5.5. Mandatory Attributes - Definitions . . . . . . . . . . . 37 5.4. Classification of Attributes . . . . . . . . . . . . . . 36
5.6. Recommended Attributes - Definitions . . . . . . . . . . 39 5.5. Mandatory Attributes - Definitions . . . . . . . . . . . 38
5.7. Time Access . . . . . . . . . . . . . . . . . . . . . . 44 5.6. Recommended Attributes - Definitions . . . . . . . . . . 40
5.8. Interpreting owner and owner_group . . . . . . . . . . . 44 5.7. Time Access . . . . . . . . . . . . . . . . . . . . . . . 45
5.9. Character Case Attributes . . . . . . . . . . . . . . . 46 5.8. Interpreting owner and owner_group . . . . . . . . . . . 45
5.10. Quota Attributes . . . . . . . . . . . . . . . . . . . 46 5.9. Character Case Attributes . . . . . . . . . . . . . . . . 47
5.11. Access Control Lists . . . . . . . . . . . . . . . . . 47 5.10. Quota Attributes . . . . . . . . . . . . . . . . . . . . 47
Draft Specification NFS version 4 Protocol September 2002 Draft Specification NFS version 4 Protocol October 2002
5.11.1. ACE type . . . . . . . . . . . . . . . . . . . . . . 48 5.11. Access Control Lists . . . . . . . . . . . . . . . . . . 48
5.11.2. ACE Access Mask . . . . . . . . . . . . . . . . . . . 49 5.11.1. ACE type . . . . . . . . . . . . . . . . . . . . . . . 49
5.11.3. ACE flag . . . . . . . . . . . . . . . . . . . . . . 51 5.11.2. ACE Access Mask . . . . . . . . . . . . . . . . . . . 50
5.11.4. ACE who . . . . . . . . . . . . . . . . . . . . . . . 52 5.11.3. ACE flag . . . . . . . . . . . . . . . . . . . . . . . 52
5.11.5. Mode Attribute . . . . . . . . . . . . . . . . . . . 53 5.11.4. ACE who . . . . . . . . . . . . . . . . . . . . . . . 53
5.11.6. Mode and ACL Attribute . . . . . . . . . . . . . . . 54 5.11.5. Mode Attribute . . . . . . . . . . . . . . . . . . . . 54
5.11.7. mounted_on_fileid . . . . . . . . . . . . . . . . . . 54 5.11.6. Mode and ACL Attribute . . . . . . . . . . . . . . . . 55
6. Filesystem Migration and Replication . . . . . . . . . . . 56 5.11.7. mounted_on_fileid . . . . . . . . . . . . . . . . . . 55
6.1. Replication . . . . . . . . . . . . . . . . . . . . . . 56 6. Filesystem Migration and Replication . . . . . . . . . . . 57
6.2. Migration . . . . . . . . . . . . . . . . . . . . . . . 56 6.1. Replication . . . . . . . . . . . . . . . . . . . . . . . 57
6.3. Interpretation of the fs_locations Attribute . . . . . . 57 6.2. Migration . . . . . . . . . . . . . . . . . . . . . . . . 57
6.4. Filehandle Recovery for Migration or Replication . . . . 58 6.3. Interpretation of the fs_locations Attribute . . . . . . 58
7. NFS Server Name Space . . . . . . . . . . . . . . . . . . 59 6.4. Filehandle Recovery for Migration or Replication . . . . 59
7.1. Server Exports . . . . . . . . . . . . . . . . . . . . . 59 7. NFS Server Name Space . . . . . . . . . . . . . . . . . . . 60
7.2. Browsing Exports . . . . . . . . . . . . . . . . . . . . 59 7.1. Server Exports . . . . . . . . . . . . . . . . . . . . . 60
7.3. Server Pseudo Filesystem . . . . . . . . . . . . . . . . 59 7.2. Browsing Exports . . . . . . . . . . . . . . . . . . . . 60
7.4. Multiple Roots . . . . . . . . . . . . . . . . . . . . . 60 7.3. Server Pseudo Filesystem . . . . . . . . . . . . . . . . 60
7.5. Filehandle Volatility . . . . . . . . . . . . . . . . . 60 7.4. Multiple Roots . . . . . . . . . . . . . . . . . . . . . 61
7.6. Exported Root . . . . . . . . . . . . . . . . . . . . . 60 7.5. Filehandle Volatility . . . . . . . . . . . . . . . . . . 61
7.7. Mount Point Crossing . . . . . . . . . . . . . . . . . . 61 7.6. Exported Root . . . . . . . . . . . . . . . . . . . . . . 61
7.8. Security Policy and Name Space Presentation . . . . . . 61 7.7. Mount Point Crossing . . . . . . . . . . . . . . . . . . 62
8. File Locking and Share Reservations . . . . . . . . . . . 63 7.8. Security Policy and Name Space Presentation . . . . . . . 62
8.1. Locking . . . . . . . . . . . . . . . . . . . . . . . . 63 8. File Locking and Share Reservations . . . . . . . . . . . . 64
8.1.1. Client ID . . . . . . . . . . . . . . . . . . . . . . 63 8.1. Locking . . . . . . . . . . . . . . . . . . . . . . . . . 64
8.1.2. Server Release of Clientid . . . . . . . . . . . . . . 66 8.1.1. Client ID . . . . . . . . . . . . . . . . . . . . . . . 64
8.1.3. lock_owner and stateid Definition . . . . . . . . . . 67 8.1.2. Server Release of Clientid . . . . . . . . . . . . . . 67
8.1.4. Use of the stateid and Locking . . . . . . . . . . . . 68 8.1.3. lock_owner and stateid Definition . . . . . . . . . . . 68
8.1.5. Sequencing of Lock Requests . . . . . . . . . . . . . 70 8.1.4. Use of the stateid and Locking . . . . . . . . . . . . 69
8.1.6. Recovery from Replayed Requests . . . . . . . . . . . 71 8.1.5. Sequencing of Lock Requests . . . . . . . . . . . . . . 71
8.1.7. Releasing lock_owner State . . . . . . . . . . . . . . 72 8.1.6. Recovery from Replayed Requests . . . . . . . . . . . . 72
8.1.8. Use of Open Confirmation . . . . . . . . . . . . . . . 72 8.1.7. Releasing lock_owner State . . . . . . . . . . . . . . 73
8.2. Lock Ranges . . . . . . . . . . . . . . . . . . . . . . 73 8.1.8. Use of Open Confirmation . . . . . . . . . . . . . . . 73
8.3. Upgrading and Downgrading Locks . . . . . . . . . . . . 73 8.2. Lock Ranges . . . . . . . . . . . . . . . . . . . . . . . 74
8.4. Blocking Locks . . . . . . . . . . . . . . . . . . . . . 74 8.3. Upgrading and Downgrading Locks . . . . . . . . . . . . . 74
8.5. Lease Renewal . . . . . . . . . . . . . . . . . . . . . 74 8.4. Blocking Locks . . . . . . . . . . . . . . . . . . . . . 75
8.6. Crash Recovery . . . . . . . . . . . . . . . . . . . . . 75 8.5. Lease Renewal . . . . . . . . . . . . . . . . . . . . . . 75
8.6.1. Client Failure and Recovery . . . . . . . . . . . . . 76 8.6. Crash Recovery . . . . . . . . . . . . . . . . . . . . . 76
8.6.2. Server Failure and Recovery . . . . . . . . . . . . . 76 8.6.1. Client Failure and Recovery . . . . . . . . . . . . . . 77
8.6.3. Network Partitions and Recovery . . . . . . . . . . . 78 8.6.2. Server Failure and Recovery . . . . . . . . . . . . . . 77
8.7. Recovery from a Lock Request Timeout or Abort . . . . . 81 8.6.3. Network Partitions and Recovery . . . . . . . . . . . . 79
8.8. Server Revocation of Locks . . . . . . . . . . . . . . . 82 8.7. Recovery from a Lock Request Timeout or Abort . . . . . . 82
8.9. Share Reservations . . . . . . . . . . . . . . . . . . . 83 8.8. Server Revocation of Locks . . . . . . . . . . . . . . . 83
8.10. OPEN/CLOSE Operations . . . . . . . . . . . . . . . . . 83 8.9. Share Reservations . . . . . . . . . . . . . . . . . . . 84
8.10.1. Close and Retention of State Information . . . . . . 84 8.10. OPEN/CLOSE Operations . . . . . . . . . . . . . . . . . 84
8.11. Open Upgrade and Downgrade . . . . . . . . . . . . . . 85 8.10.1. Close and Retention of State Information . . . . . . . 85
8.12. Short and Long Leases . . . . . . . . . . . . . . . . . 85 8.11. Open Upgrade and Downgrade . . . . . . . . . . . . . . . 86
8.12. Short and Long Leases . . . . . . . . . . . . . . . . . 86
8.13. Clocks, Propagation Delay, and Calculating Lease 8.13. Clocks, Propagation Delay, and Calculating Lease
Expiration . . . . . . . . . . . . . . . . . . . . . . 86 Expiration . . . . . . . . . . . . . . . . . . . . . . . 87
8.14. Migration, Replication and State . . . . . . . . . . . 86 8.14. Migration, Replication and State . . . . . . . . . . . . 87
8.14.1. Migration and State . . . . . . . . . . . . . . . . . 87 8.14.1. Migration and State . . . . . . . . . . . . . . . . . 88
8.14.2. Replication and State . . . . . . . . . . . . . . . . 87 8.14.2. Replication and State . . . . . . . . . . . . . . . . 88
8.14.3. Notification of Migrated Lease . . . . . . . . . . . 88
Draft Specification NFS version 4 Protocol September 2002 Draft Specification NFS version 4 Protocol October 2002
8.14.4. Migration and the Lease_time Attribute . . . . . . . 88 8.14.3. Notification of Migrated Lease . . . . . . . . . . . . 89
9. Client-Side Caching . . . . . . . . . . . . . . . . . . . 90 8.14.4. Migration and the Lease_time Attribute . . . . . . . . 89
9.1. Performance Challenges for Client-Side Caching . . . . . 90 9. Client-Side Caching . . . . . . . . . . . . . . . . . . . . 91
9.2. Delegation and Callbacks . . . . . . . . . . . . . . . . 91 9.1. Performance Challenges for Client-Side Caching . . . . . 91
9.2.1. Delegation Recovery . . . . . . . . . . . . . . . . . 92 9.2. Delegation and Callbacks . . . . . . . . . . . . . . . . 92
9.3. Data Caching . . . . . . . . . . . . . . . . . . . . . . 94 9.2.1. Delegation Recovery . . . . . . . . . . . . . . . . . . 93
9.3.1. Data Caching and OPENs . . . . . . . . . . . . . . . . 94 9.3. Data Caching . . . . . . . . . . . . . . . . . . . . . . 95
9.3.2. Data Caching and File Locking . . . . . . . . . . . . 95 9.3.1. Data Caching and OPENs . . . . . . . . . . . . . . . . 95
9.3.3. Data Caching and Mandatory File Locking . . . . . . . 97 9.3.2. Data Caching and File Locking . . . . . . . . . . . . . 96
9.3.4. Data Caching and File Identity . . . . . . . . . . . . 97 9.3.3. Data Caching and Mandatory File Locking . . . . . . . . 98
9.4. Open Delegation . . . . . . . . . . . . . . . . . . . . 98 9.3.4. Data Caching and File Identity . . . . . . . . . . . . 98
9.4.1. Open Delegation and Data Caching . . . . . . . . . . . 101 9.4. Open Delegation . . . . . . . . . . . . . . . . . . . . . 99
9.4.2. Open Delegation and File Locks . . . . . . . . . . . . 102 9.4.1. Open Delegation and Data Caching . . . . . . . . . . . 102
9.4.3. Handling of CB_GETATTR . . . . . . . . . . . . . . . . 102 9.4.2. Open Delegation and File Locks . . . . . . . . . . . . 103
9.4.4. Recall of Open Delegation . . . . . . . . . . . . . . 105 9.4.3. Handling of CB_GETATTR . . . . . . . . . . . . . . . . 103
9.4.5. Clients that Fail to Honor Delegation Recalls . . . . 107 9.4.4. Recall of Open Delegation . . . . . . . . . . . . . . . 106
9.4.6. Delegation Revocation . . . . . . . . . . . . . . . . 107 9.4.5. Clients that Fail to Honor Delegation Recalls . . . . . 108
9.5. Data Caching and Revocation . . . . . . . . . . . . . . 108 9.4.6. Delegation Revocation . . . . . . . . . . . . . . . . . 108
9.5.1. Revocation Recovery for Write Open Delegation . . . . 108 9.5. Data Caching and Revocation . . . . . . . . . . . . . . . 109
9.6. Attribute Caching . . . . . . . . . . . . . . . . . . . 109 9.5.1. Revocation Recovery for Write Open Delegation . . . . . 109
9.7. Data and Metadata Caching and Memory Mapped Files . . . 111 9.6. Attribute Caching . . . . . . . . . . . . . . . . . . . . 110
9.8. Name Caching . . . . . . . . . . . . . . . . . . . . . . 113 9.7. Data and Metadata Caching and Memory Mapped Files . . . . 112
9.9. Directory Caching . . . . . . . . . . . . . . . . . . . 114 9.8. Name Caching . . . . . . . . . . . . . . . . . . . . . . 114
10. Minor Versioning . . . . . . . . . . . . . . . . . . . . 116 9.9. Directory Caching . . . . . . . . . . . . . . . . . . . . 115
11. Internationalization . . . . . . . . . . . . . . . . . . 119 10. Minor Versioning . . . . . . . . . . . . . . . . . . . . . 117
11.1. Universal Versus Local Character Sets . . . . . . . . . 119 11. Internationalization . . . . . . . . . . . . . . . . . . . 120
11.2. Overview of Universal Character Set Standards . . . . . 120 11.1. Universal Versus Local Character Sets . . . . . . . . . 120
11.3. Difficulties with UCS-4, UCS-2, Unicode . . . . . . . . 121 11.2. Overview of Universal Character Set Standards . . . . . 121
11.4. UTF-8 and its solutions . . . . . . . . . . . . . . . . 121 11.3. Difficulties with UCS-4, UCS-2, Unicode . . . . . . . . 122
11.5. Normalization . . . . . . . . . . . . . . . . . . . . . 122 11.4. UTF-8 and its solutions . . . . . . . . . . . . . . . . 122
11.6. UTF-8 Related Errors . . . . . . . . . . . . . . . . . 122 11.5. Normalization . . . . . . . . . . . . . . . . . . . . . 123
12. Error Definitions . . . . . . . . . . . . . . . . . . . . 124 11.6. UTF-8 Related Errors . . . . . . . . . . . . . . . . . . 123
13. NFS version 4 Requests . . . . . . . . . . . . . . . . . 130 12. Error Definitions . . . . . . . . . . . . . . . . . . . . 125
13.1. Compound Procedure . . . . . . . . . . . . . . . . . . 130 13. NFS version 4 Requests . . . . . . . . . . . . . . . . . . 131
13.2. Evaluation of a Compound Request . . . . . . . . . . . 131 13.1. Compound Procedure . . . . . . . . . . . . . . . . . . . 131
13.3. Synchronous Modifying Operations . . . . . . . . . . . 131 13.2. Evaluation of a Compound Request . . . . . . . . . . . . 132
13.4. Operation Values . . . . . . . . . . . . . . . . . . . 132 13.3. Synchronous Modifying Operations . . . . . . . . . . . . 132
14. NFS version 4 Procedures . . . . . . . . . . . . . . . . 133 13.4. Operation Values . . . . . . . . . . . . . . . . . . . . 133
14.1. Procedure 0: NULL - No Operation . . . . . . . . . . . 133 14. NFS version 4 Procedures . . . . . . . . . . . . . . . . . 134
14.2. Procedure 1: COMPOUND - Compound Operations . . . . . . 134 14.1. Procedure 0: NULL - No Operation . . . . . . . . . . . . 134
14.2.1. Operation 3: ACCESS - Check Access Rights . . . . . . 137 14.2. Procedure 1: COMPOUND - Compound Operations . . . . . . 135
14.2.2. Operation 4: CLOSE - Close File . . . . . . . . . . . 140 14.2.1. Operation 3: ACCESS - Check Access Rights . . . . . . 138
14.2.3. Operation 5: COMMIT - Commit Cached Data . . . . . . 142 14.2.2. Operation 4: CLOSE - Close File . . . . . . . . . . . 141
14.2.4. Operation 6: CREATE - Create a Non-Regular File Object 145 14.2.3. Operation 5: COMMIT - Commit Cached Data . . . . . . . 143
14.2.4. Operation 6: CREATE - Create a Non-Regular File Object 146
14.2.5. Operation 7: DELEGPURGE - Purge Delegations Awaiting 14.2.5. Operation 7: DELEGPURGE - Purge Delegations Awaiting
Recovery . . . . . . . . . . . . . . . . . . . . . . 148 Recovery . . . . . . . . . . . . . . . . . . . . . . . 149
14.2.6. Operation 8: DELEGRETURN - Return Delegation . . . . 150 14.2.6. Operation 8: DELEGRETURN - Return Delegation . . . . . 151
14.2.7. Operation 9: GETATTR - Get Attributes . . . . . . . . 151 14.2.7. Operation 9: GETATTR - Get Attributes . . . . . . . . 152
14.2.8. Operation 10: GETFH - Get Current Filehandle . . . . 153 14.2.8. Operation 10: GETFH - Get Current Filehandle . . . . . 154
14.2.9. Operation 11: LINK - Create Link to a File . . . . . 155 14.2.9. Operation 11: LINK - Create Link to a File . . . . . . 156
14.2.10. Operation 12: LOCK - Create Lock . . . . . . . . . . 157 14.2.10. Operation 12: LOCK - Create Lock . . . . . . . . . . 158
14.2.11. Operation 13: LOCKT - Test For Lock . . . . . . . . 161
Draft Specification NFS version 4 Protocol September 2002 Draft Specification NFS version 4 Protocol October 2002
14.2.12. Operation 14: LOCKU - Unlock File . . . . . . . . . 163 14.2.11. Operation 13: LOCKT - Test For Lock . . . . . . . . . 162
14.2.13. Operation 15: LOOKUP - Lookup Filename . . . . . . . 165 14.2.12. Operation 14: LOCKU - Unlock File . . . . . . . . . . 164
14.2.14. Operation 16: LOOKUPP - Lookup Parent Directory . . 168 14.2.13. Operation 15: LOOKUP - Lookup Filename . . . . . . . 166
14.2.14. Operation 16: LOOKUPP - Lookup Parent Directory . . . 169
14.2.15. Operation 17: NVERIFY - Verify Difference in 14.2.15. Operation 17: NVERIFY - Verify Difference in
Attributes . . . . . . . . . . . . . . . . . . . . . 169 Attributes . . . . . . . . . . . . . . . . . . . . . 170
14.2.16. Operation 18: OPEN - Open a Regular File . . . . . . 171 14.2.16. Operation 18: OPEN - Open a Regular File . . . . . . 172
14.2.17. Operation 19: OPENATTR - Open Named Attribute 14.2.17. Operation 19: OPENATTR - Open Named Attribute
Directory . . . . . . . . . . . . . . . . . . . . . 181 Directory . . . . . . . . . . . . . . . . . . . . . . 182
14.2.18. Operation 20: OPEN_CONFIRM - Confirm Open . . . . . 183 14.2.18. Operation 20: OPEN_CONFIRM - Confirm Open . . . . . . 184
14.2.19. Operation 21: OPEN_DOWNGRADE - Reduce Open File Access186 14.2.19. Operation 21: OPEN_DOWNGRADE - Reduce Open File Access 187
14.2.20. Operation 22: PUTFH - Set Current Filehandle . . . . 188 14.2.20. Operation 22: PUTFH - Set Current Filehandle . . . . 189
14.2.21. Operation 23: PUTPUBFH - Set Public Filehandle . . . 189 14.2.21. Operation 23: PUTPUBFH - Set Public Filehandle . . . 190
14.2.22. Operation 24: PUTROOTFH - Set Root Filehandle . . . 191 14.2.22. Operation 24: PUTROOTFH - Set Root Filehandle . . . . 192
14.2.23. Operation 25: READ - Read from File . . . . . . . . 192 14.2.23. Operation 25: READ - Read from File . . . . . . . . . 193
14.2.24. Operation 26: READDIR - Read Directory . . . . . . . 195 14.2.24. Operation 26: READDIR - Read Directory . . . . . . . 196
14.2.25. Operation 27: READLINK - Read Symbolic Link . . . . 199 14.2.25. Operation 27: READLINK - Read Symbolic Link . . . . . 200
14.2.26. Operation 28: REMOVE - Remove Filesystem Object . . 201 14.2.26. Operation 28: REMOVE - Remove Filesystem Object . . . 202
14.2.27. Operation 29: RENAME - Rename Directory Entry . . . 204 14.2.27. Operation 29: RENAME - Rename Directory Entry . . . . 205
14.2.28. Operation 30: RENEW - Renew a Lease . . . . . . . . 207 14.2.28. Operation 30: RENEW - Renew a Lease . . . . . . . . . 208
14.2.29. Operation 31: RESTOREFH - Restore Saved Filehandle . 209 14.2.29. Operation 31: RESTOREFH - Restore Saved Filehandle . 210
14.2.30. Operation 32: SAVEFH - Save Current Filehandle . . . 211 14.2.30. Operation 32: SAVEFH - Save Current Filehandle . . . 212
14.2.31. Operation 33: SECINFO - Obtain Available Security . 212 14.2.31. Operation 33: SECINFO - Obtain Available Security . . 213
14.2.32. Operation 34: SETATTR - Set Attributes . . . . . . . 216 14.2.32. Operation 34: SETATTR - Set Attributes . . . . . . . 217
14.2.33. Operation 35: SETCLIENTID - Negotiate Clientid . . . 219 14.2.33. Operation 35: SETCLIENTID - Negotiate Clientid . . . 220
14.2.34. Operation 36: SETCLIENTID_CONFIRM - Confirm Clientid 223 14.2.34. Operation 36: SETCLIENTID_CONFIRM - Confirm Clientid 224
14.2.35. Operation 37: VERIFY - Verify Same Attributes . . . 227 14.2.35. Operation 37: VERIFY - Verify Same Attributes . . . . 228
14.2.36. Operation 38: WRITE - Write to File . . . . . . . . 229 14.2.36. Operation 38: WRITE - Write to File . . . . . . . . . 230
14.2.37. Operation 39: RELEASE_LOCKOWNER - Release Lockowner 14.2.37. Operation 39: RELEASE_LOCKOWNER - Release Lockowner
State . . . . . . . . . . . . . . . . . . . . . . . 234 State . . . . . . . . . . . . . . . . . . . . . . . . 235
14.2.38. Operation 10044: ILLEGAL - Illegal operation . . . . 236 14.2.38. Operation 10044: ILLEGAL - Illegal operation . . . . 237
15. NFS version 4 Callback Procedures . . . . . . . . . . . . 237 15. NFS version 4 Callback Procedures . . . . . . . . . . . . 238
15.1. Procedure 0: CB_NULL - No Operation . . . . . . . . . . 237 15.1. Procedure 0: CB_NULL - No Operation . . . . . . . . . . 238
15.2. Procedure 1: CB_COMPOUND - Compound Operations . . . . 238 15.2. Procedure 1: CB_COMPOUND - Compound Operations . . . . . 239
15.2.1. Operation 3: CB_GETATTR - Get Attributes . . . . . . 240 15.2.1. Operation 3: CB_GETATTR - Get Attributes . . . . . . . 241
15.2.2. Operation 4: CB_RECALL - Recall an Open Delegation . 242 15.2.2. Operation 4: CB_RECALL - Recall an Open Delegation . . 243
15.2.3. Operation 10044: CB_ILLEGAL - Illegal Callback 15.2.3. Operation 10044: CB_ILLEGAL - Illegal Callback
Operation . . . . . . . . . . . . . . . . . . . . . . 244 Operation . . . . . . . . . . . . . . . . . . . . . . 245
16. Security Considerations . . . . . . . . . . . . . . . . . 245 16. Security Considerations . . . . . . . . . . . . . . . . . 246
17. IANA Considerations . . . . . . . . . . . . . . . . . . . 246 17. IANA Considerations . . . . . . . . . . . . . . . . . . . 247
17.1. Named Attribute Definition . . . . . . . . . . . . . . 246 17.1. Named Attribute Definition . . . . . . . . . . . . . . . 247
17.2. ONC RPC Network Identifiers (netids) . . . . . . . . . 246 17.2. ONC RPC Network Identifiers (netids) . . . . . . . . . . 247
18. RPC definition file . . . . . . . . . . . . . . . . . . . 247 18. RPC definition file . . . . . . . . . . . . . . . . . . . 248
19. Bibliography . . . . . . . . . . . . . . . . . . . . . . 279 19. Normative References . . . . . . . . . . . . . . . . . . . 280
20. Authors . . . . . . . . . . . . . . . . . . . . . . . . . 285 20. Informative References . . . . . . . . . . . . . . . . . . 281
20.1. Editor's Address . . . . . . . . . . . . . . . . . . . 285 21. Authors . . . . . . . . . . . . . . . . . . . . . . . . . 285
20.2. Authors' Addresses . . . . . . . . . . . . . . . . . . 285 21.1. Editor's Address . . . . . . . . . . . . . . . . . . . . 285
20.3. Acknowledgements . . . . . . . . . . . . . . . . . . . 286 21.2. Authors' Addresses . . . . . . . . . . . . . . . . . . . 285
21. Full Copyright Statement . . . . . . . . . . . . . . . . 287 21.3. Acknowledgements . . . . . . . . . . . . . . . . . . . . 286
22. Full Copyright Statement . . . . . . . . . . . . . . . . . 287
Draft Specification NFS version 4 Protocol September 2002 Draft Specification NFS version 4 Protocol October 2002
1. Introduction 1. Changes since RFC3010
This definition of the NFS version 4 protocol replaces or obsoletes
the definition present in [RFC3010]. While portions of the two
documents have remained the same, there have been substantive changes
in others. The changes made between [RFC3010] and this document
represent implementation experience and further review of the
protocol. While some modifications were made for ease of
implementation or clarification, most updates represent errors or
situations where the [RFC3010] definition were untenable.
The following list is not all inclusive of all changes but presents
some of the most notable changes or additions made:
o The state model has added an open_owner4 identifier. This was
done to accommodate Posix based clients and the model they use
for file locking. For Posix clients, an open_owner4 would
correspond to a file descriptor potentially shared amongst a set
of processes and the lock_owner4 identifier would correspond to
a process that is locking a file.
o Clarifications and error conditions were added for the handling
of the owner and group attributes. Since these attributes are
string based (as opposed to the numeric uid/gid of previous
versions of NFS), translations may not be available and hence
the changes made.
o Clarifications for the ACL and mode attributes to address
evaluation and partial support.
o For identifiers that are defined as XDR opaque, limits were set
on their size.
o Added the mounted_on_filed attribute to allow Posix clients to
correctly construct local mounts.
o Modified the SETCLIENTID/SETCLIENTID_CONFIRM operations to deal
correctly with confirmation details along with adding the
ability to specify new client callback information. Also added
clarification of the callback information itself.
o Added a new operation LOCKOWNER_RELEASE to enable notifying the
server that a lock_owner4 will no longer be used by the client.
o RENEW operation changes to identify the client correctly and
allow for additional error returns.
o Verify error return possibilities for all operations.
o Remove use of the pathname4 data type from LOOKUP and OPEN in
favor of having the client construct a sequence of LOOKUP
Draft Specification NFS version 4 Protocol October 2002
operations to acheive the same effect.
1.1. Introduction
The NFS version 4 protocol is a further revision of the NFS protocol The NFS version 4 protocol is a further revision of the NFS protocol
defined already by versions 2 [RFC1094] and 3 [RFC1813]. It retains defined already by versions 2 [RFC1094] and 3 [RFC1813]. It retains
the essential characteristics of previous versions: design for easy the essential characteristics of previous versions: design for easy
recovery, independent of transport protocols, operating systems and recovery, independent of transport protocols, operating systems and
filesystems, simplicity, and good performance. The NFS version 4 filesystems, simplicity, and good performance. The NFS version 4
revision has the following goals: revision has the following goals:
o Improved access and good performance on the Internet. o Improved access and good performance on the Internet.
skipping to change at page 7, line 41 skipping to change at page 8, line 43
The protocol features a filesystem model that provides a useful, The protocol features a filesystem model that provides a useful,
common set of features that does not unduly favor one filesystem common set of features that does not unduly favor one filesystem
or operating system over another. or operating system over another.
o Designed for protocol extensions. o Designed for protocol extensions.
The protocol is designed to accept standard extensions that do The protocol is designed to accept standard extensions that do
not compromise backward compatibility. not compromise backward compatibility.
1.1. Inconsistencies of this Document with Section 18 1.2. Inconsistencies of this Document with Section 18
Section 18, RPC Definition File, contains the definitions in XDR Section 18, RPC Definition File, contains the definitions in XDR
description language of the constructs used by the protocol. Prior description language of the constructs used by the protocol. Prior
to Section 18, several of the constructs are reproduced for purposes to Section 18, several of the constructs are reproduced for purposes
of explanation. The reader is warned of the possibility of errors in of explanation. The reader is warned of the possibility of errors in
the reproduced constructs outside of Section 18. For any part of the the reproduced constructs outside of Section 18. For any part of the
document that is inconsistent with Section 18, Section 18 is to be document that is inconsistent with Section 18, Section 18 is to be
considered authoritative. considered authoritative.
Draft Specification NFS version 4 Protocol September 2002 Draft Specification NFS version 4 Protocol October 2002
1.2. Overview of NFS version 4 Features 1.3. Overview of NFS version 4 Features
To provide a reasonable context for the reader, the major features of To provide a reasonable context for the reader, the major features of
NFS version 4 protocol will be reviewed in brief. This will be done NFS version 4 protocol will be reviewed in brief. This will be done
to provide an appropriate context for both the reader who is familiar to provide an appropriate context for both the reader who is familiar
with the previous versions of the NFS protocol and the reader that is with the previous versions of the NFS protocol and the reader that is
new to the NFS protocols. For the reader new to the NFS protocols, new to the NFS protocols. For the reader new to the NFS protocols,
there is still a fundamental knowledge that is expected. The reader there is still a fundamental knowledge that is expected. The reader
should be familiar with the XDR and RPC protocols as described in should be familiar with the XDR and RPC protocols as described in
[RFC1831] and [RFC1832]. A basic knowledge of filesystems and [RFC1831] and [RFC1832]. A basic knowledge of filesystems and
distributed filesystems is expected as well. distributed filesystems is expected as well.
1.2.1. RPC and Security 1.3.1. RPC and Security
As with previous versions of NFS, the External Data Representation As with previous versions of NFS, the External Data Representation
(XDR) and Remote Procedure Call (RPC) mechanisms used for the NFS (XDR) and Remote Procedure Call (RPC) mechanisms used for the NFS
version 4 protocol are those defined in [RFC1831] and [RFC1832]. To version 4 protocol are those defined in [RFC1831] and [RFC1832]. To
meet end to end security requirements, the RPCSEC_GSS framework meet end to end security requirements, the RPCSEC_GSS framework
[RFC2203] will be used to extend the basic RPC security. With the [RFC2203] will be used to extend the basic RPC security. With the
use of RPCSEC_GSS, various mechanisms can be provided to offer use of RPCSEC_GSS, various mechanisms can be provided to offer
authentication, integrity, and privacy to the NFS version 4 protocol. authentication, integrity, and privacy to the NFS version 4 protocol.
Kerberos V5 will be used as described in [RFC1964] to provide one Kerberos V5 will be used as described in [RFC1964] to provide one
security framework. The LIPKEY GSS-API mechanism described in security framework. The LIPKEY GSS-API mechanism described in
skipping to change at page 8, line 43 skipping to change at page 9, line 43
version 4 security. version 4 security.
To enable in-band security negotiation, the NFS version 4 protocol To enable in-band security negotiation, the NFS version 4 protocol
has added a new operation which provides the client a method of has added a new operation which provides the client a method of
querying the server about its policies regarding which security querying the server about its policies regarding which security
mechanisms must be used for access to the server's filesystem mechanisms must be used for access to the server's filesystem
resources. With this, the client can securely match the security resources. With this, the client can securely match the security
mechanism that meets the policies specified at both the client and mechanism that meets the policies specified at both the client and
server. server.
1.2.2. Procedure and Operation Structure 1.3.2. Procedure and Operation Structure
A significant departure from the previous versions of the NFS A significant departure from the previous versions of the NFS
protocol is the introduction of the COMPOUND procedure. For the NFS protocol is the introduction of the COMPOUND procedure. For the NFS
version 4 protocol, there are two RPC procedures, NULL and COMPOUND. version 4 protocol, there are two RPC procedures, NULL and COMPOUND.
The COMPOUND procedure is defined in terms of operations and these The COMPOUND procedure is defined in terms of operations and these
operations correspond more closely to the traditional NFS procedures. operations correspond more closely to the traditional NFS procedures.
With the use of the COMPOUND procedure, the client is able to build With the use of the COMPOUND procedure, the client is able to build
simple or complex requests. These COMPOUND requests allow for a simple or complex requests. These COMPOUND requests allow for a
reduction in the number of RPCs needed for logical filesystem reduction in the number of RPCs needed for logical filesystem
operations. For example, without previous contact with a server a operations. For example, without previous contact with a server a
client will be able to read data from a file in one request by client will be able to read data from a file in one request by
combining LOOKUP, OPEN, and READ operations in a single COMPOUND RPC. combining LOOKUP, OPEN, and READ operations in a single COMPOUND RPC.
With previous versions of the NFS protocol, this type of single With previous versions of the NFS protocol, this type of single
Draft Specification NFS version 4 Protocol September 2002 Draft Specification NFS version 4 Protocol October 2002
request was not possible. request was not possible.
The model used for COMPOUND is very simple. There is no logical OR The model used for COMPOUND is very simple. There is no logical OR
or ANDing of operations. The operations combined within a COMPOUND or ANDing of operations. The operations combined within a COMPOUND
request are evaluated in order by the server. Once an operation request are evaluated in order by the server. Once an operation
returns a failing result, the evaluation ends and the results of all returns a failing result, the evaluation ends and the results of all
evaluated operations are returned to the client. evaluated operations are returned to the client.
The NFS version 4 protocol continues to have the client refer to a The NFS version 4 protocol continues to have the client refer to a
file or directory at the server by a "filehandle". The COMPOUND file or directory at the server by a "filehandle". The COMPOUND
procedure has a method of passing a filehandle from one operation to procedure has a method of passing a filehandle from one operation to
another within the sequence of operations. There is a concept of a another within the sequence of operations. There is a concept of a
"current filehandle" and "saved filehandle". Most operations use the "current filehandle" and "saved filehandle". Most operations use the
"current filehandle" as the filesystem object to operate upon. The "current filehandle" as the filesystem object to operate upon. The
"saved filehandle" is used as temporary filehandle storage within a "saved filehandle" is used as temporary filehandle storage within a
COMPOUND procedure as well as an additional operand for certain COMPOUND procedure as well as an additional operand for certain
operations. operations.
1.2.3. Filesystem Model 1.3.3. Filesystem Model
The general filesystem model used for the NFS version 4 protocol is The general filesystem model used for the NFS version 4 protocol is
the same as previous versions. The server filesystem is hierarchical the same as previous versions. The server filesystem is hierarchical
with the regular files contained within being treated as opaque byte with the regular files contained within being treated as opaque byte
streams. In a slight departure, file and directory names are encoded streams. In a slight departure, file and directory names are encoded
with UTF-8 to deal with the basics of internationalization. with UTF-8 to deal with the basics of internationalization.
The NFS version 4 protocol does not require a separate protocol to The NFS version 4 protocol does not require a separate protocol to
provide for the initial mapping between path name and filehandle. provide for the initial mapping between path name and filehandle.
Instead of using the older MOUNT protocol for this mapping, the Instead of using the older MOUNT protocol for this mapping, the
server provides a ROOT filehandle that represents the logical root or server provides a ROOT filehandle that represents the logical root or
top of the filesystem tree provided by the server. The server top of the filesystem tree provided by the server. The server
provides multiple filesystems by gluing them together with pseudo provides multiple filesystems by gluing them together with pseudo
filesystems. These pseudo filesystems provide for potential gaps in filesystems. These pseudo filesystems provide for potential gaps in
the path names between real filesystems. the path names between real filesystems.
1.2.3.1. Filehandle Types 1.3.3.1. Filehandle Types
In previous versions of the NFS protocol, the filehandle provided by In previous versions of the NFS protocol, the filehandle provided by
the server was guaranteed to be valid or persistent for the lifetime the server was guaranteed to be valid or persistent for the lifetime
of the filesystem object to which it referred. For some server of the filesystem object to which it referred. For some server
implementations, this persistence requirement has been difficult to implementations, this persistence requirement has been difficult to
meet. For the NFS version 4 protocol, this requirement has been meet. For the NFS version 4 protocol, this requirement has been
relaxed by introducing another type of filehandle, volatile. With relaxed by introducing another type of filehandle, volatile. With
persistent and volatile filehandle types, the server implementation persistent and volatile filehandle types, the server implementation
can match the abilities of the filesystem at the server along with can match the abilities of the filesystem at the server along with
the operating environment. The client will have knowledge of the the operating environment. The client will have knowledge of the
type of filehandle being provided by the server and can be prepared type of filehandle being provided by the server and can be prepared
to deal with the semantics of each. to deal with the semantics of each.
Draft Specification NFS version 4 Protocol September 2002 Draft Specification NFS version 4 Protocol October 2002
1.2.3.2. Attribute Types 1.3.3.2. Attribute Types
The NFS version 4 protocol introduces three classes of filesystem or The NFS version 4 protocol introduces three classes of filesystem or
file attributes. Like the additional filehandle type, the file attributes. Like the additional filehandle type, the
classification of file attributes has been done to ease server classification of file attributes has been done to ease server
implementations along with extending the overall functionality of the implementations along with extending the overall functionality of the
NFS protocol. This attribute model is structured to be extensible NFS protocol. This attribute model is structured to be extensible
such that new attributes can be introduced in minor revisions of the such that new attributes can be introduced in minor revisions of the
protocol without requiring significant rework. protocol without requiring significant rework.
The three classifications are: mandatory, recommended and named The three classifications are: mandatory, recommended and named
skipping to change at page 10, line 43 skipping to change at page 11, line 43
directory or file and referred to by a string name. Named attributes directory or file and referred to by a string name. Named attributes
are meant to be used by client applications as a method to associate are meant to be used by client applications as a method to associate
application specific data with a regular file or directory. application specific data with a regular file or directory.
One significant addition to the recommended set of file attributes is One significant addition to the recommended set of file attributes is
the Access Control List (ACL) attribute. This attribute provides for the Access Control List (ACL) attribute. This attribute provides for
directory and file access control beyond the model used in previous directory and file access control beyond the model used in previous
versions of the NFS protocol. The ACL definition allows for versions of the NFS protocol. The ACL definition allows for
specification of user and group level access control. specification of user and group level access control.
1.2.3.3. Filesystem Replication and Migration 1.3.3.3. Filesystem Replication and Migration
With the use of a special file attribute, the ability to migrate or With the use of a special file attribute, the ability to migrate or
replicate server filesystems is enabled within the protocol. The replicate server filesystems is enabled within the protocol. The
filesystem locations attribute provides a method for the client to filesystem locations attribute provides a method for the client to
probe the server about the location of a filesystem. In the event of probe the server about the location of a filesystem. In the event of
a migration of a filesystem, the client will receive an error when a migration of a filesystem, the client will receive an error when
operating on the filesystem and it can then query as to the new file operating on the filesystem and it can then query as to the new file
system location. Similar steps are used for replication, the client system location. Similar steps are used for replication, the client
is able to query the server for the multiple available locations of a is able to query the server for the multiple available locations of a
particular filesystem. From this information, the client can use its particular filesystem. From this information, the client can use its
own policies to access the appropriate filesystem location. own policies to access the appropriate filesystem location.
Draft Specification NFS version 4 Protocol September 2002 Draft Specification NFS version 4 Protocol October 2002
1.2.4. OPEN and CLOSE 1.3.4. OPEN and CLOSE
The NFS version 4 protocol introduces OPEN and CLOSE operations. The The NFS version 4 protocol introduces OPEN and CLOSE operations. The
OPEN operation provides a single point where file lookup, creation, OPEN operation provides a single point where file lookup, creation,
and share semantics can be combined. The CLOSE operation also and share semantics can be combined. The CLOSE operation also
provides for the release of state accumulated by OPEN. provides for the release of state accumulated by OPEN.
1.2.5. File locking 1.3.5. File locking
With the NFS version 4 protocol, the support for byte range file With the NFS version 4 protocol, the support for byte range file
locking is part of the NFS protocol. The file locking support is locking is part of the NFS protocol. The file locking support is
structured so that an RPC callback mechanism is not required. This structured so that an RPC callback mechanism is not required. This
is a departure from the previous versions of the NFS file locking is a departure from the previous versions of the NFS file locking
protocol, Network Lock Manager (NLM). The state associated with file protocol, Network Lock Manager (NLM). The state associated with file
locks is maintained at the server under a lease-based model. The locks is maintained at the server under a lease-based model. The
server defines a single lease period for all state held by a NFS server defines a single lease period for all state held by a NFS
client. If the client does not renew its lease within the defined client. If the client does not renew its lease within the defined
period, all state associated with the client's lease may be released period, all state associated with the client's lease may be released
by the server. The client may renew its lease with use of the RENEW by the server. The client may renew its lease with use of the RENEW
operation or implicitly by use of other operations (primarily READ). operation or implicitly by use of other operations (primarily READ).
1.2.6. Client Caching and Delegation 1.3.6. Client Caching and Delegation
The file, attribute, and directory caching for the NFS version 4 The file, attribute, and directory caching for the NFS version 4
protocol is similar to previous versions. Attributes and directory protocol is similar to previous versions. Attributes and directory
information are cached for a duration determined by the client. At information are cached for a duration determined by the client. At
the end of a predefined timeout, the client will query the server to the end of a predefined timeout, the client will query the server to
see if the related filesystem object has been updated. see if the related filesystem object has been updated.
For file data, the client checks its cache validity when the file is For file data, the client checks its cache validity when the file is
opened. A query is sent to the server to determine if the file has opened. A query is sent to the server to determine if the file has
been changed. Based on this information, the client determines if been changed. Based on this information, the client determines if
skipping to change at page 12, line 5 skipping to change at page 13, line 5
client. When the server grants a delegation for a file to a client, client. When the server grants a delegation for a file to a client,
the client is guaranteed certain semantics with respect to the the client is guaranteed certain semantics with respect to the
sharing of that file with other clients. At OPEN, the server may sharing of that file with other clients. At OPEN, the server may
provide the client either a read or write delegation for the file. provide the client either a read or write delegation for the file.
If the client is granted a read delegation, it is assured that no If the client is granted a read delegation, it is assured that no
other client has the ability to write to the file for the duration of other client has the ability to write to the file for the duration of
the delegation. If the client is granted a write delegation, the the delegation. If the client is granted a write delegation, the
client is assured that no other client has read or write access to client is assured that no other client has read or write access to
the file. the file.
Draft Specification NFS version 4 Protocol September 2002 Draft Specification NFS version 4 Protocol October 2002
Delegations can be recalled by the server. If another client Delegations can be recalled by the server. If another client
requests access to the file in such a way that the access conflicts requests access to the file in such a way that the access conflicts
with the granted delegation, the server is able to notify the initial with the granted delegation, the server is able to notify the initial
client and recall the delegation. This requires that a callback path client and recall the delegation. This requires that a callback path
exist between the server and client. If this callback path does not exist between the server and client. If this callback path does not
exist, then delegations can not be granted. The essence of a exist, then delegations can not be granted. The essence of a
delegation is that it allows the client to locally service operations delegation is that it allows the client to locally service operations
such as OPEN, CLOSE, LOCK, LOCKU, READ, WRITE without immediate such as OPEN, CLOSE, LOCK, LOCKU, READ, WRITE without immediate
interaction with the server. interaction with the server.
1.3. General Definitions 1.4. General Definitions
The following definitions are provided for the purpose of providing The following definitions are provided for the purpose of providing
an appropriate context for the reader. an appropriate context for the reader.
Client The "client" is the entity that accesses the NFS server's Client The "client" is the entity that accesses the NFS server's
resources. The client may be an application which contains resources. The client may be an application which contains
the logic to access the NFS server directly. The client the logic to access the NFS server directly. The client
may also be the traditional operating system client remote may also be the traditional operating system client remote
filesystem services for a set of applications. filesystem services for a set of applications.
skipping to change at page 13, line 5 skipping to change at page 14, line 5
alleviate the expense a server would have in maintaining alleviate the expense a server would have in maintaining
state about variable length leases across server failures. state about variable length leases across server failures.
Lock The term "lock" is used to refer to both record (byte- Lock The term "lock" is used to refer to both record (byte-
range) locks as well as share reservations unless range) locks as well as share reservations unless
specifically stated otherwise. specifically stated otherwise.
Server The "Server" is the entity responsible for coordinating Server The "Server" is the entity responsible for coordinating
client access to a set of filesystems. client access to a set of filesystems.
Draft Specification NFS version 4 Protocol September 2002 Draft Specification NFS version 4 Protocol October 2002
Stable Storage Stable Storage
NFS version 4 servers must be able to recover without data NFS version 4 servers must be able to recover without data
loss from multiple power failures (including cascading loss from multiple power failures (including cascading
power failures, that is, several power failures in quick power failures, that is, several power failures in quick
succession), operating system failures, and hardware succession), operating system failures, and hardware
failure of components other than the storage medium itself failure of components other than the storage medium itself
(for example, disk, nonvolatile RAM). (for example, disk, nonvolatile RAM).
Some examples of stable storage that are allowable for an Some examples of stable storage that are allowable for an
skipping to change at page 14, line 5 skipping to change at page 15, line 5
defines the open and locking state provided by the server defines the open and locking state provided by the server
for a specific open or lock owner for a specific file. for a specific open or lock owner for a specific file.
Stateids composed of all bits 0 or all bits 1 have special Stateids composed of all bits 0 or all bits 1 have special
meaning and are reserved values. meaning and are reserved values.
Verifier A 64-bit quantity generated by the client that the server Verifier A 64-bit quantity generated by the client that the server
can use to determine if the client has restarted and lost can use to determine if the client has restarted and lost
all previous lock state. all previous lock state.
Draft Specification NFS version 4 Protocol September 2002 Draft Specification NFS version 4 Protocol October 2002
2. Protocol Data Types 2. Protocol Data Types
The syntax and semantics to describe the data types of the NFS The syntax and semantics to describe the data types of the NFS
version 4 protocol are defined in the XDR [RFC1832] and RPC [RFC1831] version 4 protocol are defined in the XDR [RFC1832] and RPC [RFC1831]
documents. The next sections build upon the XDR data types to define documents. The next sections build upon the XDR data types to define
types and structures specific to this protocol. types and structures specific to this protocol.
2.1. Basic Data Types 2.1. Basic Data Types
skipping to change at page 15, line 5 skipping to change at page 16, line 5
mode4 typedef uint32_t mode4; mode4 typedef uint32_t mode4;
Mode attribute data type Mode attribute data type
nfs_cookie4 typedef uint64_t nfs_cookie4; nfs_cookie4 typedef uint64_t nfs_cookie4;
Opaque cookie value for READDIR Opaque cookie value for READDIR
nfs_fh4 typedef opaque nfs_fh4<NFS4_FHSIZE>; nfs_fh4 typedef opaque nfs_fh4<NFS4_FHSIZE>;
Filehandle definition; NFS4_FHSIZE is defined as 128 Filehandle definition; NFS4_FHSIZE is defined as 128
Draft Specification NFS version 4 Protocol September 2002 Draft Specification NFS version 4 Protocol October 2002
nfs_ftype4 enum nfs_ftype4; nfs_ftype4 enum nfs_ftype4;
Various defined file types Various defined file types
nfsstat4 enum nfsstat4; nfsstat4 enum nfsstat4;
Return value for operations Return value for operations
offset4 typedef uint64_t offset4; offset4 typedef uint64_t offset4;
Various offset designations (READ, WRITE, LOCK, COMMIT) Various offset designations (READ, WRITE, LOCK, COMMIT)
skipping to change at page 16, line 5 skipping to change at page 17, line 5
The nfstime4 structure gives the number of seconds and The nfstime4 structure gives the number of seconds and
nanoseconds since midnight or 0 hour January 1, 1970 Coordinated nanoseconds since midnight or 0 hour January 1, 1970 Coordinated
Universal Time (UTC). Values greater than zero for the seconds Universal Time (UTC). Values greater than zero for the seconds
field denote dates after the 0 hour January 1, 1970. Values field denote dates after the 0 hour January 1, 1970. Values
less than zero for the seconds field denote dates before the 0 less than zero for the seconds field denote dates before the 0
hour January 1, 1970. In both cases, the nseconds field is to hour January 1, 1970. In both cases, the nseconds field is to
be added to the seconds field for the final time representation. be added to the seconds field for the final time representation.
For example, if the time to be represented is one-half second For example, if the time to be represented is one-half second
Draft Specification NFS version 4 Protocol September 2002 Draft Specification NFS version 4 Protocol October 2002
before 0 hour January 1, 1970, the seconds field would have a before 0 hour January 1, 1970, the seconds field would have a
value of negative one (-1) and the nseconds fields would have a value of negative one (-1) and the nseconds fields would have a
value of one-half second (500000000). Values greater than value of one-half second (500000000). Values greater than
999,999,999 for nseconds are considered invalid. 999,999,999 for nseconds are considered invalid.
This data type is used to pass time and date information. A This data type is used to pass time and date information. A
server converts to and from its local representation of time server converts to and from its local representation of time
when processing time values, preserving as much accuracy as when processing time values, preserving as much accuracy as
possible. If the precision of timestamps stored for a filesystem possible. If the precision of timestamps stored for a filesystem
skipping to change at page 17, line 5 skipping to change at page 18, line 5
This data type represents additional information for the device This data type represents additional information for the device
file types NF4CHR and NF4BLK. file types NF4CHR and NF4BLK.
fsid4 fsid4
struct fsid4 { struct fsid4 {
uint64_t major; uint64_t major;
uint64_t minor; uint64_t minor;
Draft Specification NFS version 4 Protocol September 2002 Draft Specification NFS version 4 Protocol October 2002
}; };
This type is the filesystem identifier that is used as a This type is the filesystem identifier that is used as a
mandatory attribute. mandatory attribute.
fs_location4 fs_location4
struct fs_location4 { struct fs_location4 {
utf8string server<>; utf8string server<>;
skipping to change at page 18, line 5 skipping to change at page 19, line 5
+-----------+-----------+-----------+-- +-----------+-----------+-----------+--
| count | 31 .. 0 | 63 .. 32 | | count | 31 .. 0 | 63 .. 32 |
+-----------+-----------+-----------+-- +-----------+-----------+-----------+--
change_info4 change_info4
struct change_info4 { struct change_info4 {
bool atomic; bool atomic;
changeid4 before; changeid4 before;
Draft Specification NFS version 4 Protocol September 2002 Draft Specification NFS version 4 Protocol October 2002
changeid4 after; changeid4 after;
}; };
This structure is used with the CREATE, LINK, REMOVE, RENAME This structure is used with the CREATE, LINK, REMOVE, RENAME
operations to let the client know the value of the change operations to let the client know the value of the change
attribute for the directory in which the target filesystem attribute for the directory in which the target filesystem
object resides. object resides.
clientaddr4 clientaddr4
skipping to change at page 19, line 5 skipping to change at page 20, line 5
For TCP over IPv4 and for UDP over IPv6, the format of r_addr is For TCP over IPv4 and for UDP over IPv6, the format of r_addr is
the US-ASCII string: the US-ASCII string:
x1:x2:x3:x4:x5:x6:x7:x8.p1.p2 x1:x2:x3:x4:x5:x6:x7:x8.p1.p2
The suffix "p1.p2" is the service port, and is computed the same The suffix "p1.p2" is the service port, and is computed the same
way as with universal addresses for TCP and UDP over IPv4. The way as with universal addresses for TCP and UDP over IPv4. The
prefix, "x1:x2:x3:x4:x5:x6:x7:x8", is the standard textual form prefix, "x1:x2:x3:x4:x5:x6:x7:x8", is the standard textual form
for representing an IPv6 address as defined in Section 2.2 of for representing an IPv6 address as defined in Section 2.2 of
Draft Specification NFS version 4 Protocol September 2002 Draft Specification NFS version 4 Protocol October 2002
[RFC1884]. Additionally, the two alternative forms specified in [RFC1884]. Additionally, the two alternative forms specified in
Section 2.2 of [RFC1884] are also acceptable. Section 2.2 of [RFC1884] are also acceptable.
For TCP over IPv6 the value of r_netid is the string "tcp6". For TCP over IPv6 the value of r_netid is the string "tcp6".
For UDP over IPv6 the value of r_netid is the string "udp6". For UDP over IPv6 the value of r_netid is the string "udp6".
cb_client4 cb_client4
struct cb_client4 { struct cb_client4 {
skipping to change at page 20, line 5 skipping to change at page 21, line 5
lock_owner4 lock_owner4
struct lock_owner4 { struct lock_owner4 {
clientid4 clientid; clientid4 clientid;
opaque owner<NFS4_OPAQUE_LIMIT>; opaque owner<NFS4_OPAQUE_LIMIT>;
}; };
This structure is used to identify the owner of file locking This structure is used to identify the owner of file locking
state. NFS4_OPAQUE_LIMIT is defined as 1024. state. NFS4_OPAQUE_LIMIT is defined as 1024.
Draft Specification NFS version 4 Protocol September 2002 Draft Specification NFS version 4 Protocol October 2002
open_to_lock_owner4 open_to_lock_owner4
struct open_to_lock_owner4 { struct open_to_lock_owner4 {
seqid4 open_seqid; seqid4 open_seqid;
stateid4 open_stateid; stateid4 open_stateid;
seqid4 lock_seqid; seqid4 lock_seqid;
lock_owner4 lock_owner; lock_owner4 lock_owner;
}; };
skipping to change at page 21, line 5 skipping to change at page 22, line 5
This structure is used for the various state sharing mechanisms This structure is used for the various state sharing mechanisms
between the client and server. For the client, this data between the client and server. For the client, this data
structure is read-only. The starting value of the seqid field structure is read-only. The starting value of the seqid field
is undefined. The server is required to increment the seqid is undefined. The server is required to increment the seqid
field monotonically at each transition of the stateid. This is field monotonically at each transition of the stateid. This is
important since the client will inspect the seqid in OPEN important since the client will inspect the seqid in OPEN
stateids to determine the order of OPEN processing done by the stateids to determine the order of OPEN processing done by the
server. server.
Draft Specification NFS version 4 Protocol September 2002 Draft Specification NFS version 4 Protocol October 2002
3. RPC and Security Flavor 3. RPC and Security Flavor
The NFS version 4 protocol is a Remote Procedure Call (RPC) The NFS version 4 protocol is a Remote Procedure Call (RPC)
application that uses RPC version 2 and the corresponding eXternal application that uses RPC version 2 and the corresponding eXternal
Data Representation (XDR) as defined in [RFC1831] and [RFC1832]. The Data Representation (XDR) as defined in [RFC1831] and [RFC1832]. The
RPCSEC_GSS security flavor as defined in [RFC2203] MUST be used as RPCSEC_GSS security flavor as defined in [RFC2203] MUST be used as
the mechanism to deliver stronger security for the NFS version 4 the mechanism to deliver stronger security for the NFS version 4
protocol. protocol.
skipping to change at page 22, line 5 skipping to change at page 23, line 5
retry a request unless one or both of the following are true: retry a request unless one or both of the following are true:
o The transport connection has been broken o The transport connection has been broken
o The procedure being retried is the NULL procedure o The procedure being retried is the NULL procedure
Since reliable transports, such as TCP, do not always synchronously Since reliable transports, such as TCP, do not always synchronously
inform a peer when the other peer has broken the connection (for inform a peer when the other peer has broken the connection (for
example, when an NFS server reboots), so the NFS version 4 client may example, when an NFS server reboots), so the NFS version 4 client may
Draft Specification NFS version 4 Protocol September 2002 Draft Specification NFS version 4 Protocol October 2002
want to actively "probe" the connection to see if has been broken. want to actively "probe" the connection to see if has been broken.
Use of the NULL procedure is one recommended way to do so. So, when Use of the NULL procedure is one recommended way to do so. So, when
a client experiences a remote procedure call timeout (of some a client experiences a remote procedure call timeout (of some
arbitrary implementation specific amount), rather than retrying the arbitrary implementation specific amount), rather than retrying the
remote procedure call, it could instead issue a NULL procedure call remote procedure call, it could instead issue a NULL procedure call
to the server. If the server has died, the transport connection break to the server. If the server has died, the transport connection break
will eventually be indicated to the NFS version 4 client. The client will eventually be indicated to the NFS version 4 client. The client
can then reconnect, and then retry the original request. If the NULL can then reconnect, and then retry the original request. If the NULL
procedure call gets a response, the connection has not broken. The procedure call gets a response, the connection has not broken. The
skipping to change at page 23, line 5 skipping to change at page 24, line 5
1 == number of pseudo flavor 1 == number of pseudo flavor
2 == name of pseudo flavor 2 == name of pseudo flavor
3 == mechanism's OID 3 == mechanism's OID
4 == mechanism's algorithm(s) 4 == mechanism's algorithm(s)
5 == RPCSEC_GSS service 5 == RPCSEC_GSS service
1 2 3 4 5 1 2 3 4 5
----------------------------------------------------------------------- -----------------------------------------------------------------------
Draft Specification NFS version 4 Protocol September 2002 Draft Specification NFS version 4 Protocol October 2002
390003 krb5 1.2.840.113554.1.2.2 DES MAC MD5 rpc_gss_svc_none 390003 krb5 1.2.840.113554.1.2.2 DES MAC MD5 rpc_gss_svc_none
390004 krb5i 1.2.840.113554.1.2.2 DES MAC MD5 rpc_gss_svc_integrity 390004 krb5i 1.2.840.113554.1.2.2 DES MAC MD5 rpc_gss_svc_integrity
390005 krb5p 1.2.840.113554.1.2.2 DES MAC MD5 rpc_gss_svc_privacy 390005 krb5p 1.2.840.113554.1.2.2 DES MAC MD5 rpc_gss_svc_privacy
for integrity, for integrity,
and 56 bit DES and 56 bit DES
for privacy. for privacy.
Note that the pseudo flavor is presented here as a mapping aid to the Note that the pseudo flavor is presented here as a mapping aid to the
implementor. Because this NFS protocol includes a method to implementor. Because this NFS protocol includes a method to
skipping to change at page 24, line 5 skipping to change at page 25, line 5
LIPKEY's GSS_Wrap() and GSS_GetMIC() by RPCSEC_GSS will use a quality LIPKEY's GSS_Wrap() and GSS_GetMIC() by RPCSEC_GSS will use a quality
of protection value of 0 (zero). See section 5.2 of [RFC2025] for an of protection value of 0 (zero). See section 5.2 of [RFC2025] for an
explanation. explanation.
LIPKEY uses SPKM-3 to create a secure channel in which to pass a user LIPKEY uses SPKM-3 to create a secure channel in which to pass a user
name and password from the client to the server. Once the user name name and password from the client to the server. Once the user name
and password have been accepted by the server, calls to the LIPKEY and password have been accepted by the server, calls to the LIPKEY
context are redirected to the SPKM-3 context. See [RFC2847] for more context are redirected to the SPKM-3 context. See [RFC2847] for more
details. details.
Draft Specification NFS version 4 Protocol September 2002 Draft Specification NFS version 4 Protocol October 2002
3.2.1.3. SPKM-3 as a security triple 3.2.1.3. SPKM-3 as a security triple
The SPKM-3 GSS-API mechanism as described in [RFC2847] MUST be The SPKM-3 GSS-API mechanism as described in [RFC2847] MUST be
implemented and provide the following security triples. The implemented and provide the following security triples. The
definition of the columns matches the previous subsection "Kerberos definition of the columns matches the previous subsection "Kerberos
V5 as security triple". V5 as security triple".
1 2 3 4 5 1 2 3 4 5
----------------------------------------------------------------------- -----------------------------------------------------------------------
skipping to change at page 25, line 5 skipping to change at page 26, line 5
intercepting the negotiation sequence and forcing the client and intercepting the negotiation sequence and forcing the client and
server to choose a lower level of security than required or desired. server to choose a lower level of security than required or desired.
See the section "Security Considerations" for further discussion. See the section "Security Considerations" for further discussion.
3.3.1. SECINFO 3.3.1. SECINFO
The new SECINFO operation will allow the client to determine, on a The new SECINFO operation will allow the client to determine, on a
per filehandle basis, what security triple is to be used for server per filehandle basis, what security triple is to be used for server
access. In general, the client will not have to use the SECINFO access. In general, the client will not have to use the SECINFO
Draft Specification NFS version 4 Protocol September 2002 Draft Specification NFS version 4 Protocol October 2002
operation except during initial communication with the server or when operation except during initial communication with the server or when
the client crosses policy boundaries at the server. It is possible the client crosses policy boundaries at the server. It is possible
that the server's policies change during the client's interaction that the server's policies change during the client's interaction
therefore forcing the client to negotiate a new security triple. therefore forcing the client to negotiate a new security triple.
3.3.2. Security Error 3.3.2. Security Error
Based on the assumption that each NFS version 4 client and server Based on the assumption that each NFS version 4 client and server
must support a minimum set of security (i.e. LIPKEY, SPKM-3, and must support a minimum set of security (i.e. LIPKEY, SPKM-3, and
skipping to change at page 26, line 5 skipping to change at page 27, line 5
Network Information System domain or a DNS domain. Network Information System domain or a DNS domain.
Because LIPKEY is layered over SPKM-3, it is permissible for the Because LIPKEY is layered over SPKM-3, it is permissible for the
server to use SPKM-3 and not LIPKEY for the callback even if the server to use SPKM-3 and not LIPKEY for the callback even if the
client used LIPKEY for SETCLIENTID. client used LIPKEY for SETCLIENTID.
Regardless of what security mechanism under RPCSEC_GSS is being used, Regardless of what security mechanism under RPCSEC_GSS is being used,
the NFS server, MUST identify itself in GSS-API via a the NFS server, MUST identify itself in GSS-API via a
GSS_C_NT_HOSTBASED_SERVICE name type. GSS_C_NT_HOSTBASED_SERVICE GSS_C_NT_HOSTBASED_SERVICE name type. GSS_C_NT_HOSTBASED_SERVICE
Draft Specification NFS version 4 Protocol September 2002 Draft Specification NFS version 4 Protocol October 2002
names are of the form: names are of the form:
service@hostname service@hostname
For NFS, the "service" element is For NFS, the "service" element is
nfs nfs
Implementations of security mechanisms will convert nfs@hostname to Implementations of security mechanisms will convert nfs@hostname to
skipping to change at page 27, line 5 skipping to change at page 28, line 5
requirements beyond a certificate for the target, and the requirements beyond a certificate for the target, and the
expectation is that existing password infrastructure can be expectation is that existing password infrastructure can be
leveraged for the initiator. In some environments, a per-host leveraged for the initiator. In some environments, a per-host
password does not exist yet. If certificates are used for any password does not exist yet. If certificates are used for any
per-host principals, then additional password infrastructure is per-host principals, then additional password infrastructure is
not needed. not needed.
o In cases when a host is both an NFS client and server, it can o In cases when a host is both an NFS client and server, it can
share the same per-host certificate. share the same per-host certificate.
Draft Specification NFS version 4 Protocol September 2002 Draft Specification NFS version 4 Protocol October 2002
4. Filehandles 4. Filehandles
The filehandle in the NFS protocol is a per server unique identifier The filehandle in the NFS protocol is a per server unique identifier
for a filesystem object. The contents of the filehandle are opaque for a filesystem object. The contents of the filehandle are opaque
to the client. Therefore, the server is responsible for translating to the client. Therefore, the server is responsible for translating
the filehandle to an internal representation of the filesystem the filehandle to an internal representation of the filesystem
object. object.
4.1. Obtaining the First Filehandle 4.1. Obtaining the First Filehandle
skipping to change at page 28, line 5 skipping to change at page 29, line 5
used, the client can then traverse the entirety of the server's file used, the client can then traverse the entirety of the server's file
tree with the LOOKUP operation. A complete discussion of the server tree with the LOOKUP operation. A complete discussion of the server
name space is in the section "NFS Server Name Space". name space is in the section "NFS Server Name Space".
4.1.2. Public Filehandle 4.1.2. Public Filehandle
The second special filehandle is the PUBLIC filehandle. Unlike the The second special filehandle is the PUBLIC filehandle. Unlike the
ROOT filehandle, the PUBLIC filehandle may be bound or represent an ROOT filehandle, the PUBLIC filehandle may be bound or represent an
arbitrary filesystem object at the server. The server is responsible arbitrary filesystem object at the server. The server is responsible
Draft Specification NFS version 4 Protocol September 2002 Draft Specification NFS version 4 Protocol October 2002
for this binding. It may be that the PUBLIC filehandle and the ROOT for this binding. It may be that the PUBLIC filehandle and the ROOT
filehandle refer to the same filesystem object. However, it is up to filehandle refer to the same filesystem object. However, it is up to
the administrative software at the server and the policies of the the administrative software at the server and the policies of the
server administrator to define the binding of the PUBLIC filehandle server administrator to define the binding of the PUBLIC filehandle
and server filesystem object. The client may not make any and server filesystem object. The client may not make any
assumptions about this binding. The client uses the PUBLIC filehandle assumptions about this binding. The client uses the PUBLIC filehandle
via the PUTPUBFH operation. via the PUTPUBFH operation.
4.2. Filehandle Types 4.2. Filehandle Types
skipping to change at page 29, line 5 skipping to change at page 30, line 5
otherwise interpret the contents of filehandles. If two filehandles otherwise interpret the contents of filehandles. If two filehandles
from the same server are equal, they MUST refer to the same file. from the same server are equal, they MUST refer to the same file.
Servers SHOULD try to maintain a one-to-one correspondence between Servers SHOULD try to maintain a one-to-one correspondence between
filehandles and files but this is not required. Clients MUST use filehandles and files but this is not required. Clients MUST use
filehandle comparisons only to improve performance, not for correct filehandle comparisons only to improve performance, not for correct
behavior. All clients need to be prepared for situations in which it behavior. All clients need to be prepared for situations in which it
cannot be determined whether two filehandles denote the same object cannot be determined whether two filehandles denote the same object
and in such cases, avoid making invalid assumptions which might cause and in such cases, avoid making invalid assumptions which might cause
incorrect behavior. Further discussion of filehandle and attribute incorrect behavior. Further discussion of filehandle and attribute
Draft Specification NFS version 4 Protocol September 2002 Draft Specification NFS version 4 Protocol October 2002
comparison in the context of data caching is presented in the section comparison in the context of data caching is presented in the section
"Data Caching and File Identity". "Data Caching and File Identity".
As an example, in the case that two different path names when As an example, in the case that two different path names when
traversed at the server terminate at the same filesystem object, the traversed at the server terminate at the same filesystem object, the
server SHOULD return the same filehandle for each path. This can server SHOULD return the same filehandle for each path. This can
occur if a hard link is used to create two file names which refer to occur if a hard link is used to create two file names which refer to
the same underlying file object and associated data. For example, if the same underlying file object and associated data. For example, if
paths /a/b/c and /a/d/c refer to the same file, the server SHOULD paths /a/b/c and /a/d/c refer to the same file, the server SHOULD
skipping to change at page 30, line 5 skipping to change at page 31, line 5
server should return NFS4ERR_STALE to the client (as is the case for server should return NFS4ERR_STALE to the client (as is the case for
persistent filehandles). In all other cases where the server persistent filehandles). In all other cases where the server
determines that a volatile filehandle can no longer be used, it determines that a volatile filehandle can no longer be used, it
should return an error of NFS4ERR_FHEXPIRED. should return an error of NFS4ERR_FHEXPIRED.
The mandatory attribute "fh_expire_type" is used by the client to The mandatory attribute "fh_expire_type" is used by the client to
determine what type of filehandle the server is providing for a determine what type of filehandle the server is providing for a
particular filesystem. This attribute is a bitmask with the particular filesystem. This attribute is a bitmask with the
following values: following values:
Draft Specification NFS version 4 Protocol September 2002 Draft Specification NFS version 4 Protocol October 2002
FH4_PERSISTENT FH4_PERSISTENT
The value of FH4_PERSISTENT is used to indicate a persistent The value of FH4_PERSISTENT is used to indicate a persistent
filehandle, which is valid until the object is removed from the filehandle, which is valid until the object is removed from the
filesystem. The server will not return NFS4ERR_FHEXPIRED for filesystem. The server will not return NFS4ERR_FHEXPIRED for
this filehandle. FH4_PERSISTENT is defined as a value in which this filehandle. FH4_PERSISTENT is defined as a value in which
none of the bits specified below are set. none of the bits specified below are set.
FH4_VOLATILE_ANY FH4_VOLATILE_ANY
The filehandle may expire at any time, except as specifically The filehandle may expire at any time, except as specifically
skipping to change at page 31, line 5 skipping to change at page 32, line 5
occurs, and it is likely that additional expirations will occur occurs, and it is likely that additional expirations will occur
(as a result of file CLOSE) that are separated in time from the (as a result of file CLOSE) that are separated in time from the
migration event itself. migration event itself.
4.2.4. One Method of Constructing a Volatile Filehandle 4.2.4. One Method of Constructing a Volatile Filehandle
A volatile filehandle, while opaque to the client could contain: A volatile filehandle, while opaque to the client could contain:
[volatile bit = 1 | server boot time | slot | generation number] [volatile bit = 1 | server boot time | slot | generation number]
Draft Specification NFS version 4 Protocol September 2002 Draft Specification NFS version 4 Protocol October 2002
o slot is an index in the server volatile filehandle table o slot is an index in the server volatile filehandle table
o generation number is the generation number for the table o generation number is the generation number for the table
entry/slot entry/slot
When the client presents a volatile filehandle, the server makes the When the client presents a volatile filehandle, the server makes the
following checks, which assume that the check for the volatile bit following checks, which assume that the check for the volatile bit
has passed. If the server boot time is less than the current server has passed. If the server boot time is less than the current server
boot time, return NFS4ERR_FHEXPIRED. If slot is out of range, return boot time, return NFS4ERR_FHEXPIRED. If slot is out of range, return
skipping to change at page 32, line 5 skipping to change at page 33, line 5
processing of the rename request. The client can then regenerate the processing of the rename request. The client can then regenerate the
new filehandle based on the new path name. The client could also use new filehandle based on the new path name. The client could also use
the compound operation mechanism to construct a set of operations the compound operation mechanism to construct a set of operations
like: like:
RENAME A B RENAME A B
LOOKUP B LOOKUP B
GETFH GETFH
Note that the COMPOUND procedure does not provide atomicity. This Note that the COMPOUND procedure does not provide atomicity. This
example only reduces the overhead of recovering from an expired example only reduces the overhead of recovering from an expired
Draft Specification NFS version 4 Protocol September 2002 Draft Specification NFS version 4 Protocol October 2002
filehandle. filehandle.
Draft Specification NFS version 4 Protocol September 2002 Draft Specification NFS version 4 Protocol October 2002
5. File Attributes 5. File Attributes
To meet the requirements of extensibility and increased To meet the requirements of extensibility and increased
interoperability with non-UNIX platforms, attributes must be handled interoperability with non-UNIX platforms, attributes must be handled
in a flexible manner. The NFS version 3 fattr3 structure contains a in a flexible manner. The NFS version 3 fattr3 structure contains a
fixed list of attributes that not all clients and servers are able to fixed list of attributes that not all clients and servers are able to
support or care about. The fattr3 structure can not be extended as support or care about. The fattr3 structure can not be extended as
new needs arise and it provides no way to indicate non-support. With new needs arise and it provides no way to indicate non-support. With
the NFS version 4 protocol, the client is able query what attributes the NFS version 4 protocol, the client is able query what attributes
skipping to change at page 34, line 5 skipping to change at page 35, line 5
encouraged to define their new attributes as recommended attributes encouraged to define their new attributes as recommended attributes
by bringing them to the IETF standards-track process. by bringing them to the IETF standards-track process.
The set of attributes which are classified as mandatory is The set of attributes which are classified as mandatory is
deliberately small since servers must do whatever it takes to support deliberately small since servers must do whatever it takes to support
them. A server should support as many of the recommended attributes them. A server should support as many of the recommended attributes
as possible but by their definition, the server is not required to as possible but by their definition, the server is not required to
support all of them. Attributes are deemed mandatory if the data is support all of them. Attributes are deemed mandatory if the data is
both needed by a large number of clients and is not otherwise both needed by a large number of clients and is not otherwise
Draft Specification NFS version 4 Protocol September 2002 Draft Specification NFS version 4 Protocol October 2002
reasonably computable by the client when support is not provided on reasonably computable by the client when support is not provided on
the server. the server.
Note that the hidden directory returned by OPENATTR is a convenience Note that the hidden directory returned by OPENATTR is a convenience
for protocol processing. The client should not make any assumptions for protocol processing. The client should not make any assumptions
about the server's implementation of named attributes and whether the about the server's implementation of named attributes and whether the
underlying filesystem at the server has a named attribute directory underlying filesystem at the server has a named attribute directory
or not. Therefore, operations such as SETATTR and GETATTR on the or not. Therefore, operations such as SETATTR and GETATTR on the
named attribute directory are undefined. named attribute directory are undefined.
skipping to change at page 35, line 5 skipping to change at page 36, line 5
fabricate or construct an attribute or whether to do without the fabricate or construct an attribute or whether to do without the
attribute. attribute.
5.3. Named Attributes 5.3. Named Attributes
These attributes are not supported by direct encoding in the NFS These attributes are not supported by direct encoding in the NFS
Version 4 protocol but are accessed by string names rather than Version 4 protocol but are accessed by string names rather than
numbers and correspond to an uninterpreted stream of bytes which are numbers and correspond to an uninterpreted stream of bytes which are
stored with the filesystem object. The name space for these stored with the filesystem object. The name space for these
Draft Specification NFS version 4 Protocol September 2002 Draft Specification NFS version 4 Protocol October 2002
attributes may be accessed by using the OPENATTR operation. The attributes may be accessed by using the OPENATTR operation. The
OPENATTR operation returns a filehandle for a virtual "attribute OPENATTR operation returns a filehandle for a virtual "attribute
directory" and further perusal of the name space may be done using directory" and further perusal of the name space may be done using
READDIR and LOOKUP operations on this filehandle. Named attributes READDIR and LOOKUP operations on this filehandle. Named attributes
may then be examined or changed by normal READ and WRITE and CREATE may then be examined or changed by normal READ and WRITE and CREATE
operations on the filehandles returned from READDIR and LOOKUP. operations on the filehandles returned from READDIR and LOOKUP.
Named attributes may have attributes. Named attributes may have attributes.
It is recommended that servers support arbitrary named attributes. A It is recommended that servers support arbitrary named attributes. A
skipping to change at page 36, line 5 skipping to change at page 37, line 5
maxread, maxwrite, no_trunc, space_avail, space_free, maxread, maxwrite, no_trunc, space_avail, space_free,
space_total, time_delta space_total, time_delta
o The per filesystem object attributes are: o The per filesystem object attributes are:
type, change, size, named_attr, fsid, rdattr_error, filehandle, type, change, size, named_attr, fsid, rdattr_error, filehandle,
ACL, archive, fileid, hidden, maxlink, mimetype, mode, numlinks, ACL, archive, fileid, hidden, maxlink, mimetype, mode, numlinks,
owner, owner_group, rawdev, space_used, system, time_access, owner, owner_group, rawdev, space_used, system, time_access,
time_backup, time_create, time_metadata, time_modify, time_backup, time_create, time_metadata, time_modify,
Draft Specification NFS version 4 Protocol September 2002 Draft Specification NFS version 4 Protocol October 2002
mounted_on_fileid mounted_on_fileid
For quota_avail_hard, quota_avail_soft, and quota_used see their For quota_avail_hard, quota_avail_soft, and quota_used see their
definitions below for the appropriate classification. definitions below for the appropriate classification.
Draft Specification NFS version 4 Protocol September 2002 Draft Specification NFS version 4 Protocol October 2002
5.5. Mandatory Attributes - Definitions 5.5. Mandatory Attributes - Definitions
Name # DataType Access Description Name # DataType Access Description
___________________________________________________________________ ___________________________________________________________________
supp_attr 0 bitmap READ The bit vector which supp_attr 0 bitmap READ The bit vector which
would retrieve all would retrieve all
mandatory and mandatory and
recommended attributes recommended attributes
that are supported for that are supported for
skipping to change at page 38, line 5 skipping to change at page 39, line 5
only if the filesystem only if the filesystem
object can not be object can not be
updated more updated more
frequently than the frequently than the
resolution of resolution of
time_metadata. time_metadata.
size 4 uint64 R/W The size of the object size 4 uint64 R/W The size of the object
in bytes. in bytes.
Draft Specification NFS version 4 Protocol September 2002 Draft Specification NFS version 4 Protocol October 2002
link_support 5 bool READ True, if the object's link_support 5 bool READ True, if the object's
filesystem supports filesystem supports
hard links. hard links.
symlink_support 6 bool READ True, if the object's symlink_support 6 bool READ True, if the object's
filesystem supports filesystem supports
symbolic links. symbolic links.
named_attr 7 bool READ True, if this object named_attr 7 bool READ True, if this object
skipping to change at page 39, line 5 skipping to change at page 40, line 5
server in seconds. server in seconds.
rdattr_error 11 enum READ Error returned from rdattr_error 11 enum READ Error returned from
getattr during getattr during
readdir. readdir.
filehandle 19 nfs_fh4 READ The filehandle of this filehandle 19 nfs_fh4 READ The filehandle of this
object (primarily for object (primarily for
readdir requests). readdir requests).
Draft Specification NFS version 4 Protocol September 2002 Draft Specification NFS version 4 Protocol October 2002
5.6. Recommended Attributes - Definitions 5.6. Recommended Attributes - Definitions
Name # Data Type Access Description Name # Data Type Access Description
______________________________________________________________________ ______________________________________________________________________
ACL 12 nfsace4<> R/W The access control ACL 12 nfsace4<> R/W The access control
list for the object. list for the object.
aclsupport 13 uint32 READ Indicates what types aclsupport 13 uint32 READ Indicates what types
of ACLs are supported of ACLs are supported
skipping to change at page 40, line 5 skipping to change at page 41, line 5
with a file if the with a file if the
caller is not a caller is not a
privileged user (for privileged user (for
example, "root" in example, "root" in
UNIX operating UNIX operating
environments or in environments or in
Windows 2000 the Windows 2000 the
"Take Ownership" "Take Ownership"
privilege). privilege).
Draft Specification NFS version 4 Protocol September 2002 Draft Specification NFS version 4 Protocol October 2002
fileid 20 uint64 READ A number uniquely fileid 20 uint64 READ A number uniquely
identifying the file identifying the file
within the within the
filesystem. filesystem.
files_avail 21 uint64 READ File slots available files_avail 21 uint64 READ File slots available
to this user on the to this user on the
filesystem containing filesystem containing
this object - this this object - this
skipping to change at page 41, line 5 skipping to change at page 42, line 5
are per filesystem are per filesystem
attributes the same attributes the same
for all filesystem's for all filesystem's
objects. objects.
maxfilesize 27 uint64 READ Maximum supported maxfilesize 27 uint64 READ Maximum supported
file size for the file size for the
filesystem of this filesystem of this
object. object.
Draft Specification NFS version 4 Protocol September 2002 Draft Specification NFS version 4 Protocol October 2002
maxlink 28 uint32 READ Maximum number of maxlink 28 uint32 READ Maximum number of
links for this links for this
object. object.
maxname 29 uint32 READ Maximum filename size maxname 29 uint32 READ Maximum filename size
supported for this supported for this
object. object.
maxread 30 uint64 READ Maximum read size maxread 30 uint64 READ Maximum read size
skipping to change at page 42, line 5 skipping to change at page 43, line 5
to this object. to this object.
owner 36 utf8<> R/W The string name of owner 36 utf8<> R/W The string name of
the owner of this the owner of this
object. object.
owner_group 37 utf8<> R/W The string name of owner_group 37 utf8<> R/W The string name of
the group ownership the group ownership
of this object. of this object.
Draft Specification NFS version 4 Protocol September 2002 Draft Specification NFS version 4 Protocol October 2002
quota_avail_hard 38 uint64 READ For definition see quota_avail_hard 38 uint64 READ For definition see
"Quota Attributes" "Quota Attributes"
section below. section below.
quota_avail_soft 39 uint64 READ For definition see quota_avail_soft 39 uint64 READ For definition see
"Quota Attributes" "Quota Attributes"
section below. section below.
quota_used 40 uint64 READ For definition see quota_used 40 uint64 READ For definition see
skipping to change at page 43, line 5 skipping to change at page 44, line 5
space_total 44 uint64 READ Total disk space in space_total 44 uint64 READ Total disk space in
bytes on the bytes on the
filesystem containing filesystem containing
this object. this object.
space_used 45 uint64 READ Number of filesystem space_used 45 uint64 READ Number of filesystem
bytes allocated to bytes allocated to
this object. this object.
Draft Specification NFS version 4 Protocol September 2002 Draft Specification NFS version 4 Protocol October 2002
system 46 bool R/W True, if this file is system 46 bool R/W True, if this file is
a "system" file with a "system" file with
respect to the respect to the
Windows API? Windows API?
time_access 47 nfstime4 READ The time of last time_access 47 nfstime4 READ The time of last
access to the object access to the object
by a read that was by a read that was
satisfied by the satisfied by the
skipping to change at page 44, line 5 skipping to change at page 45, line 5
object. SETATTR use object. SETATTR use
only. only.
mounted_on_fileid 55 uint64 READ Like fileid, but if mounted_on_fileid 55 uint64 READ Like fileid, but if
the target filehandle the target filehandle
is the root of a is the root of a
filesystem return the filesystem return the
fileid of the fileid of the
underlying directory. underlying directory.
Draft Specification NFS version 4 Protocol September 2002 Draft Specification NFS version 4 Protocol October 2002
5.7. Time Access 5.7. Time Access
As defined above, the time_access attribute represents the time of As defined above, the time_access attribute represents the time of
last access to the object by a read that was satisfied by the server. last access to the object by a read that was satisfied by the server.
The notion of what is an "access" depends on server's operating The notion of what is an "access" depends on server's operating
environment and/or the server's filesystem semantics. For example, environment and/or the server's filesystem semantics. For example,
for servers obeying POSIX semantics, time_access would be updated for servers obeying POSIX semantics, time_access would be updated
only by the READLINK, READ, and READDIR operations and not any of the only by the READLINK, READ, and READDIR operations and not any of the
operations that modify the content of the object. Of course, setting operations that modify the content of the object. Of course, setting
skipping to change at page 45, line 5 skipping to change at page 46, line 5
to these security principals. When these local identifiers are to these security principals. When these local identifiers are
translated to the form of the owner attribute, associated with files translated to the form of the owner attribute, associated with files
created by such principals they identify, in a common format, the created by such principals they identify, in a common format, the
users associated with each corresponding set of security principals. users associated with each corresponding set of security principals.
The translation used to interpret owner and group strings is not The translation used to interpret owner and group strings is not
specified as part of the protocol. This allows various solutions to specified as part of the protocol. This allows various solutions to
be employed. For example, a local translation table may be consulted be employed. For example, a local translation table may be consulted
that maps between a numeric id to the user@dns_domain syntax. A name that maps between a numeric id to the user@dns_domain syntax. A name
Draft Specification NFS version 4 Protocol September 2002 Draft Specification NFS version 4 Protocol October 2002
service may also be used to accomplish the translation. A server may service may also be used to accomplish the translation. A server may
provide a more general service, not limited by any particular provide a more general service, not limited by any particular
translation (which would only translate a limited set of possible translation (which would only translate a limited set of possible
strings) by storing the owner and owner_group attributes in local strings) by storing the owner and owner_group attributes in local
storage without any translation or it may augment a translation storage without any translation or it may augment a translation
method by storing the entire string for attributes for which no method by storing the entire string for attributes for which no
translation is available while using the local representation for translation is available while using the local representation for
those cases in which a translation is available. those cases in which a translation is available.
skipping to change at page 46, line 5 skipping to change at page 47, line 5
unsigned uid's and gid's, owner and group strings that consist of unsigned uid's and gid's, owner and group strings that consist of
decimal numeric values with no leading zeros can be given a special decimal numeric values with no leading zeros can be given a special
interpretation by clients and servers which choose to provide such interpretation by clients and servers which choose to provide such
support. The receiver may treat such a user or group string as support. The receiver may treat such a user or group string as
representing the same user as would be represented by a v2/v3 uid or representing the same user as would be represented by a v2/v3 uid or
gid having the corresponding numeric value. A server is not gid having the corresponding numeric value. A server is not
obligated to accept such a string, but may return an NFS4ERR_BADOWNER obligated to accept such a string, but may return an NFS4ERR_BADOWNER
instead. To avoid this mechanism being used to subvert user and instead. To avoid this mechanism being used to subvert user and
group translation, so that a client might pass all of the owners and group translation, so that a client might pass all of the owners and
Draft Specification NFS version 4 Protocol September 2002 Draft Specification NFS version 4 Protocol October 2002
groups in numeric form, a server SHOULD return an NFS4ERR_BADOWNER groups in numeric form, a server SHOULD return an NFS4ERR_BADOWNER
error when there is a valid translation for the user or owner error when there is a valid translation for the user or owner
designated in this way. In that case, the client must use the designated in this way. In that case, the client must use the
appropriate name@domain string and not the special form for appropriate name@domain string and not the special form for
compatibility. compatibility.
The owner string "nobody" may be used to designate an anonymous user, The owner string "nobody" may be used to designate an anonymous user,
which will be associated with a file created by a security principal which will be associated with a file created by a security principal
that cannot be mapped through normal means to the owner attribute. that cannot be mapped through normal means to the owner attribute.
skipping to change at page 47, line 5 skipping to change at page 48, line 5
allocations to other files or directories. allocations to other files or directories.
quota_used quota_used
The value in bytes which represent the amount of disc space used The value in bytes which represent the amount of disc space used
by this file or directory and possibly a number of other similar by this file or directory and possibly a number of other similar
files or directories, where the set of "similar" meets at least files or directories, where the set of "similar" meets at least
the criterion that allocating space to any file or directory in the criterion that allocating space to any file or directory in
the set will reduce the "quota_avail_hard" of every other file the set will reduce the "quota_avail_hard" of every other file
or directory in the set. or directory in the set.
Draft Specification NFS version 4 Protocol September 2002 Draft Specification NFS version 4 Protocol October 2002
Note that there may be a number of distinct but overlapping sets Note that there may be a number of distinct but overlapping sets
of files or directories for which a quota_used value is of files or directories for which a quota_used value is
maintained. E.g. "all files with a given owner", "all files with maintained. E.g. "all files with a given owner", "all files with
a given group owner". etc. a given group owner". etc.
The server is at liberty to choose any of those sets but should The server is at liberty to choose any of those sets but should
do so in a repeatable way. The rule may be configured per- do so in a repeatable way. The rule may be configured per-
filesystem or may be "choose the set with the smallest quota". filesystem or may be "choose the set with the smallest quota".
skipping to change at page 48, line 5 skipping to change at page 49, line 5
in common with the "access_mask" of the ACE, the request is denied. in common with the "access_mask" of the ACE, the request is denied.
However, unlike the ALLOWED and DENIED ACE types, the ALARM and AUDIT However, unlike the ALLOWED and DENIED ACE types, the ALARM and AUDIT
ACE types do not affect a requester's access, and instead are for ACE types do not affect a requester's access, and instead are for
triggering events as a result of a requester's access attempt. triggering events as a result of a requester's access attempt.
Therefore, all AUDIT and ALARM ACEs are processed until end of the Therefore, all AUDIT and ALARM ACEs are processed until end of the
ACL. When the ACL is fully processed, if there are bits in ACL. When the ACL is fully processed, if there are bits in
requester's mask that have not been considered whether the server requester's mask that have not been considered whether the server
allows or denies the access is undefined. If there is a mode allows or denies the access is undefined. If there is a mode
attribute on the file, then this cannot happen, since the mode's attribute on the file, then this cannot happen, since the mode's
Draft Specification NFS version 4 Protocol September 2002 Draft Specification NFS version 4 Protocol October 2002
MODE4_*OTH bits will map to EVERYONE@ ACEs that unambiguously specify MODE4_*OTH bits will map to EVERYONE@ ACEs that unambiguously specify
the requester's access. the requester's access.
The NFS version 4 ACL model is quite rich. Some server platforms may The NFS version 4 ACL model is quite rich. Some server platforms may
provide access control functionality that goes beyond the UNIX-style provide access control functionality that goes beyond the UNIX-style
mode attribute, but which is not as rich as the NFS ACL model. So mode attribute, but which is not as rich as the NFS ACL model. So
that users can take advantage of this more limited functionality, the that users can take advantage of this more limited functionality, the
server may indicate that it supports ACLs as long as it follows the server may indicate that it supports ACLs as long as it follows the
guidelines for mapping between its ACL model and the NFS version 4 guidelines for mapping between its ACL model and the NFS version 4
skipping to change at page 49, line 5 skipping to change at page 50, line 5
made to a file or directory for the made to a file or directory for the
access methods specified in acemask4. access methods specified in acemask4.
A server need not support all of the above ACE types. The bitmask A server need not support all of the above ACE types. The bitmask
constants used to represent the above definitions within the constants used to represent the above definitions within the
aclsupport attribute are as follows: aclsupport attribute are as follows:
const ACL4_SUPPORT_ALLOW_ACL = 0x00000001; const ACL4_SUPPORT_ALLOW_ACL = 0x00000001;
const ACL4_SUPPORT_DENY_ACL = 0x00000002; const ACL4_SUPPORT_DENY_ACL = 0x00000002;
Draft Specification NFS version 4 Protocol September 2002 Draft Specification NFS version 4 Protocol October 2002
const ACL4_SUPPORT_AUDIT_ACL = 0x00000004; const ACL4_SUPPORT_AUDIT_ACL = 0x00000004;
const ACL4_SUPPORT_ALARM_ACL = 0x00000008; const ACL4_SUPPORT_ALARM_ACL = 0x00000008;
The semantics of the "type" field follow the descriptions provided The semantics of the "type" field follow the descriptions provided
above. above.
The constants used for the type field (acetype4) are as follows: The constants used for the type field (acetype4) are as follows:
const ACE4_ACCESS_ALLOWED_ACE_TYPE = 0x00000000; const ACE4_ACCESS_ALLOWED_ACE_TYPE = 0x00000000;
skipping to change at page 50, line 5 skipping to change at page 51, line 5
directory directory
APPEND_DATA Permission to append data to a file APPEND_DATA Permission to append data to a file
ADD_SUBDIRECTORY Permission to create a subdirectory to a ADD_SUBDIRECTORY Permission to create a subdirectory to a
directory directory
READ_NAMED_ATTRS Permission to read the named attributes READ_NAMED_ATTRS Permission to read the named attributes
of a file of a file
WRITE_NAMED_ATTRS Permission to write the named attributes WRITE_NAMED_ATTRS Permission to write the named attributes
of a file of a file
EXECUTE Permission to execute a file EXECUTE Permission to execute a file
Draft Specification NFS version 4 Protocol September 2002 Draft Specification NFS version 4 Protocol October 2002
DELETE_CHILD Permission to delete a file or directory DELETE_CHILD Permission to delete a file or directory
within a directory within a directory
READ_ATTRIBUTES The ability to read basic attributes READ_ATTRIBUTES The ability to read basic attributes
(non-acls) of a file (non-acls) of a file
WRITE_ATTRIBUTES Permission to change basic attributes WRITE_ATTRIBUTES Permission to change basic attributes
(non-acls) of a file (non-acls) of a file
DELETE Permission to Delete the file DELETE Permission to Delete the file
READ_ACL Permission to Read the ACL READ_ACL Permission to Read the ACL
skipping to change at page 51, line 5 skipping to change at page 52, line 5
If a server receives a SETATTR request that it cannot accurately If a server receives a SETATTR request that it cannot accurately
implement, it should error in the direction of more restricted implement, it should error in the direction of more restricted
access. For example, suppose a server cannot distinguish overwriting access. For example, suppose a server cannot distinguish overwriting
data from appending new data, as described in the previous paragraph. data from appending new data, as described in the previous paragraph.
If a client submits an ACE where APPEND_DATA is set but WRITE_DATA is If a client submits an ACE where APPEND_DATA is set but WRITE_DATA is
not (or vice versa), the server should reject the request with not (or vice versa), the server should reject the request with
NFS4ERR_ATTRNOTSUPP. Nonetheless, if the ACE has type DENY, the NFS4ERR_ATTRNOTSUPP. Nonetheless, if the ACE has type DENY, the
server may silently turn on the other bit, so that both APPEND_DATA server may silently turn on the other bit, so that both APPEND_DATA
Draft Specification NFS version 4 Protocol September 2002 Draft Specification NFS version 4 Protocol October 2002
and WRITE_DATA are denied. and WRITE_DATA are denied.
5.11.3. ACE flag 5.11.3. ACE flag
The "flag" field contains values based on the following descriptions. The "flag" field contains values based on the following descriptions.
ACE4_FILE_INHERIT_ACE ACE4_FILE_INHERIT_ACE
Can be placed on a directory and indicates that this ACE should be Can be placed on a directory and indicates that this ACE should be
skipping to change at page 52, line 5 skipping to change at page 53, line 5
ACE4_FAILED_ACCESS_ACE_FLAG (FAILED) flag bits relate only to ACE4_FAILED_ACCESS_ACE_FLAG (FAILED) flag bits relate only to
ACE4_SYSTEM_AUDIT_ACE_TYPE (AUDIT) and ACE4_SYSTEM_ALARM_ACE_TYPE ACE4_SYSTEM_AUDIT_ACE_TYPE (AUDIT) and ACE4_SYSTEM_ALARM_ACE_TYPE
(ALARM) ACE types. If during the processing of the file's ACL, the (ALARM) ACE types. If during the processing of the file's ACL, the
server encounters an AUDIT or ALARM ACE that matches the principal server encounters an AUDIT or ALARM ACE that matches the principal
attempting the OPEN, the server notes that fact, and the presence, if attempting the OPEN, the server notes that fact, and the presence, if
any, of the SUCCESS and FAILED flags encountered in the AUDIT or any, of the SUCCESS and FAILED flags encountered in the AUDIT or
ALARM ACE. Once the server completes the ACL processing, and the ALARM ACE. Once the server completes the ACL processing, and the
share reservation processing, and the OPEN call, it then notes if the share reservation processing, and the OPEN call, it then notes if the
OPEN succeeded or failed. If the OPEN succeeded, and if the SUCCESS OPEN succeeded or failed. If the OPEN succeeded, and if the SUCCESS
Draft Specification NFS version 4 Protocol September 2002 Draft Specification NFS version 4 Protocol October 2002
flag was set for a matching AUDIT or ALARM, then the appropriate flag was set for a matching AUDIT or ALARM, then the appropriate
AUDIT or ALARM event occurs. If the OPEN failed, and if the FAILED AUDIT or ALARM event occurs. If the OPEN failed, and if the FAILED
flag was set for the matching AUDIT or ALARM, then the appropriate flag was set for the matching AUDIT or ALARM, then the appropriate
AUDIT or ALARM event occurs. Clearly either or both of the SUCCESS AUDIT or ALARM event occurs. Clearly either or both of the SUCCESS
or FAILED can be set, but if neither is set, the AUDIT or ALARM ACE or FAILED can be set, but if neither is set, the AUDIT or ALARM ACE
is not useful. is not useful.
The previously described processing applies to that of the ACCESS The previously described processing applies to that of the ACCESS
operation as well. The difference being that "success" or "failure" operation as well. The difference being that "success" or "failure"
skipping to change at page 53, line 5 skipping to change at page 54, line 5
supports a single "inherit ACE" flag that applies to both files and supports a single "inherit ACE" flag that applies to both files and
directories, the server may reject the request (i.e., requiring the directories, the server may reject the request (i.e., requiring the
client to set both the file and directory inheritance flags). The client to set both the file and directory inheritance flags). The
server may also accept the request and silently turn on the server may also accept the request and silently turn on the
ACE4_DIRECTORY_INHERIT_ACE flag. ACE4_DIRECTORY_INHERIT_ACE flag.
5.11.4. ACE who 5.11.4. ACE who
There are several special identifiers ("who") which need to be There are several special identifiers ("who") which need to be
Draft Specification NFS version 4 Protocol September 2002 Draft Specification NFS version 4 Protocol October 2002
understood universally, rather than in the context of a particular understood universally, rather than in the context of a particular
DNS domain. Some of these identifiers cannot be understood when an DNS domain. Some of these identifiers cannot be understood when an
NFS client accesses the server, but have meaning when a local process NFS client accesses the server, but have meaning when a local process
accesses the file. The ability to display and modify these accesses the file. The ability to display and modify these
permissions is permitted over NFS, even if none of the access methods permissions is permitted over NFS, even if none of the access methods
on the server understands the identifiers. on the server understands the identifiers.
Who Description Who Description
_______________________________________________________________ _______________________________________________________________
skipping to change at page 54, line 5 skipping to change at page 55, line 5
const MODE4_ROTH = 0x004; /* read permission: other */ const MODE4_ROTH = 0x004; /* read permission: other */
const MODE4_WOTH = 0x002; /* write permission: other */ const MODE4_WOTH = 0x002; /* write permission: other */
const MODE4_XOTH = 0x001; /* execute permission: other */ const MODE4_XOTH = 0x001; /* execute permission: other */
Bits MODE4_RUSR, MODE4_WUSR, and MODE4_XUSR apply to the principal Bits MODE4_RUSR, MODE4_WUSR, and MODE4_XUSR apply to the principal
identified in the owner attribute. Bits MODE4_RGRP, MODE4_WGRP, and identified in the owner attribute. Bits MODE4_RGRP, MODE4_WGRP, and
MODE4_XGRP apply to the principals identified in the owner_group MODE4_XGRP apply to the principals identified in the owner_group
attribute. Bits MODE4_ROTH, MODE4_WOTH, MODE4_XOTH apply to any attribute. Bits MODE4_ROTH, MODE4_WOTH, MODE4_XOTH apply to any
principal that does not match that in the owner group, and does not principal that does not match that in the owner group, and does not
Draft Specification NFS version 4 Protocol September 2002 Draft Specification NFS version 4 Protocol October 2002
have a group matching that of the owner_group attribute. have a group matching that of the owner_group attribute.
The remaining bits are not defined by this protocol and MUST NOT be The remaining bits are not defined by this protocol and MUST NOT be
used. The minor version mechanism must be used to define further bit used. The minor version mechanism must be used to define further bit
usage. usage.
Note that in UNIX, if a file has the MODE4_SGID bit set and no Note that in UNIX, if a file has the MODE4_SGID bit set and no
MODE4_XGRP bit set, then READ and WRITE must use mandatory file MODE4_XGRP bit set, then READ and WRITE must use mandatory file
locking. locking.
skipping to change at page 55, line 5 skipping to change at page 56, line 5
Unlike NFS version 3, NFS version 4 allows a client's LOOKUP request Unlike NFS version 3, NFS version 4 allows a client's LOOKUP request
to cross other filesystems. The client detects the filesystem to cross other filesystems. The client detects the filesystem
crossing whenever the filehandle argument of LOOKUP has an fsid crossing whenever the filehandle argument of LOOKUP has an fsid
attribute different from that of the filehandle returned by LOOKUP. A attribute different from that of the filehandle returned by LOOKUP. A
UNIX-based client will consider this a "mount point crossing". UNIX UNIX-based client will consider this a "mount point crossing". UNIX
has a legacy scheme for allowing a process to determine its current has a legacy scheme for allowing a process to determine its current
working directory. This relies on readdir() of a mount point's parent working directory. This relies on readdir() of a mount point's parent
and stat() of the mount point returning fileids as previously and stat() of the mount point returning fileids as previously
Draft Specification NFS version 4 Protocol September 2002 Draft Specification NFS version 4 Protocol October 2002
described. The mounted_on_fileid attribute corresponds to the fileid described. The mounted_on_fileid attribute corresponds to the fileid
that readdir() would have returned as described previously. that readdir() would have returned as described previously.
While the NFS version 4 client could simply fabricate a fileid While the NFS version 4 client could simply fabricate a fileid
corresponding to what mounted_on_fileid provides (and if the server corresponding to what mounted_on_fileid provides (and if the server
does not support mounted_on_fileid, the client has no choice), there does not support mounted_on_fileid, the client has no choice), there
is a risk that the client will generate a fileid that conflicts with is a risk that the client will generate a fileid that conflicts with
one that is already assigned to another object in the filesystem. one that is already assigned to another object in the filesystem.
Instead, if the server can provide the mounted_on_fileid, the Instead, if the server can provide the mounted_on_fileid, the
skipping to change at page 56, line 5 skipping to change at page 57, line 5
fileid of a directory entry returned by readdir(). If fileid of a directory entry returned by readdir(). If
mounted_on_fileid is requested in a GETATTR operation, the server mounted_on_fileid is requested in a GETATTR operation, the server
should obey an invariant that has it returning a value that is equal should obey an invariant that has it returning a value that is equal
to the file object's entry in the object's parent directory, i.e. to the file object's entry in the object's parent directory, i.e.
what readdir() would have returned. Some operating environments what readdir() would have returned. Some operating environments
allow a series of two or more filesystems to be mounted onto a single allow a series of two or more filesystems to be mounted onto a single
mount point. In this case, for the server to obey the aforementioned mount point. In this case, for the server to obey the aforementioned
invariant, it will need to find the base mount point, and not the invariant, it will need to find the base mount point, and not the
intermediate mount points. intermediate mount points.
Draft Specification NFS version 4 Protocol September 2002 Draft Specification NFS version 4 Protocol October 2002
6. Filesystem Migration and Replication 6. Filesystem Migration and Replication
With the use of the recommended attribute "fs_locations", the NFS With the use of the recommended attribute "fs_locations", the NFS
version 4 server has a method of providing filesystem migration or version 4 server has a method of providing filesystem migration or
replication services. For the purposes of migration and replication, replication services. For the purposes of migration and replication,
a filesystem will be defined as all files that share a given fsid a filesystem will be defined as all files that share a given fsid
(both major and minor values are the same). (both major and minor values are the same).
The fs_locations attribute provides a list of filesystem locations. The fs_locations attribute provides a list of filesystem locations.
skipping to change at page 57, line 5 skipping to change at page 58, line 5
Once the servers participating in the migration have completed the Once the servers participating in the migration have completed the
move of the filesystem, the error NFS4ERR_MOVED will be returned for move of the filesystem, the error NFS4ERR_MOVED will be returned for
subsequent requests received by the original server. The subsequent requests received by the original server. The
NFS4ERR_MOVED error is returned for all operations except PUTFH and NFS4ERR_MOVED error is returned for all operations except PUTFH and
GETATTR. Upon receiving the NFS4ERR_MOVED error, the client will GETATTR. Upon receiving the NFS4ERR_MOVED error, the client will
obtain the value of the fs_locations attribute. The client will then obtain the value of the fs_locations attribute. The client will then
use the contents of the attribute to redirect its requests to the use the contents of the attribute to redirect its requests to the
specified server. To facilitate the use of GETATTR, operations such specified server. To facilitate the use of GETATTR, operations such
Draft Specification NFS version 4 Protocol September 2002 Draft Specification NFS version 4 Protocol October 2002
as PUTFH must also be accepted by the server for the migrated file as PUTFH must also be accepted by the server for the migrated file
system's filehandles. Note that if the server returns NFS4ERR_MOVED, system's filehandles. Note that if the server returns NFS4ERR_MOVED,
the server MUST support the fs_locations attribute. the server MUST support the fs_locations attribute.
If the client requests more attributes than just fs_locations, the If the client requests more attributes than just fs_locations, the
server may return fs_locations only. This is to be expected since server may return fs_locations only. This is to be expected since
the server has migrated the filesystem and may not have a method of the server has migrated the filesystem and may not have a method of
obtaining additional attribute data. obtaining additional attribute data.
skipping to change at page 58, line 5 skipping to change at page 59, line 5
The fs_locations struct and attribute then contains an array of The fs_locations struct and attribute then contains an array of
locations. Since the name space of each server may be constructed locations. Since the name space of each server may be constructed
differently, the "fs_root" field is provided. The path represented differently, the "fs_root" field is provided. The path represented
by fs_root represents the location of the filesystem in the server's by fs_root represents the location of the filesystem in the server's
name space. Therefore, the fs_root path is only associated with the name space. Therefore, the fs_root path is only associated with the
server from which the fs_locations attribute was obtained. The server from which the fs_locations attribute was obtained. The
fs_root path is meant to aid the client in locating the filesystem at fs_root path is meant to aid the client in locating the filesystem at
the various servers listed. the various servers listed.
Draft Specification NFS version 4 Protocol September 2002 Draft Specification NFS version 4 Protocol October 2002
As an example, there is a replicated filesystem located at two As an example, there is a replicated filesystem located at two
servers (servA and servB). At servA the filesystem is located at servers (servA and servB). At servA the filesystem is located at
path "/a/b/c". At servB the filesystem is located at path "/x/y/z". path "/a/b/c". At servB the filesystem is located at path "/x/y/z".
In this example the client accesses the filesystem first at servA In this example the client accesses the filesystem first at servA
with a multi-component lookup path of "/a/b/c/d". Since the client with a multi-component lookup path of "/a/b/c/d". Since the client
used a multi-component lookup to obtain the filehandle at "/a/b/c/d", used a multi-component lookup to obtain the filehandle at "/a/b/c/d",
it is unaware that the filesystem's root is located in servA's name it is unaware that the filesystem's root is located in servA's name
space at "/a/b/c". When the client switches to servB, it will need space at "/a/b/c". When the client switches to servB, it will need
to determine that the directory it first referenced at servA is now to determine that the directory it first referenced at servA is now
skipping to change at page 59, line 5 skipping to change at page 60, line 5
of the fh_expire_type attribute, whether volatile filehandles will of the fh_expire_type attribute, whether volatile filehandles will
expire at the migration or replication event. If the bit expire at the migration or replication event. If the bit
FH4_VOL_MIGRATION is set in the fh_expire_type attribute, the client FH4_VOL_MIGRATION is set in the fh_expire_type attribute, the client
must treat the volatile filehandle as if the server had returned the must treat the volatile filehandle as if the server had returned the
NFS4ERR_FHEXPIRED error. At the migration or replication event in NFS4ERR_FHEXPIRED error. At the migration or replication event in
the presence of the FH4_VOL_MIGRATION bit, the client will not the presence of the FH4_VOL_MIGRATION bit, the client will not
present the original or old volatile filehandle to the new server. present the original or old volatile filehandle to the new server.
The client will start its communication with the new server by The client will start its communication with the new server by
recovering its filehandles using the saved file names. recovering its filehandles using the saved file names.
Draft Specification NFS version 4 Protocol September 2002 Draft Specification NFS version 4 Protocol October 2002
7. NFS Server Name Space 7. NFS Server Name Space
7.1. Server Exports 7.1. Server Exports
On a UNIX server the name space describes all the files reachable by On a UNIX server the name space describes all the files reachable by
pathnames under the root directory or "/". On a Windows NT server pathnames under the root directory or "/". On a Windows NT server
the name space constitutes all the files on disks named by mapped the name space constitutes all the files on disks named by mapped
disk letters. NFS server administrators rarely make the entire disk letters. NFS server administrators rarely make the entire
server's filesystem name space available to NFS clients. More often server's filesystem name space available to NFS clients. More often
skipping to change at page 60, line 5 skipping to change at page 61, line 5
the server's name space on the client: it is static. If the server the server's name space on the client: it is static. If the server
administrator adds a new export the client will be unaware of it. administrator adds a new export the client will be unaware of it.
7.3. Server Pseudo Filesystem 7.3. Server Pseudo Filesystem
NFS version 4 servers avoid this name space inconsistency by NFS version 4 servers avoid this name space inconsistency by
presenting all the exports within the framework of a single server presenting all the exports within the framework of a single server
name space. An NFS version 4 client uses LOOKUP and READDIR name space. An NFS version 4 client uses LOOKUP and READDIR
operations to browse seamlessly from one export to another. Portions operations to browse seamlessly from one export to another. Portions
Draft Specification NFS version 4 Protocol September 2002 Draft Specification NFS version 4 Protocol October 2002
of the server name space that are not exported are bridged via a of the server name space that are not exported are bridged via a
"pseudo filesystem" that provides a view of exported directories "pseudo filesystem" that provides a view of exported directories
only. A pseudo filesystem has a unique fsid and behaves like a only. A pseudo filesystem has a unique fsid and behaves like a
normal, read only filesystem. normal, read only filesystem.
Based on the construction of the server's name space, it is possible Based on the construction of the server's name space, it is possible
that multiple pseudo filesystems may exist. For example, that multiple pseudo filesystems may exist. For example,
/a pseudo filesystem /a pseudo filesystem
skipping to change at page 61, line 5 skipping to change at page 62, line 5
7.6. Exported Root 7.6. Exported Root
If the server's root filesystem is exported, one might conclude that If the server's root filesystem is exported, one might conclude that
a pseudo-filesystem is not needed. This would be wrong. Assume the a pseudo-filesystem is not needed. This would be wrong. Assume the
following filesystems on a server: following filesystems on a server:
/ disk1 (exported) / disk1 (exported)
/a disk2 (not exported) /a disk2 (not exported)
Draft Specification NFS version 4 Protocol September 2002 Draft Specification NFS version 4 Protocol October 2002
/a/b disk3 (exported) /a/b disk3 (exported)
Because disk2 is not exported, disk3 cannot be reached with simple Because disk2 is not exported, disk3 cannot be reached with simple
LOOKUPs. The server must bridge the gap with a pseudo-filesystem. LOOKUPs. The server must bridge the gap with a pseudo-filesystem.
7.7. Mount Point Crossing 7.7. Mount Point Crossing
The server filesystem environment may be constructed in such a way The server filesystem environment may be constructed in such a way
that one filesystem contains a directory which is 'covered' or that one filesystem contains a directory which is 'covered' or
skipping to change at page 62, line 5 skipping to change at page 63, line 5
chooses to limit the contents of the pseudo filesystem, the server chooses to limit the contents of the pseudo filesystem, the server
may effectively hide filesystems from a client that may otherwise may effectively hide filesystems from a client that may otherwise
have legitimate access. have legitimate access.
As suggested practice, the server should apply the security policy of As suggested practice, the server should apply the security policy of
a shared resource in the server's namespace to the components of the a shared resource in the server's namespace to the components of the
resource's ancestors. For example: resource's ancestors. For example:
/ /
Draft Specification NFS version 4 Protocol September 2002 Draft Specification NFS version 4 Protocol October 2002
/a/b /a/b
/a/b/c /a/b/c
The /a/b/c directory is a real filesystem and is the shared resource. The /a/b/c directory is a real filesystem and is the shared resource.
The security policy for /a/b/c is Kerberos with integrity. The The security policy for /a/b/c is Kerberos with integrity. The
server should apply the same security policy to /, /a, and /a/b. server should apply the same security policy to /, /a, and /a/b.
This allows for the extension of the protection of the server's This allows for the extension of the protection of the server's
namespace to the ancestors of the real shared resource. namespace to the ancestors of the real shared resource.
For the case of the use of multiple, disjoint security mechanisms in For the case of the use of multiple, disjoint security mechanisms in
the server's resources, the security for a particular object in the the server's resources, the security for a particular object in the
server's namespace should be the union of all security mechanisms of server's namespace should be the union of all security mechanisms of
all direct descendants. all direct descendants.
Draft Specification NFS version 4 Protocol September 2002 Draft Specification NFS version 4 Protocol October 2002
8. File Locking and Share Reservations 8. File Locking and Share Reservations
Integrating locking into the NFS protocol necessarily causes it to be Integrating locking into the NFS protocol necessarily causes it to be
stateful. With the inclusion of share reservations the protocol stateful. With the inclusion of share reservations the protocol
becomes substantially more dependent on state than the traditional becomes substantially more dependent on state than the traditional
combination of NFS and NLM [XNFS]. There are three components to combination of NFS and NLM [XNFS]. There are three components to
making this state manageable: making this state manageable:
o Clear division between client and server o Clear division between client and server
skipping to change at page 64, line 5 skipping to change at page 65, line 5
owner. owner.
The following sections describe the transition from the heavy weight The following sections describe the transition from the heavy weight
information to the eventual stateid used for most client and server information to the eventual stateid used for most client and server
locking and lease interactions. locking and lease interactions.
8.1.1. Client ID 8.1.1. Client ID
For each LOCK request, the client must identify itself to the server. For each LOCK request, the client must identify itself to the server.
Draft Specification NFS version 4 Protocol September 2002 Draft Specification NFS version 4 Protocol October 2002
This is done in such a way as to allow for correct lock This is done in such a way as to allow for correct lock
identification and crash recovery. A sequence of a SETCLIENTID identification and crash recovery. A sequence of a SETCLIENTID
operation followed by a SETCLIENTID_CONFIRM operation is required to operation followed by a SETCLIENTID_CONFIRM operation is required to
establish the identification onto the server. Establishment of establish the identification onto the server. Establishment of
identification by a new incarnation of the client also has the effect identification by a new incarnation of the client also has the effect
of immediately breaking any leased state that a previous incarnation of immediately breaking any leased state that a previous incarnation
of the client might have had on the server, as opposed to forcing the of the client might have had on the server, as opposed to forcing the
new client incarnation to wait for the leases to expire. Breaking new client incarnation to wait for the leases to expire. Breaking
the lease state amounts to the server removing all lock, share the lease state amounts to the server removing all lock, share
skipping to change at page 65, line 5 skipping to change at page 66, line 5
this precludes the use of the implementation in an environment this precludes the use of the implementation in an environment
where there is no local disk and all file access is from an NFS where there is no local disk and all file access is from an NFS
version 4 server. version 4 server.
o The string should be different for each server network address o The string should be different for each server network address
that the client accesses, rather than common to all server that the client accesses, rather than common to all server
network addresses. The reason is that it may not be possible for network addresses. The reason is that it may not be possible for
the client to tell if same server is listening on multiple the client to tell if same server is listening on multiple
network addresses. If the client issues SETCLIENTID with the network addresses. If the client issues SETCLIENTID with the
Draft Specification NFS version 4 Protocol September 2002 Draft Specification NFS version 4 Protocol October 2002
same id string to each network address of such a server, the same id string to each network address of such a server, the
server will think it is the same client, and each successive server will think it is the same client, and each successive
SETCLIENTID will cause the server to begin the process of SETCLIENTID will cause the server to begin the process of
removing the client's previous leased state. removing the client's previous leased state.
o The algorithm for generating the string should not assume that o The algorithm for generating the string should not assume that
the client's network address won't change. This includes the client's network address won't change. This includes
changes between client incarnations and even changes while the changes between client incarnations and even changes while the
client is stilling running in its current incarnation. This client is stilling running in its current incarnation. This
skipping to change at page 66, line 5 skipping to change at page 67, line 5
the same between client incarnations, this shares the same the same between client incarnations, this shares the same
problem as that of the using the timestamp of the software problem as that of the using the timestamp of the software
installation. installation.
As a security measure, the server MUST NOT cancel a client's leased As a security measure, the server MUST NOT cancel a client's leased
state if the principal established the state for a given id string is state if the principal established the state for a given id string is
not the same as the principal issuing the SETCLIENTID. not the same as the principal issuing the SETCLIENTID.
Note that SETCLIENTID and SETCLIENTID_CONFIRM has a secondary purpose Note that SETCLIENTID and SETCLIENTID_CONFIRM has a secondary purpose
Draft Specification NFS version 4 Protocol September 2002 Draft Specification NFS version 4 Protocol October 2002
of establishing the information the server needs to make callbacks to of establishing the information the server needs to make callbacks to
the client for purpose of supporting delegations. It is permitted to the client for purpose of supporting delegations. It is permitted to
change this information via SETCLIENTID and SETCLIENTID_CONFIRM change this information via SETCLIENTID and SETCLIENTID_CONFIRM
within the same incarnation of the client without removing the within the same incarnation of the client without removing the
client's leased state. client's leased state.
Once a SETCLIENTID and SETCLIENTID_CONFIRM sequence has successfully Once a SETCLIENTID and SETCLIENTID_CONFIRM sequence has successfully
completed, the client uses the short hand client identifier, of type completed, the client uses the short hand client identifier, of type
clientid4, instead of the longer and less compact nfs_client_id4 clientid4, instead of the longer and less compact nfs_client_id4
skipping to change at page 67, line 5 skipping to change at page 68, line 5
there had been no activity from that client for many minutes. there had been no activity from that client for many minutes.
Note that if the id string in a SETCLIENTID request is properly Note that if the id string in a SETCLIENTID request is properly
constructed, and if the client takes care to use the same principal constructed, and if the client takes care to use the same principal
for each successive use of SETCLIENTID, then, barring an active for each successive use of SETCLIENTID, then, barring an active
denial of service attack, NFS4ERR_CLID_INUSE should never be denial of service attack, NFS4ERR_CLID_INUSE should never be
returned. returned.
However, client bugs, server bugs, or perhaps a deliberate change of However, client bugs, server bugs, or perhaps a deliberate change of
Draft Specification NFS version 4 Protocol September 2002 Draft Specification NFS version 4 Protocol October 2002
the principal owner of the id string (such as the case of a client the principal owner of the id string (such as the case of a client
that changes security flavors, and under the new flavor, there is no that changes security flavors, and under the new flavor, there is no
mapping to the previous owner) will in rare cases result in mapping to the previous owner) will in rare cases result in
NFS4ERR_CLID_INUSE. NFS4ERR_CLID_INUSE.
In that event, when the server gets a SETCLIENTID for a client id In that event, when the server gets a SETCLIENTID for a client id
that currently has no state, or it has state, but the lease has that currently has no state, or it has state, but the lease has
expired, rather than returning NFS4ERR_CLID_INUSE, the server MUST expired, rather than returning NFS4ERR_CLID_INUSE, the server MUST
allow the SETCLIENTID, and confirm the new clientid if followed by allow the SETCLIENTID, and confirm the new clientid if followed by
skipping to change at page 68, line 5 skipping to change at page 69, line 5
o The stateid was generated by an earlier server instance (i.e. o The stateid was generated by an earlier server instance (i.e.
before a server reboot). The error NFS4ERR_STALE_STATEID should before a server reboot). The error NFS4ERR_STALE_STATEID should
be returned. be returned.
o The stateid was generated by the current server instance but the o The stateid was generated by the current server instance but the
stateid no longer designates the current locking state for the stateid no longer designates the current locking state for the
lockowner-file pair in question (i.e. one or more locking lockowner-file pair in question (i.e. one or more locking
operations has occurred). The error NFS4ERR_OLD_STATEID should operations has occurred). The error NFS4ERR_OLD_STATEID should
be returned. be returned.
Draft Specification NFS version 4 Protocol September 2002 Draft Specification NFS version 4 Protocol October 2002
This error condition will only occur when the client issues a This error condition will only occur when the client issues a
locking request which changes a stateid while an I/O request locking request which changes a stateid while an I/O request
that uses that stateid is outstanding. that uses that stateid is outstanding.
o The stateid was generated by the current server instance but the o The stateid was generated by the current server instance but the
stateid does not designate a locking state for any active stateid does not designate a locking state for any active
lockowner-file pair. The error NFS4ERR_BAD_STATEID should be lockowner-file pair. The error NFS4ERR_BAD_STATEID should be
returned. returned.
skipping to change at page 69, line 5 skipping to change at page 70, line 5
the file by means of the SETATTR), even where SETATTR is not the file by means of the SETATTR), even where SETATTR is not
explicitly mentioned in the text. explicitly mentioned in the text.
If the lock_owner performs a READ or WRITE in a situation in which it If the lock_owner performs a READ or WRITE in a situation in which it
has established a lock or share reservation on the server (any OPEN has established a lock or share reservation on the server (any OPEN
constitutes a share reservation) the stateid (previously returned by constitutes a share reservation) the stateid (previously returned by
the server) must be used to indicate what locks, including both the server) must be used to indicate what locks, including both
record locks and share reservations, are held by the lockowner. If record locks and share reservations, are held by the lockowner. If
no state is established by the client, either record lock or share no state is established by the client, either record lock or share
Draft Specification NFS version 4 Protocol September 2002 Draft Specification NFS version 4 Protocol October 2002
reservation, a stateid of all bits 0 is used. Regardless whether a reservation, a stateid of all bits 0 is used. Regardless whether a
stateid of all bits 0, or a stateid returned by the server is used, stateid of all bits 0, or a stateid returned by the server is used,
if there is a conflicting share reservation or mandatory record lock if there is a conflicting share reservation or mandatory record lock
held on the file, the server MUST refuse to service the READ or WRITE held on the file, the server MUST refuse to service the READ or WRITE
operation. operation.
Share reservations are established by OPEN operations and by their Share reservations are established by OPEN operations and by their
nature are mandatory in that when the OPEN denies READ or WRITE nature are mandatory in that when the OPEN denies READ or WRITE
operations, that denial results in such operations being rejected operations, that denial results in such operations being rejected
skipping to change at page 70, line 5 skipping to change at page 71, line 5
NFS4ERR_LOCKED. NFS4ERR_LOCKED.
For Windows environments, there are no advisory record locks, so the For Windows environments, there are no advisory record locks, so the
server always checks for record locks during I/O requests. server always checks for record locks during I/O requests.
Thus, the NFS version 4 LOCK operation does not need to distinguish Thus, the NFS version 4 LOCK operation does not need to distinguish
between advisory and mandatory record locks. It is the NFS version 4 between advisory and mandatory record locks. It is the NFS version 4
server's processing of the READ and WRITE operations that introduces server's processing of the READ and WRITE operations that introduces
the distinction. the distinction.
Draft Specification NFS version 4 Protocol September 2002 Draft Specification NFS version 4 Protocol October 2002
Every stateid other than the special stateid values noted in this Every stateid other than the special stateid values noted in this
section, whether returned by an OPEN-type operation (i.e. OPEN, section, whether returned by an OPEN-type operation (i.e. OPEN,
OPEN_DOWNGRADE), or by a LOCK-type operation (i.e. LOCK or LOCKU), OPEN_DOWNGRADE), or by a LOCK-type operation (i.e. LOCK or LOCKU),
defines an access mode for the file (i.e. READ, WRITE, or READ-WRITE) defines an access mode for the file (i.e. READ, WRITE, or READ-WRITE)
as established by the original OPEN which began the stateid sequence, as established by the original OPEN which began the stateid sequence,
and as modified by subsequent OPENs and OPEN_DOWNGRADEs within that and as modified by subsequent OPENs and OPEN_DOWNGRADEs within that
stateid sequence. When a READ, WRITE, or SETATTR which specifies the stateid sequence. When a READ, WRITE, or SETATTR which specifies the
size attribute, is done, the operation is subject to checking against size attribute, is done, the operation is subject to checking against
the access mode to verify that the operation is appropriate given the the access mode to verify that the operation is appropriate given the
skipping to change at page 71, line 5 skipping to change at page 72, line 5
most-one" semantics that are not provided by ONCRPC. ONCRPC over a most-one" semantics that are not provided by ONCRPC. ONCRPC over a
reliable transport is not sufficient because a sequence of locking reliable transport is not sufficient because a sequence of locking
requests may span multiple TCP connections. In the face of requests may span multiple TCP connections. In the face of
retransmission or reordering, lock or unlock requests must have a retransmission or reordering, lock or unlock requests must have a
well defined and consistent behavior. To accomplish this, each lock well defined and consistent behavior. To accomplish this, each lock
request contains a sequence number that is a consecutively increasing request contains a sequence number that is a consecutively increasing
integer. Different lock_owners have different sequences. The server integer. Different lock_owners have different sequences. The server
maintains the last sequence number (L) received and the response that maintains the last sequence number (L) received and the response that
was returned. The first request issued for any given lock_owner is was returned. The first request issued for any given lock_owner is
Draft Specification NFS version 4 Protocol September 2002 Draft Specification NFS version 4 Protocol October 2002
issued with a sequence number of zero. issued with a sequence number of zero.
Note that for requests that contain a sequence number, for each Note that for requests that contain a sequence number, for each
lock_owner, there should be no more than one outstanding request. lock_owner, there should be no more than one outstanding request.
If a request (r) with a previous sequence number (r < L) is received, If a request (r) with a previous sequence number (r < L) is received,
it is rejected with the return of error NFS4ERR_BAD_SEQID. Given a it is rejected with the return of error NFS4ERR_BAD_SEQID. Given a
properly-functioning client, the response to (r) must have been properly-functioning client, the response to (r) must have been
received before the last request (L) was sent. If a duplicate of received before the last request (L) was sent. If a duplicate of
skipping to change at page 72, line 5 skipping to change at page 73, line 5
the methods described above, there are no risks of a Byzantine router the methods described above, there are no risks of a Byzantine router
re-sending old requests. The server need only maintain the re-sending old requests. The server need only maintain the
(lock_owner, sequence number) state as long as there are open files (lock_owner, sequence number) state as long as there are open files
or closed files with locks outstanding. or closed files with locks outstanding.
LOCK, LOCKU, OPEN, OPEN_DOWNGRADE, and CLOSE each contain a sequence LOCK, LOCKU, OPEN, OPEN_DOWNGRADE, and CLOSE each contain a sequence
number and therefore the risk of the replay of these operations number and therefore the risk of the replay of these operations
resulting in undesired effects is non-existent while the server resulting in undesired effects is non-existent while the server
maintains the lock_owner state. maintains the lock_owner state.
Draft Specification NFS version 4 Protocol September 2002 Draft Specification NFS version 4 Protocol October 2002
8.1.7. Releasing lock_owner State 8.1.7. Releasing lock_owner State
When a particular lock_owner no longer holds open or file locking When a particular lock_owner no longer holds open or file locking
state at the server, the server may choose to release the sequence state at the server, the server may choose to release the sequence
number state associated with the lock_owner. The server may make number state associated with the lock_owner. The server may make
this choice based on lease expiration, for the reclamation of server this choice based on lease expiration, for the reclamation of server
memory, or other implementation specific details. In any event, the memory, or other implementation specific details. In any event, the
server is able to do this safely only when the lock_owner no longer server is able to do this safely only when the lock_owner no longer
is being utilized by the client. The server may choose to hold the is being utilized by the client. The server may choose to hold the
skipping to change at page 73, line 5 skipping to change at page 74, line 5
situations in which the server can avoid the need for confirmation situations in which the server can avoid the need for confirmation
when responding to open requests. The two constraints are: when responding to open requests. The two constraints are:
o The server must not bestow a delegation for any open which would o The server must not bestow a delegation for any open which would
require confirmation. require confirmation.
o The server MUST NOT require confirmation on a reclaim-type open o The server MUST NOT require confirmation on a reclaim-type open
(i.e. one specifying claim type CLAIM_PREVIOUS or (i.e. one specifying claim type CLAIM_PREVIOUS or
CLAIM_DELEGATE_PREV). CLAIM_DELEGATE_PREV).
Draft Specification NFS version 4 Protocol September 2002 Draft Specification NFS version 4 Protocol October 2002
These constraints are related in that reclaim-type opens are the only These constraints are related in that reclaim-type opens are the only
ones in which the server may be required to send a delegation. For ones in which the server may be required to send a delegation. For
CLAIM_NULL, sending the delegation is optional while for CLAIM_NULL, sending the delegation is optional while for
CLAIM_DELEGATE_CUR, no delegation is sent. CLAIM_DELEGATE_CUR, no delegation is sent.
Delegations being sent with an open requiring confirmation are Delegations being sent with an open requiring confirmation are
troublesome because recovering from non-confirmation adds undue troublesome because recovering from non-confirmation adds undue
complexity to the protocol while requiring confirmation on reclaim- complexity to the protocol while requiring confirmation on reclaim-
type opens poses difficulties in that the inability to resolve the type opens poses difficulties in that the inability to resolve the
skipping to change at page 74, line 5 skipping to change at page 75, line 5
As discussed in the section "Server Failure and Recovery" below, the As discussed in the section "Server Failure and Recovery" below, the
server may employ certain optimizations during recovery that work server may employ certain optimizations during recovery that work
effectively only when the client's behavior during lock recovery is effectively only when the client's behavior during lock recovery is
similar to the client's locking behavior prior to server failure. similar to the client's locking behavior prior to server failure.
8.3. Upgrading and Downgrading Locks 8.3. Upgrading and Downgrading Locks
If a client has a write lock on a record, it can request an atomic If a client has a write lock on a record, it can request an atomic
downgrade of the lock to a read lock via the LOCK request, by setting downgrade of the lock to a read lock via the LOCK request, by setting
Draft Specification NFS version 4 Protocol September 2002 Draft Specification NFS version 4 Protocol October 2002
the type to READ_LT. If the server supports atomic downgrade, the the type to READ_LT. If the server supports atomic downgrade, the
request will succeed. If not, it will return NFS4ERR_LOCK_NOTSUPP. request will succeed. If not, it will return NFS4ERR_LOCK_NOTSUPP.
The client should be prepared to receive this error, and if The client should be prepared to receive this error, and if
appropriate, report the error to the requesting application. appropriate, report the error to the requesting application.
If a client has a read lock on a record, it can request an atomic If a client has a read lock on a record, it can request an atomic
upgrade of the lock to a write lock via the LOCK request by setting upgrade of the lock to a write lock via the LOCK request by setting
the type to WRITE_LT or WRITEW_LT. If the server does not support the type to WRITE_LT or WRITEW_LT. If the server does not support
atomic upgrade, it will return NFS4ERR_LOCK_NOTSUPP. If the upgrade atomic upgrade, it will return NFS4ERR_LOCK_NOTSUPP. If the upgrade
skipping to change at page 75, line 5 skipping to change at page 76, line 5
avoid the burden of needlessly frequent polling for blocking locks. avoid the burden of needlessly frequent polling for blocking locks.
The server should take care in the length of delay in the event the The server should take care in the length of delay in the event the
client retransmits the request. client retransmits the request.
8.5. Lease Renewal 8.5. Lease Renewal
The purpose of a lease is to allow a server to remove stale locks The purpose of a lease is to allow a server to remove stale locks
that are held by a client that has crashed or is otherwise that are held by a client that has crashed or is otherwise
unreachable. It is not a mechanism for cache consistency and lease unreachable. It is not a mechanism for cache consistency and lease
Draft Specification NFS version 4 Protocol September 2002 Draft Specification NFS version 4 Protocol October 2002
renewals may not be denied if the lease interval has not expired. renewals may not be denied if the lease interval has not expired.
The following events cause implicit renewal of all of the leases for The following events cause implicit renewal of all of the leases for
a given client (i.e. all those sharing a given clientid). Each of a given client (i.e. all those sharing a given clientid). Each of
these is a positive indication that the client is still active and these is a positive indication that the client is still active and
that the associated state held at the server, for the client, is that the associated state held at the server, for the client, is
still valid. still valid.
o An OPEN with a valid clientid. o An OPEN with a valid clientid.
skipping to change at page 76, line 5 skipping to change at page 77, line 5
8.6. Crash Recovery 8.6. Crash Recovery
The important requirement in crash recovery is that both the client The important requirement in crash recovery is that both the client
and the server know when the other has failed. Additionally, it is and the server know when the other has failed. Additionally, it is
required that a client sees a consistent view of data across server required that a client sees a consistent view of data across server
restarts or reboots. All READ and WRITE operations that may have restarts or reboots. All READ and WRITE operations that may have
been queued within the client or network buffers must wait until the been queued within the client or network buffers must wait until the
client has successfully recovered the locks protecting the READ and client has successfully recovered the locks protecting the READ and
WRITE operations. WRITE operations.
Draft Specification NFS version 4 Protocol September 2002 Draft Specification NFS version 4 Protocol October 2002
8.6.1. Client Failure and Recovery 8.6.1. Client Failure and Recovery
In the event that a client fails, the server may recover the client's In the event that a client fails, the server may recover the client's
locks when the associated leases have expired. Conflicting locks locks when the associated leases have expired. Conflicting locks
from another client may only be granted after this lease expiration. from another client may only be granted after this lease expiration.
If the client is able to restart or reinitialize within the lease If the client is able to restart or reinitialize within the lease
period the client may be forced to wait the remainder of the lease period the client may be forced to wait the remainder of the lease
period before obtaining new locks. period before obtaining new locks.
skipping to change at page 77, line 5 skipping to change at page 78, line 5
A client can determine that server failure (and thus loss of locking A client can determine that server failure (and thus loss of locking
state) has occurred, when it receives one of two errors. The state) has occurred, when it receives one of two errors. The
NFS4ERR_STALE_STATEID error indicates a stateid invalidated by a NFS4ERR_STALE_STATEID error indicates a stateid invalidated by a
reboot or restart. The NFS4ERR_STALE_CLIENTID error indicates a reboot or restart. The NFS4ERR_STALE_CLIENTID error indicates a
clientid invalidated by reboot or restart. When either of these are clientid invalidated by reboot or restart. When either of these are
received, the client must establish a new clientid (See the section received, the client must establish a new clientid (See the section
"Client ID") and re-establish the locking state as discussed below. "Client ID") and re-establish the locking state as discussed below.
The period of special handling of locking and READs and WRITEs, equal The period of special handling of locking and READs and WRITEs, equal
Draft Specification NFS version 4 Protocol September 2002 Draft Specification NFS version 4 Protocol October 2002
in duration to the lease period, is referred to as the "grace in duration to the lease period, is referred to as the "grace
period". During the grace period, clients recover locks and the period". During the grace period, clients recover locks and the
associated state by reclaim-type locking requests (i.e. LOCK requests associated state by reclaim-type locking requests (i.e. LOCK requests
with reclaim set to true and OPEN operations with a claim type of with reclaim set to true and OPEN operations with a claim type of
CLAIM_PREVIOUS). During the grace period, the server must reject CLAIM_PREVIOUS). During the grace period, the server must reject
READ and WRITE operations and non-reclaim locking requests (i.e. READ and WRITE operations and non-reclaim locking requests (i.e.
other LOCK and OPEN operations) with an error of NFS4ERR_GRACE. other LOCK and OPEN operations) with an error of NFS4ERR_GRACE.
If the server can reliably determine that granting a non-reclaim If the server can reliably determine that granting a non-reclaim
skipping to change at page 78, line 5 skipping to change at page 79, line 5
non-reclaim lock and I/O requests. In this case the client should non-reclaim lock and I/O requests. In this case the client should
employ a retry mechanism for the request. A delay (on the order of employ a retry mechanism for the request. A delay (on the order of
several seconds) between retries should be used to avoid overwhelming several seconds) between retries should be used to avoid overwhelming
the server. Further discussion of the general issue is included in the server. Further discussion of the general issue is included in
[Floyd]. The client must account for the server that is able to [Floyd]. The client must account for the server that is able to
perform I/O and non-reclaim locking requests within the grace period perform I/O and non-reclaim locking requests within the grace period
as well as those that can not do so. as well as those that can not do so.
A reclaim-type locking request outside the server's grace period can A reclaim-type locking request outside the server's grace period can
Draft Specification NFS version 4 Protocol September 2002 Draft Specification NFS version 4 Protocol October 2002
only succeed if the server can guarantee that no conflicting lock or only succeed if the server can guarantee that no conflicting lock or
I/O request has been granted since reboot or restart. I/O request has been granted since reboot or restart.
A server may, upon restart, establish a new value for the lease A server may, upon restart, establish a new value for the lease
period. Therefore, clients should, once a new clientid is period. Therefore, clients should, once a new clientid is
established, refetch the lease_time attribute and use it as the basis established, refetch the lease_time attribute and use it as the basis
for lease renewal for the lease associated with that server. However, for lease renewal for the lease associated with that server. However,
the server must establish, for this restart event, a grace period at the server must establish, for this restart event, a grace period at
least as long as the lease period for the previous server least as long as the lease period for the previous server
skipping to change at page 79, line 5 skipping to change at page 80, line 5
2. Client A and server experience mutual network partition, 2. Client A and server experience mutual network partition,
such that client A is unable to renew its lease. such that client A is unable to renew its lease.
3. Client A's lease expires, so server releases lock. 3. Client A's lease expires, so server releases lock.
4. Client B acquires a lock that would have conflicted with 4. Client B acquires a lock that would have conflicted with
that of Client A. that of Client A.
5. Client B releases the lock 5. Client B releases the lock
Draft Specification NFS version 4 Protocol September 2002 Draft Specification NFS version 4 Protocol October 2002
6. Server reboots 6. Server reboots
7. Network partition between client A and server heals. 7. Network partition between client A and server heals.
8. Client A issues a RENEW operation, and gets back a 8. Client A issues a RENEW operation, and gets back a
NFS4ERR_STALE_CLIENTID. NFS4ERR_STALE_CLIENTID.
9. Client A reclaims its lock within the server's grace period. 9. Client A reclaims its lock within the server's grace period.
skipping to change at page 80, line 5 skipping to change at page 81, line 5
Solving the first and second edge conditions requires that the server Solving the first and second edge conditions requires that the server
either assume after it reboots that edge condition occurs, and thus either assume after it reboots that edge condition occurs, and thus
return NFS4ERR_NO_GRACE for all reclaim attempts, or that the server return NFS4ERR_NO_GRACE for all reclaim attempts, or that the server
record some information stable storage. The amount of information record some information stable storage. The amount of information
the server records in stable storage is in inverse proportion to how the server records in stable storage is in inverse proportion to how
harsh the server wants to be whenever the edge conditions occur. The harsh the server wants to be whenever the edge conditions occur. The
server that is completely tolerant of all edge conditions will record server that is completely tolerant of all edge conditions will record
in stable storage every lock that is acquired, removing the lock in stable storage every lock that is acquired, removing the lock
Draft Specification NFS version 4 Protocol September 2002 Draft Specification NFS version 4 Protocol October 2002
record from stable storage only when the lock is unlocked by the record from stable storage only when the lock is unlocked by the
client and the lock's lockowner advances the sequence number such client and the lock's lockowner advances the sequence number such
that the lock release is not the last stateful event for the that the lock release is not the last stateful event for the
lockowner's sequence. For the two aforementioned edge conditions, the lockowner's sequence. For the two aforementioned edge conditions, the
harshest a server can be, and still support a grace period for harshest a server can be, and still support a grace period for
reclaims, requires that the server record in stable storage reclaims, requires that the server record in stable storage
information some minimal information. For example, a server information some minimal information. For example, a server
implementation could, for each client, save in stable storage a implementation could, for each client, save in stable storage a
record containing: record containing:
skipping to change at page 81, line 5 skipping to change at page 82, line 5
1. Reject all reclaims with NFS4ERR_NO_GRACE. This is 1. Reject all reclaims with NFS4ERR_NO_GRACE. This is
superharsh, but necessary if the server does not want to superharsh, but necessary if the server does not want to
record lock state in stable storage. record lock state in stable storage.
2. Record sufficient state in stable storage such that all 2. Record sufficient state in stable storage such that all
known edge conditions involving server reboot, including the known edge conditions involving server reboot, including the
two noted in this section, are detected. False positives are two noted in this section, are detected. False positives are
acceptable. Note that at this time, it is not known if there acceptable. Note that at this time, it is not known if there
are other edge conditions. are other edge conditions.
Draft Specification NFS version 4 Protocol September 2002 Draft Specification NFS version 4 Protocol October 2002
In the event, after a server reboot, the server determines In the event, after a server reboot, the server determines
that there is unrecoverable damage or corruption to the the that there is unrecoverable damage or corruption to the the
stable storage, then for all clients and/or locks affected, stable storage, then for all clients and/or locks affected,
the server MUST return NFS4ERR_NO_GRACE. the server MUST return NFS4ERR_NO_GRACE.
A mandate for the client's handling of the NFS4ERR_NO_GRACE error is A mandate for the client's handling of the NFS4ERR_NO_GRACE error is
outside the scope of this specification, since the strategies for outside the scope of this specification, since the strategies for
such handling are very dependent on the client's operating such handling are very dependent on the client's operating
environment. However, one potential approach is described below. environment. However, one potential approach is described below.
skipping to change at page 82, line 5 skipping to change at page 83, line 5
not receive a response. From this, the next time the client does a not receive a response. From this, the next time the client does a
lock operation for the lock_owner, it can send the cached request, if lock operation for the lock_owner, it can send the cached request, if
there is one, and if the request was one that established state (e.g. there is one, and if the request was one that established state (e.g.
a LOCK or OPEN operation), the server will return the cached result a LOCK or OPEN operation), the server will return the cached result
or if never saw the request, perform it. The client can follow up or if never saw the request, perform it. The client can follow up
with a request to remove the state (e.g. a LOCKU or CLOSE operation). with a request to remove the state (e.g. a LOCKU or CLOSE operation).
With this approach, the sequencing and stateid information on the With this approach, the sequencing and stateid information on the
client and server for the given lock_owner will re-synchronize and in client and server for the given lock_owner will re-synchronize and in
turn the lock state will re-synchronize. turn the lock state will re-synchronize.
Draft Specification NFS version 4 Protocol September 2002 Draft Specification NFS version 4 Protocol October 2002
8.8. Server Revocation of Locks 8.8. Server Revocation of Locks
At any point, the server can revoke locks held by a client and the At any point, the server can revoke locks held by a client and the
client must be prepared for this event. When the client detects that client must be prepared for this event. When the client detects that
its locks have been or may have been revoked, the client is its locks have been or may have been revoked, the client is
responsible for validating the state information between itself and responsible for validating the state information between itself and
the server. Validating locking state for the client means that it the server. Validating locking state for the client means that it
must verify or reclaim state for each lock currently held. must verify or reclaim state for each lock currently held.
skipping to change at page 83, line 5 skipping to change at page 84, line 5
which the server may grant conflicting locks after the lease period which the server may grant conflicting locks after the lease period
has expired for a client. When it is possible that the lease period has expired for a client. When it is possible that the lease period
has expired, the client must validate each lock currently held to has expired, the client must validate each lock currently held to
ensure that a conflicting lock has not been granted. The client may ensure that a conflicting lock has not been granted. The client may
accomplish this task by issuing an I/O request, either a pending I/O accomplish this task by issuing an I/O request, either a pending I/O
or a zero-length read, specifying the stateid associated with the or a zero-length read, specifying the stateid associated with the
lock in question. If the response to the request is success, the lock in question. If the response to the request is success, the
client has validated all of the locks governed by that stateid and client has validated all of the locks governed by that stateid and
re-established the appropriate state between itself and the server. re-established the appropriate state between itself and the server.
Draft Specification NFS version 4 Protocol September 2002 Draft Specification NFS version 4 Protocol October 2002
If the I/O request is not successful, then one or more of the locks If the I/O request is not successful, then one or more of the locks
associated with the stateid was revoked by the server and the client associated with the stateid was revoked by the server and the client
must notify the owner. must notify the owner.
8.9. Share Reservations 8.9. Share Reservations
A share reservation is a mechanism to control access to a file. It A share reservation is a mechanism to control access to a file. It
is a separate and independent mechanism from record locking. When a is a separate and independent mechanism from record locking. When a
client opens a file, it issues an OPEN operation to the server client opens a file, it issues an OPEN operation to the server
skipping to change at page 84, line 5 skipping to change at page 85, line 5
To provide correct share semantics, a client MUST use the OPEN To provide correct share semantics, a client MUST use the OPEN
operation to obtain the initial filehandle and indicate the desired operation to obtain the initial filehandle and indicate the desired
access and what if any access to deny. Even if the client intends to access and what if any access to deny. Even if the client intends to
use a stateid of all 0's or all 1's, it must still obtain the use a stateid of all 0's or all 1's, it must still obtain the
filehandle for the regular file with the OPEN operation so the filehandle for the regular file with the OPEN operation so the
appropriate share semantics can be applied. For clients that do not appropriate share semantics can be applied. For clients that do not
have a deny mode built into their open programming interfaces, deny have a deny mode built into their open programming interfaces, deny
equal to NONE should be used. equal to NONE should be used.
Draft Specification NFS version 4 Protocol September 2002 Draft Specification NFS version 4 Protocol October 2002
The OPEN operation with the CREATE flag, also subsumes the CREATE The OPEN operation with the CREATE flag, also subsumes the CREATE
operation for regular files as used in previous versions of the NFS operation for regular files as used in previous versions of the NFS
protocol. This allows a create with a share to be done atomically. protocol. This allows a create with a share to be done atomically.
The CLOSE operation removes all share reservations held by the The CLOSE operation removes all share reservations held by the
lock_owner on that file. If record locks are held, the client SHOULD lock_owner on that file. If record locks are held, the client SHOULD
release all locks before issuing a CLOSE. The server MAY free all release all locks before issuing a CLOSE. The server MAY free all
outstanding locks on CLOSE but some servers may not support the CLOSE outstanding locks on CLOSE but some servers may not support the CLOSE
of a file that still has record locks held. The server MUST return of a file that still has record locks held. The server MUST return
skipping to change at page 85, line 5 skipping to change at page 86, line 5
o The time that a lockowner is freed by the server due to period o The time that a lockowner is freed by the server due to period
with no activity. with no activity.
o All locks for the client are freed as a result of a SETCLIENTID. o All locks for the client are freed as a result of a SETCLIENTID.
Servers may avoid this complexity, at the cost of less complete Servers may avoid this complexity, at the cost of less complete
protocol error checking, by simply responding NFS4_OK in the event of protocol error checking, by simply responding NFS4_OK in the event of
a CLOSE for a deallocated stateid, on the assumption that this case a CLOSE for a deallocated stateid, on the assumption that this case
must be caused by a retransmitted close. When adopting this must be caused by a retransmitted close. When adopting this
Draft Specification NFS version 4 Protocol September 2002 Draft Specification NFS version 4 Protocol October 2002
approach, it is desirable to at least log an error when returning a approach, it is desirable to at least log an error when returning a
no-error indication in this situation. If the server maintains a no-error indication in this situation. If the server maintains a
reply-cache mechanism, it can verify the CLOSE is indeed a reply-cache mechanism, it can verify the CLOSE is indeed a
retransmission and avoid error logging in most cases. retransmission and avoid error logging in most cases.
8.11. Open Upgrade and Downgrade 8.11. Open Upgrade and Downgrade
When an OPEN is done for a file and the lockowner for which the open When an OPEN is done for a file and the lockowner for which the open
is being done already has the file open, the result is to upgrade the is being done already has the file open, the result is to upgrade the
skipping to change at page 86, line 5 skipping to change at page 87, line 5
recovery at a cost of increased RENEW or READ (with zero length) recovery at a cost of increased RENEW or READ (with zero length)
requests. Longer leases are certainly kinder and gentler to servers requests. Longer leases are certainly kinder and gentler to servers
trying to handle very large numbers of clients. The number of RENEW trying to handle very large numbers of clients. The number of RENEW
requests drop in proportion to the lease time. The disadvantages of requests drop in proportion to the lease time. The disadvantages of
long leases are slower recovery after server failure (the server must long leases are slower recovery after server failure (the server must
wait for the leases to expire and the grace period to elapse before wait for the leases to expire and the grace period to elapse before
granting new lock requests) and increased file contention (if client granting new lock requests) and increased file contention (if client
fails to transmit an unlock request then server must wait for lease fails to transmit an unlock request then server must wait for lease
expiration before granting new locks). expiration before granting new locks).
Draft Specification NFS version 4 Protocol September 2002 Draft Specification NFS version 4 Protocol October 2002
Long leases are usable if the server is able to store lease state in Long leases are usable if the server is able to store lease state in
non-volatile memory. Upon recovery, the server can reconstruct the non-volatile memory. Upon recovery, the server can reconstruct the
lease state from its non-volatile memory and continue operation with lease state from its non-volatile memory and continue operation with
its clients and therefore long leases would not be an issue. its clients and therefore long leases would not be an issue.
8.13. Clocks, Propagation Delay, and Calculating Lease Expiration 8.13. Clocks, Propagation Delay, and Calculating Lease Expiration
To avoid the need for synchronized clocks, lease times are granted by To avoid the need for synchronized clocks, lease times are granted by
the server as a time delta. However, there is a requirement that the the server as a time delta. However, there is a requirement that the
skipping to change at page 87, line 5 skipping to change at page 88, line 5
Share Reservations" Share Reservations"
If server replica or a server immigrating a filesystem agrees to, or If server replica or a server immigrating a filesystem agrees to, or
is expected to, accept opaque values from the client that originated is expected to, accept opaque values from the client that originated
from another server, then it is a wise implementation practice for from another server, then it is a wise implementation practice for
the servers to encode the "opaque" values in network byte order. This the servers to encode the "opaque" values in network byte order. This
way, servers acting as replicas or immigrating filesystems will be way, servers acting as replicas or immigrating filesystems will be
able to parse values like stateids, directory cookies, filehandles, able to parse values like stateids, directory cookies, filehandles,
etc. even if their native byte order is different from other servers etc. even if their native byte order is different from other servers
Draft Specification NFS version 4 Protocol September 2002 Draft Specification NFS version 4 Protocol October 2002
cooperating in the replication and migration of the filesystem. cooperating in the replication and migration of the filesystem.
8.14.1. Migration and State 8.14.1. Migration and State
In the case of migration, the servers involved in the migration of a In the case of migration, the servers involved in the migration of a
filesystem SHOULD transfer all server state from the original to the filesystem SHOULD transfer all server state from the original to the
new server. This must be done in a way that is transparent to the new server. This must be done in a way that is transparent to the
client. This state transfer will ease the client's transition when a client. This state transfer will ease the client's transition when a
filesystem migration occurs. If the servers are successful in filesystem migration occurs. If the servers are successful in
skipping to change at page 88, line 5 skipping to change at page 89, line 5
leases, stateids and clientids do not have validity across a leases, stateids and clientids do not have validity across a
transition from one server to another. The client must re-establish transition from one server to another. The client must re-establish
its locks on the new server. This can be compared to the re- its locks on the new server. This can be compared to the re-
establishment of locks by means of reclaim-type requests after a establishment of locks by means of reclaim-type requests after a
server reboot. The difference is that the server has no provision to server reboot. The difference is that the server has no provision to
distinguish requests reclaiming locks from those obtaining new locks distinguish requests reclaiming locks from those obtaining new locks
or to defer the latter. Thus, a client re-establishing a lock on the or to defer the latter. Thus, a client re-establishing a lock on the
new server (by means of a LOCK or OPEN request), may have the new server (by means of a LOCK or OPEN request), may have the
requests denied due to a conflicting lock. Since replication is requests denied due to a conflicting lock. Since replication is
Draft Specification NFS version 4 Protocol September 2002 Draft Specification NFS version 4 Protocol October 2002
intended for read-only use of filesystems, such denial of locks intended for read-only use of filesystems, such denial of locks
should not pose large difficulties in practice. When an attempt to should not pose large difficulties in practice. When an attempt to
re-establish a lock on a new server is denied, the client should re-establish a lock on a new server is denied, the client should
treat the situation as if his original lock had been revoked. treat the situation as if his original lock had been revoked.
8.14.3. Notification of Migrated Lease 8.14.3. Notification of Migrated Lease
In the case of lease renewal, the client may not be submitting In the case of lease renewal, the client may not be submitting
requests for a filesystem that has been migrated to another server. requests for a filesystem that has been migrated to another server.
skipping to change at page 89, line 5 skipping to change at page 90, line 5
When state is transferred transparently, that state should include When state is transferred transparently, that state should include
the correct value of the lease_time attribute. The lease_time the correct value of the lease_time attribute. The lease_time
attribute on the destination server must never be less than that on attribute on the destination server must never be less than that on
the source since this would result in premature expiration of leases the source since this would result in premature expiration of leases
granted by the source server. Upon migration in which state is granted by the source server. Upon migration in which state is
transferred transparently, the client is under no obligation to re- transferred transparently, the client is under no obligation to re-
fetch the lease_time attribute and may continue to use the value fetch the lease_time attribute and may continue to use the value
previously fetched (on the source server). previously fetched (on the source server).
Draft Specification NFS version 4 Protocol September 2002 Draft Specification NFS version 4 Protocol October 2002
If state has not been transferred transparently (i.e. the client sees If state has not been transferred transparently (i.e. the client sees
a real or simulated server reboot), the client should fetch the value a real or simulated server reboot), the client should fetch the value
of lease_time on the new (i.e. destination) server, and use it for of lease_time on the new (i.e. destination) server, and use it for
subsequent locking requests. However the server must respect a grace subsequent locking requests. However the server must respect a grace
period at least as long as the lease_time on the source server, in period at least as long as the lease_time on the source server, in
order to ensure that clients have ample time to reclaim their locks order to ensure that clients have ample time to reclaim their locks
before potentially conflicting non-reclaimed locks are granted. The before potentially conflicting non-reclaimed locks are granted. The
means by which the new server obtains the value of lease_time on the means by which the new server obtains the value of lease_time on the
old server is left to the server implementations. It is not old server is left to the server implementations. It is not
specified by the NFS version 4 protocol. specified by the NFS version 4 protocol.
Draft Specification NFS version 4 Protocol September 2002 Draft Specification NFS version 4 Protocol October 2002
9. Client-Side Caching 9. Client-Side Caching
Client-side caching of data, of file attributes, and of file names is Client-side caching of data, of file attributes, and of file names is
essential to providing good performance with the NFS protocol. essential to providing good performance with the NFS protocol.
Providing distributed cache coherence is a difficult problem and Providing distributed cache coherence is a difficult problem and
previous versions of the NFS protocol have not attempted it. previous versions of the NFS protocol have not attempted it.
Instead, several NFS client implementation techniques have been used Instead, several NFS client implementation techniques have been used
to reduce the problems that a lack of coherence poses for users. to reduce the problems that a lack of coherence poses for users.
These techniques have not been clearly defined by earlier protocol These techniques have not been clearly defined by earlier protocol
skipping to change at page 91, line 5 skipping to change at page 92, line 5
performance is to allow a client that repeatedly opens a file to do performance is to allow a client that repeatedly opens a file to do
so without reference to the server. This is done until potentially so without reference to the server. This is done until potentially
conflicting operations from another client actually occur. conflicting operations from another client actually occur.
A similar situation arises in connection with file locking. Sending A similar situation arises in connection with file locking. Sending
file lock and unlock requests to the server as well as the read and file lock and unlock requests to the server as well as the read and
write requests necessary to make data caching consistent with the write requests necessary to make data caching consistent with the
locking semantics (see the section "Data Caching and File Locking") locking semantics (see the section "Data Caching and File Locking")
can severely limit performance. When locking is used to provide can severely limit performance. When locking is used to provide
Draft Specification NFS version 4 Protocol September 2002 Draft Specification NFS version 4 Protocol October 2002
protection against infrequent conflicts, a large penalty is incurred. protection against infrequent conflicts, a large penalty is incurred.
This penalty may discourage the use of file locking by applications. This penalty may discourage the use of file locking by applications.
The NFS version 4 protocol provides more aggressive caching The NFS version 4 protocol provides more aggressive caching
strategies with the following design goals: strategies with the following design goals:
o Compatibility with a large range of server semantics. o Compatibility with a large range of server semantics.
o Provide the same caching benefits as previous versions of the o Provide the same caching benefits as previous versions of the
skipping to change at page 92, line 5 skipping to change at page 93, line 5
on them. Preliminary testing of callback functionality by means of a on them. Preliminary testing of callback functionality by means of a
CB_NULL procedure determines whether callbacks can be supported. The CB_NULL procedure determines whether callbacks can be supported. The
CB_NULL procedure checks the continuity of the callback path. A CB_NULL procedure checks the continuity of the callback path. A
server makes a preliminary assessment of callback availability to a server makes a preliminary assessment of callback availability to a
given client and avoids delegating responsibilities until it has given client and avoids delegating responsibilities until it has
determined that callbacks are supported. Because the granting of a determined that callbacks are supported. Because the granting of a
delegation is always conditional upon the absence of conflicting delegation is always conditional upon the absence of conflicting
access, clients must not assume that a delegation will be granted and access, clients must not assume that a delegation will be granted and
they must always be prepared for OPENs to be processed without any they must always be prepared for OPENs to be processed without any
Draft Specification NFS version 4 Protocol September 2002 Draft Specification NFS version 4 Protocol October 2002
delegations being granted. delegations being granted.
Once granted, a delegation behaves in most ways like a lock. There Once granted, a delegation behaves in most ways like a lock. There
is an associated lease that is subject to renewal together with all is an associated lease that is subject to renewal together with all
of the other leases held by that client. of the other leases held by that client.
Unlike locks, an operation by a second client to a delegated file Unlike locks, an operation by a second client to a delegated file
will cause the server to recall a delegation through a callback. will cause the server to recall a delegation through a callback.
skipping to change at page 93, line 5 skipping to change at page 94, line 5
There are three situations that delegation recovery must deal with: There are three situations that delegation recovery must deal with:
o Client reboot or restart o Client reboot or restart
o Server reboot or restart o Server reboot or restart
o Network partition (full or callback-only) o Network partition (full or callback-only)
In the event the client reboots or restarts, the failure to renew In the event the client reboots or restarts, the failure to renew
Draft Specification NFS version 4 Protocol September 2002 Draft Specification NFS version 4 Protocol October 2002
leases will result in the revocation of record locks and share leases will result in the revocation of record locks and share
reservations. Delegations, however, may be treated a bit reservations. Delegations, however, may be treated a bit
differently. differently.
There will be situations in which delegations will need to be There will be situations in which delegations will need to be
reestablished after a client reboots or restarts. The reason for reestablished after a client reboots or restarts. The reason for
this is the client may have file data stored locally and this data this is the client may have file data stored locally and this data
was associated with the previously held delegations. The client will was associated with the previously held delegations. The client will
need to reestablish the appropriate file state on the server. need to reestablish the appropriate file state on the server.
skipping to change at page 94, line 5 skipping to change at page 95, line 5
process of handling delegation reclaim reconciles three principles of process of handling delegation reclaim reconciles three principles of
the NFS version 4 protocol: the NFS version 4 protocol:
o Upon reclaim, a client reporting resources assigned to it by an o Upon reclaim, a client reporting resources assigned to it by an
earlier server instance must be granted those resources. earlier server instance must be granted those resources.
o The server has unquestionable authority to determine whether o The server has unquestionable authority to determine whether
delegations are to be granted and, once granted, whether they delegations are to be granted and, once granted, whether they
are to be continued. are to be continued.
Draft Specification NFS version 4 Protocol September 2002 Draft Specification NFS version 4 Protocol October 2002
o The use of callbacks is not to be depended upon until the client o The use of callbacks is not to be depended upon until the client
has proven its ability to receive them. has proven its ability to receive them.
When a network partition occurs, delegations are subject to freeing When a network partition occurs, delegations are subject to freeing
by the server when the lease renewal period expires. This is similar by the server when the lease renewal period expires. This is similar
to the behavior for locks and share reservations. For delegations, to the behavior for locks and share reservations. For delegations,
however, the server may extend the period in which conflicting however, the server may extend the period in which conflicting
requests are held off. Eventually the occurrence of a conflicting requests are held off. Eventually the occurrence of a conflicting
request from another client will cause revocation of the delegation. request from another client will cause revocation of the delegation.
skipping to change at page 95, line 5 skipping to change at page 96, line 5
invalidate the assumptions that those using these facilities depend invalidate the assumptions that those using these facilities depend
upon. upon.
9.3.1. Data Caching and OPENs 9.3.1. Data Caching and OPENs
In order to avoid invalidating the sharing assumptions that In order to avoid invalidating the sharing assumptions that
applications rely on, NFS version 4 clients should not provide cached applications rely on, NFS version 4 clients should not provide cached
data to applications or modify it on behalf of an application when it data to applications or modify it on behalf of an application when it
would not be valid to obtain or modify that same data via a READ or would not be valid to obtain or modify that same data via a READ or
Draft Specification NFS version 4 Protocol September 2002 Draft Specification NFS version 4 Protocol October 2002
WRITE operation. WRITE operation.
Furthermore, in the absence of open delegation (see the section "Open Furthermore, in the absence of open delegation (see the section "Open
Delegation") two additional rules apply. Note that these rules are Delegation") two additional rules apply. Note that these rules are
obeyed in practice by many NFS version 2 and version 3 clients. obeyed in practice by many NFS version 2 and version 3 clients.
o First, cached data present on a client must be revalidated after o First, cached data present on a client must be revalidated after
doing an OPEN. Revalidating means that the client fetches the doing an OPEN. Revalidating means that the client fetches the
change attribute from the server, compares it with the cached change attribute from the server, compares it with the cached
skipping to change at page 96, line 5 skipping to change at page 97, line 5
written to the file. Hence, this requirement. written to the file. Hence, this requirement.
9.3.2. Data Caching and File Locking 9.3.2. Data Caching and File Locking
For those applications that choose to use file locking instead of For those applications that choose to use file locking instead of
share reservations to exclude inconsistent file access, there is an share reservations to exclude inconsistent file access, there is an
analogous set of constraints that apply to client side data caching. analogous set of constraints that apply to client side data caching.
These rules are effective only if the file locking is used in a way These rules are effective only if the file locking is used in a way
that matches in an equivalent way the actual READ and WRITE that matches in an equivalent way the actual READ and WRITE
Draft Specification NFS version 4 Protocol September 2002 Draft Specification NFS version 4 Protocol October 2002
operations executed. This is as opposed to file locking that is operations executed. This is as opposed to file locking that is
based on pure convention. For example, it is possible to manipulate based on pure convention. For example, it is possible to manipulate
a two-megabyte file by dividing the file into two one-megabyte a two-megabyte file by dividing the file into two one-megabyte
regions and protecting access to the two regions by file locks on regions and protecting access to the two regions by file locks on
bytes zero and one. A lock for write on byte zero of the file would bytes zero and one. A lock for write on byte zero of the file would
represent the right to do READ and WRITE operations on the first represent the right to do READ and WRITE operations on the first
region. A lock for write on byte one of the file would represent the region. A lock for write on byte one of the file would represent the
right to do READ and WRITE operations on the second region. As long right to do READ and WRITE operations on the second region. As long
as all applications manipulating the file obey this convention, they as all applications manipulating the file obey this convention, they
skipping to change at page 97, line 5 skipping to change at page 98, line 5
The data that is written to the server as a prerequisite to the The data that is written to the server as a prerequisite to the
unlocking of a region must be written, at the server, to stable unlocking of a region must be written, at the server, to stable
storage. The client may accomplish this either with synchronous storage. The client may accomplish this either with synchronous
writes or by following asynchronous writes with a COMMIT operation. writes or by following asynchronous writes with a COMMIT operation.
This is required because retransmission of the modified data after a This is required because retransmission of the modified data after a
server reboot might conflict with a lock held by another client. server reboot might conflict with a lock held by another client.
A client implementation may choose to accommodate applications which A client implementation may choose to accommodate applications which
use record locking in non-standard ways (e.g. using a record lock as use record locking in non-standard ways (e.g. using a record lock as
Draft Specification NFS version 4 Protocol September 2002 Draft Specification NFS version 4 Protocol October 2002
a global semaphore) by flushing to the server more data upon an LOCKU a global semaphore) by flushing to the server more data upon an LOCKU
than is covered by the locked range. This may include modified data than is covered by the locked range. This may include modified data
within files other than the one for which the unlocks are being done. within files other than the one for which the unlocks are being done.
In such cases, the client must not interfere with applications whose In such cases, the client must not interfere with applications whose
READs and WRITEs are being done only within the bounds of record READs and WRITEs are being done only within the bounds of record
locks which the application holds. For example, an application locks locks which the application holds. For example, an application locks
a single byte of a file and proceeds to write that single byte. A a single byte of a file and proceeds to write that single byte. A
client that chose to handle a LOCKU by flushing all modified data to client that chose to handle a LOCKU by flushing all modified data to
the server could validly write that single byte in response to an the server could validly write that single byte in response to an
skipping to change at page 98, line 5 skipping to change at page 99, line 5
the purpose of caching that distinct filehandles represent distinct the purpose of caching that distinct filehandles represent distinct
filesystem objects. The client then has the choice to organize and filesystem objects. The client then has the choice to organize and
maintain the data cache on this basis. maintain the data cache on this basis.
In the NFS version 4 protocol, there is now the possibility to have In the NFS version 4 protocol, there is now the possibility to have
significant deviations from a "one filehandle per object" model significant deviations from a "one filehandle per object" model
because a filehandle may be constructed on the basis of the object's because a filehandle may be constructed on the basis of the object's
pathname. Therefore, clients need a reliable method to determine if pathname. Therefore, clients need a reliable method to determine if
two filehandles designate the same filesystem object. If clients two filehandles designate the same filesystem object. If clients
Draft Specification NFS version 4 Protocol September 2002 Draft Specification NFS version 4 Protocol October 2002
were simply to assume that all distinct filehandles denote distinct were simply to assume that all distinct filehandles denote distinct
objects and proceed to do data caching on this basis, caching objects and proceed to do data caching on this basis, caching
inconsistencies would arise between the distinct client side objects inconsistencies would arise between the distinct client side objects
which mapped to the same server side object. which mapped to the same server side object.
By providing a method to differentiate filehandles, the NFS version 4 By providing a method to differentiate filehandles, the NFS version 4
protocol alleviates a potential functional regression in comparison protocol alleviates a potential functional regression in comparison
with the NFS version 3 protocol. Without this method, caching with the NFS version 3 protocol. Without this method, caching
inconsistencies within the same client could occur and this has not inconsistencies within the same client could occur and this has not
skipping to change at page 99, line 5 skipping to change at page 100, line 5
delegation is recallable, since the circumstances that allowed for delegation is recallable, since the circumstances that allowed for
the delegation are subject to change. In particular, the server may the delegation are subject to change. In particular, the server may
receive a conflicting OPEN from another client, the server must receive a conflicting OPEN from another client, the server must
recall the delegation before deciding whether the OPEN from the other recall the delegation before deciding whether the OPEN from the other
client may be granted. Making a delegation is up to the server and client may be granted. Making a delegation is up to the server and
clients should not assume that any particular OPEN either will or clients should not assume that any particular OPEN either will or
will not result in an open delegation. The following is a typical will not result in an open delegation. The following is a typical
set of conditions that servers might use in deciding whether OPEN set of conditions that servers might use in deciding whether OPEN
should be delegated: should be delegated:
Draft Specification NFS version 4 Protocol September 2002 Draft Specification NFS version 4 Protocol October 2002
o The client must be able to respond to the server's callback o The client must be able to respond to the server's callback
requests. The server will use the CB_NULL procedure for a test requests. The server will use the CB_NULL procedure for a test
of callback ability. of callback ability.
o The client must have responded properly to previous recalls. o The client must have responded properly to previous recalls.
o There must be no current open conflicting with the requested o There must be no current open conflicting with the requested
delegation. delegation.
skipping to change at page 100, line 5 skipping to change at page 101, line 5
When an open delegation is made, the response to the OPEN contains an When an open delegation is made, the response to the OPEN contains an
open delegation structure which specifies the following: open delegation structure which specifies the following:
o the type of delegation (read or write) o the type of delegation (read or write)
o space limitation information to control flushing of data on o space limitation information to control flushing of data on
close (write open delegation only, see the section "Open close (write open delegation only, see the section "Open
Delegation and Data Caching") Delegation and Data Caching")
Draft Specification NFS version 4 Protocol September 2002 Draft Specification NFS version 4 Protocol October 2002
o an nfsace4 specifying read and write permissions o an nfsace4 specifying read and write permissions
o a stateid to represent the delegation for READ and WRITE o a stateid to represent the delegation for READ and WRITE
The delegation stateid is separate and distinct from the stateid for The delegation stateid is separate and distinct from the stateid for
the OPEN proper. The standard stateid, unlike the delegation the OPEN proper. The standard stateid, unlike the delegation
stateid, is associated with a particular lock_owner and will continue stateid, is associated with a particular lock_owner and will continue
to be valid after the delegation is recalled and the file remains to be valid after the delegation is recalled and the file remains
open. open.
skipping to change at page 101, line 5 skipping to change at page 102, line 5
The use of delegation together with various other forms of caching The use of delegation together with various other forms of caching
creates the possibility that no server authentication will ever be creates the possibility that no server authentication will ever be
performed for a given user since all of the user's requests might be performed for a given user since all of the user's requests might be
satisfied locally. Where the client is depending on the server for satisfied locally. Where the client is depending on the server for
authentication, the client should be sure authentication occurs for authentication, the client should be sure authentication occurs for
each user by use of the ACCESS operation. This should be the case each user by use of the ACCESS operation. This should be the case
even if an ACCESS operation would not be required otherwise. As even if an ACCESS operation would not be required otherwise. As
mentioned before, the server may enforce frequent authentication by mentioned before, the server may enforce frequent authentication by
returning an nfsace4 denying all access with every open delegation. returning an nfsace4 denying all access with every open delegation.
Draft Specification NFS version 4 Protocol September 2002 Draft Specification NFS version 4 Protocol October 2002
9.4.1. Open Delegation and Data Caching 9.4.1. Open Delegation and Data Caching
OPEN delegation allows much of the message overhead associated with OPEN delegation allows much of the message overhead associated with
the opening and closing files to be eliminated. An open when an open the opening and closing files to be eliminated. An open when an open
delegation is in effect does not require that a validation message be delegation is in effect does not require that a validation message be
sent to the server. The continued endurance of the "read open sent to the server. The continued endurance of the "read open
delegation" provides a guarantee that no OPEN for write and thus no delegation" provides a guarantee that no OPEN for write and thus no
write has occurred. Similarly, when closing a file opened for write write has occurred. Similarly, when closing a file opened for write
and if write open delegation is in effect, the data written does not and if write open delegation is in effect, the data written does not
skipping to change at page 102, line 5 skipping to change at page 103, line 5
The server can recall delegations as a result of managing the The server can recall delegations as a result of managing the
available filesystem space. The client should abide by the server's available filesystem space. The client should abide by the server's
state space limits for delegations. If the client exceeds the stated state space limits for delegations. If the client exceeds the stated
limits for the delegation, the server's behavior is undefined. limits for the delegation, the server's behavior is undefined.
Based on server conditions, quotas or available filesystem space, the Based on server conditions, quotas or available filesystem space, the
server may grant write open delegations with very restrictive space server may grant write open delegations with very restrictive space
limitations. The limitations may be defined in a way that will limitations. The limitations may be defined in a way that will
always force modified data to be flushed to the server on close. always force modified data to be flushed to the server on close.
Draft Specification NFS version 4 Protocol September 2002 Draft Specification NFS version 4 Protocol October 2002
With respect to authentication, flushing modified data to the server With respect to authentication, flushing modified data to the server
after a CLOSE has occurred may be problematic. For example, the user after a CLOSE has occurred may be problematic. For example, the user
of the application may have logged off the client and unexpired of the application may have logged off the client and unexpired
authentication credentials may not be present. In this case, the authentication credentials may not be present. In this case, the
client may need to take special care to ensure that local unexpired client may need to take special care to ensure that local unexpired
credentials will in fact be available. This may be accomplished by credentials will in fact be available. This may be accomplished by
tracking the expiration time of credentials and flushing data well in tracking the expiration time of credentials and flushing data well in
advance of their expiration or by making private copies of advance of their expiration or by making private copies of
credentials to assure their availability when needed. credentials to assure their availability when needed.
skipping to change at page 103, line 5 skipping to change at page 104, line 5
only needs to know about this modified state. If the server only needs to know about this modified state. If the server
determines that the file is currently modified, it will respond to determines that the file is currently modified, it will respond to
the second client's GETATTR as if the file had been modified locally the second client's GETATTR as if the file had been modified locally
at the server. at the server.
Since the form of the change attribute is determined by the server Since the form of the change attribute is determined by the server
and is opaque to the client, the client and server need to agree on a and is opaque to the client, the client and server need to agree on a
method of communicating the modified state of the file. For the size method of communicating the modified state of the file. For the size
attribute, the client will report its current view of the file size. attribute, the client will report its current view of the file size.
Draft Specification NFS version 4 Protocol September 2002 Draft Specification NFS version 4 Protocol October 2002
For the change attribute, the handling is more involved. For the change attribute, the handling is more involved.
For the client, the following steps will be taken when receiving a For the client, the following steps will be taken when receiving a
write delegation: write delegation:
o The value of the change attribute will be obtained from the o The value of the change attribute will be obtained from the
server and cached. Let this value be represented by c. server and cached. Let this value be represented by c.
o The client will create a value greater than c that will be used o The client will create a value greater than c that will be used
skipping to change at page 104, line 5 skipping to change at page 105, line 5
the delegation. Let this value be represented by sc. the delegation. Let this value be represented by sc.
o When a second client sends a GETATTR operation on the same file o When a second client sends a GETATTR operation on the same file
to the server, the server obtains the change attribute from the to the server, the server obtains the change attribute from the
first client. Let this value be cc. first client. Let this value be cc.
o If the value cc is equal to sc, the file is not modified and the o If the value cc is equal to sc, the file is not modified and the
server returns the current values for change, time_metadata, and server returns the current values for change, time_metadata, and
time_modify (for example) to the second client. time_modify (for example) to the second client.
Draft Specification NFS version 4 Protocol September 2002 Draft Specification NFS version 4 Protocol October 2002
o If the value cc is NOT equal to sc, the file is currently o If the value cc is NOT equal to sc, the file is currently
modified at the first client and most likely will be modified at modified at the first client and most likely will be modified at
the server at a future time. The server then uses its current the server at a future time. The server then uses its current
time to construct attribute values for time_metadata and time to construct attribute values for time_metadata and
time_modify. A new value of sc, which we will call nsc, is time_modify. A new value of sc, which we will call nsc, is
computed by the server, such that nsc >= sc + 1. The server computed by the server, such that nsc >= sc + 1. The server
then returns the constructed time_metadata, time_modify, and nsc then returns the constructed time_metadata, time_modify, and nsc
values to the requester. The server replaces sc in the values to the requester. The server replaces sc in the
delegation record with nsc. To prevent the possibility of delegation record with nsc. To prevent the possibility of
skipping to change at page 105, line 5 skipping to change at page 106, line 5
update sc, time_modify, time_metadata into file's metadata; update sc, time_modify, time_metadata into file's metadata;
} }
return to client (that sent GETATTR) the attributes return to client (that sent GETATTR) the attributes
it requested, but make sure size comes from what it requested, but make sure size comes from what
CB_GETATTR returned. Do not update the file's metadata CB_GETATTR returned. Do not update the file's metadata
with the client's modified size. with the client's modified size.
o In the case that the file attribute size is different than the o In the case that the file attribute size is different than the
Draft Specification NFS version 4 Protocol September 2002 Draft Specification NFS version 4 Protocol October 2002
server's current value, the server treats this as a modification server's current value, the server treats this as a modification
regardless of the value of the change attribute retrieved via regardless of the value of the change attribute retrieved via
CB_GETATTR and responds to the second client as in the last CB_GETATTR and responds to the second client as in the last
step. step.
This methodology resolves issues of clock differences between client This methodology resolves issues of clock differences between client
and server and other scenarios where the use of CB_GETATTR break and server and other scenarios where the use of CB_GETATTR break
down. down.
skipping to change at page 106, line 5 skipping to change at page 107, line 5
delegation voluntarily. The following items of state need to be delegation voluntarily. The following items of state need to be
dealt with: dealt with:
o If the file associated with the delegation is no longer open and o If the file associated with the delegation is no longer open and
no previous CLOSE operation has been sent to the server, a CLOSE no previous CLOSE operation has been sent to the server, a CLOSE
operation must be sent to the server. operation must be sent to the server.
o If a file has other open references at the client, then OPEN o If a file has other open references at the client, then OPEN
operations must be sent to the server. The appropriate stateids operations must be sent to the server. The appropriate stateids
Draft Specification NFS version 4 Protocol September 2002 Draft Specification NFS version 4 Protocol October 2002
will be provided by the server for subsequent use by the client will be provided by the server for subsequent use by the client
since the delegation stateid will not longer be valid. These since the delegation stateid will not longer be valid. These
OPEN requests are done with the claim type of OPEN requests are done with the claim type of
CLAIM_DELEGATE_CUR. This will allow the presentation of the CLAIM_DELEGATE_CUR. This will allow the presentation of the
delegation stateid so that the client can establish the delegation stateid so that the client can establish the
appropriate rights to perform the OPEN. (see the section appropriate rights to perform the OPEN. (see the section
"Operation 18: OPEN" for details.) "Operation 18: OPEN" for details.)
o If there are granted file locks, the corresponding LOCK o If there are granted file locks, the corresponding LOCK
skipping to change at page 107, line 5 skipping to change at page 108, line 5
the actual open state of the file may continue to change makes it not the actual open state of the file may continue to change makes it not
worthwhile to send information about opens and closes to the server, worthwhile to send information about opens and closes to the server,
except as part of delegation return. Only in the case of closing the except as part of delegation return. Only in the case of closing the
open that resulted in obtaining the delegation would clients be open that resulted in obtaining the delegation would clients be
likely to do this early, since, in that case, the close once done likely to do this early, since, in that case, the close once done
will not be undone. Regardless of the client's choices on scheduling will not be undone. Regardless of the client's choices on scheduling
these actions, all must be performed before the delegation is these actions, all must be performed before the delegation is
returned, including (when applicable) the close that corresponds to returned, including (when applicable) the close that corresponds to
the open that resulted in the delegation. These actions can be the open that resulted in the delegation. These actions can be
Draft Specification NFS version 4 Protocol September 2002 Draft Specification NFS version 4 Protocol October 2002
performed either in previous requests or in previous operations in performed either in previous requests or in previous operations in
the same COMPOUND request. the same COMPOUND request.
9.4.5. Clients that Fail to Honor Delegation Recalls 9.4.5. Clients that Fail to Honor Delegation Recalls
A client may fail to respond to a recall for various reasons, such as A client may fail to respond to a recall for various reasons, such as
a failure of the callback path from server to the client. The client a failure of the callback path from server to the client. The client
may be unaware of a failure in the callback path. This lack of may be unaware of a failure in the callback path. This lack of
awareness could result in the client finding out long after the awareness could result in the client finding out long after the
skipping to change at page 108, line 5 skipping to change at page 109, line 5
except for RENEW, that take a stateid, to renew delegation leases except for RENEW, that take a stateid, to renew delegation leases
across callback path failures. The client that wants to keep across callback path failures. The client that wants to keep
delegations in force across callback path failures must use RENEW delegations in force across callback path failures must use RENEW
to do so. to do so.
9.4.6. Delegation Revocation 9.4.6. Delegation Revocation
At the point a delegation is revoked, if there are associated opens At the point a delegation is revoked, if there are associated opens
on the client, the applications holding these opens need to be on the client, the applications holding these opens need to be
Draft Specification NFS version 4 Protocol September 2002 Draft Specification NFS version 4 Protocol October 2002
notified. This notification usually occurs by returning errors for notified. This notification usually occurs by returning errors for
READ/WRITE operations or when a close is attempted for the open file. READ/WRITE operations or when a close is attempted for the open file.
If no opens exist for the file at the point the delegation is If no opens exist for the file at the point the delegation is
revoked, then notification of the revocation is unnecessary. revoked, then notification of the revocation is unnecessary.
However, if there is modified data present at the client for the However, if there is modified data present at the client for the
file, the user of the application should be notified. Unfortunately, file, the user of the application should be notified. Unfortunately,
it may not be possible to notify the user since active applications it may not be possible to notify the user since active applications
may not be present at the client. See the section "Revocation may not be present at the client. See the section "Revocation
skipping to change at page 109, line 5 skipping to change at page 110, line 5
9.5.1. Revocation Recovery for Write Open Delegation 9.5.1. Revocation Recovery for Write Open Delegation
Revocation recovery for a write open delegation poses the special Revocation recovery for a write open delegation poses the special
issue of modified data in the client cache while the file is not issue of modified data in the client cache while the file is not
open. In this situation, any client which does not flush modified open. In this situation, any client which does not flush modified
data to the server on each close must ensure that the user receives data to the server on each close must ensure that the user receives
appropriate notification of the failure as a result of the appropriate notification of the failure as a result of the
revocation. Since such situations may require human action to revocation. Since such situations may require human action to
correct problems, notification schemes in which the appropriate user correct problems, notification schemes in which the appropriate user
Draft Specification NFS version 4 Protocol September 2002 Draft Specification NFS version 4 Protocol October 2002
or administrator is notified may be necessary. Logging and console or administrator is notified may be necessary. Logging and console
messages are typical examples. messages are typical examples.
If there is modified data on the client, it must not be flushed If there is modified data on the client, it must not be flushed
normally to the server. A client may attempt to provide a copy of normally to the server. A client may attempt to provide a copy of
the file data as modified during the delegation under a different the file data as modified during the delegation under a different
name in the filesystem name space to ease recovery. Note that when name in the filesystem name space to ease recovery. Note that when
the client can determine that the file has not been modified by any the client can determine that the file has not been modified by any
other client, or when the client has a complete cached copy of file other client, or when the client has a complete cached copy of file
skipping to change at page 110, line 5 skipping to change at page 111, line 5
immediately reflected on the server. Normally such changes are not immediately reflected on the server. Normally such changes are not
propagated directly to the server but when the modified data is propagated directly to the server but when the modified data is
flushed to the server, analogous attribute changes are made on the flushed to the server, analogous attribute changes are made on the
server. When open delegation is in effect, the modified attributes server. When open delegation is in effect, the modified attributes
may be returned to the server in the response to a CB_RECALL call. may be returned to the server in the response to a CB_RECALL call.
The result of local caching of attributes is that the attribute The result of local caching of attributes is that the attribute
caches maintained on individual clients will not be coherent. Changes caches maintained on individual clients will not be coherent. Changes
made in one order on the server may be seen in a different order on made in one order on the server may be seen in a different order on
Draft Specification NFS version 4 Protocol September 2002 Draft Specification NFS version 4 Protocol October 2002
one client and in a third order on a different client. one client and in a third order on a different client.
The typical filesystem application programming interfaces do not The typical filesystem application programming interfaces do not
provide means to atomically modify or interrogate attributes for provide means to atomically modify or interrogate attributes for
multiple files at the same time. The following rules provide an multiple files at the same time. The following rules provide an
environment where the potential incoherences mentioned above can be environment where the potential incoherences mentioned above can be
reasonably managed. These rules are derived from the practice of reasonably managed. These rules are derived from the practice of
previous NFS protocols. previous NFS protocols.
skipping to change at page 111, line 5 skipping to change at page 112, line 5
attribute changes are immediately sent to the server. attribute changes are immediately sent to the server.
In some operating environments, the equivalent to time_access is In some operating environments, the equivalent to time_access is
expected to be implicitly updated by each read of the content of the expected to be implicitly updated by each read of the content of the
file object. If an NFS client is caching the content of a file file object. If an NFS client is caching the content of a file
object, whether it is a regular file, directory, or symbolic link, object, whether it is a regular file, directory, or symbolic link,
the client SHOULD NOT update the time_access attribute (via SETATTR the client SHOULD NOT update the time_access attribute (via SETATTR
or a small READ or READDIR request) on the server with each read that or a small READ or READDIR request) on the server with each read that
is satisfied from cache. The reason is that this can defeat the is satisfied from cache. The reason is that this can defeat the
Draft Specification NFS version 4 Protocol September 2002 Draft Specification NFS version 4 Protocol October 2002
performance benefits of caching content, especially since an explicit performance benefits of caching content, especially since an explicit
SETATTR of time_access may alter the change attribute on the server. SETATTR of time_access may alter the change attribute on the server.
If the change attribute changes, clients that are caching the content If the change attribute changes, clients that are caching the content
will think the content has changed, and will re-read unmodified data will think the content has changed, and will re-read unmodified data
from the server. Nor is the client encouraged to maintain a modified from the server. Nor is the client encouraged to maintain a modified
version of time_access in its cache, since this would mean that the version of time_access in its cache, since this would mean that the
client will either eventually have to write the access time to the client will either eventually have to write the access time to the
server with bad performance effects, or it would never update the server with bad performance effects, or it would never update the
server's time_access, thereby resulting in a situation where an server's time_access, thereby resulting in a situation where an
skipping to change at page 112, line 5 skipping to change at page 113, line 5
the application to always get the most up to date data and the application to always get the most up to date data and
metadata for the file. However, due to the negative performance metadata for the file. However, due to the negative performance
implications of this, such behavior is OPTIONAL. implications of this, such behavior is OPTIONAL.
o If the memory mapped file is not being modified on the server, o If the memory mapped file is not being modified on the server,
and instead is just being read by an application via the memory and instead is just being read by an application via the memory
mapped interface, the client will not see an updated time_access mapped interface, the client will not see an updated time_access
attribute. However, in many operating environments, neither attribute. However, in many operating environments, neither
will any process running on the server. Thus NFS clients are at will any process running on the server. Thus NFS clients are at
Draft Specification NFS version 4 Protocol September 2002 Draft Specification NFS version 4 Protocol October 2002
no disadvantage with respect to local processes. no disadvantage with respect to local processes.
o If there is another client that is memory mapping the file, and o If there is another client that is memory mapping the file, and
if that client is holding a write delegation, the same set of if that client is holding a write delegation, the same set of
issues as discussed in the previous two bullet items apply. So, issues as discussed in the previous two bullet items apply. So,
when a server does a CB_GETATTR to a file that the client has when a server does a CB_GETATTR to a file that the client has
modified in its cache, the response from CB_GETATTR will not modified in its cache, the response from CB_GETATTR will not
necessarily be accurate. As discussed earlier, the client's necessarily be accurate. As discussed earlier, the client's
obligation is to report that the file has been modified since obligation is to report that the file has been modified since
skipping to change at page 113, line 5 skipping to change at page 114, line 5
write to the server that portion of the page that is locked. write to the server that portion of the page that is locked.
For example, if client A simply writes out the page, and then For example, if client A simply writes out the page, and then
client B writes out the page, client A's data is lost. client B writes out the page, client A's data is lost.
Moreover, if mandatory locking is enabled on the file, then we Moreover, if mandatory locking is enabled on the file, then we
have a different problem. When clients A and B issue the STORE have a different problem. When clients A and B issue the STORE
instructions, the resulting page faults require a record lock on instructions, the resulting page faults require a record lock on
the entire page. Each client then tries to extend their locked the entire page. Each client then tries to extend their locked
range to the entire page, which results in a deadlock. range to the entire page, which results in a deadlock.
Draft Specification NFS version 4 Protocol September 2002 Draft Specification NFS version 4 Protocol October 2002
Communicating the NFS4ERR_DEADLOCK error to a STORE instruction Communicating the NFS4ERR_DEADLOCK error to a STORE instruction
is difficult at best. is difficult at best.
If a client is locking the entire memory mapped file, there is If a client is locking the entire memory mapped file, there is
no problem with advisory or mandatory record locking, at least no problem with advisory or mandatory record locking, at least
until the client unlocks a region in the middle of the file. until the client unlocks a region in the middle of the file.
Given the above issues the following are permitted: Given the above issues the following are permitted:
skipping to change at page 114, line 5 skipping to change at page 115, line 5
other clients. It does this by using the change attribute as other clients. It does this by using the change attribute as
reported before and after the directory operation in the associated reported before and after the directory operation in the associated
change_info4 value returned for the operation. The server is able to change_info4 value returned for the operation. The server is able to
communicate to the client whether the change_info4 data is provided communicate to the client whether the change_info4 data is provided
atomically with respect to the directory operation. If the change atomically with respect to the directory operation. If the change
values are provided atomically, the client is then able to compare values are provided atomically, the client is then able to compare
the pre-operation change value with the change value in the client's the pre-operation change value with the change value in the client's
name cache. If the comparison indicates that the directory was name cache. If the comparison indicates that the directory was
updated by another client, the name cache associated with the updated by another client, the name cache associated with the
Draft Specification NFS version 4 Protocol September 2002 Draft Specification NFS version 4 Protocol October 2002
modified directory is purged from the client. If the comparison modified directory is purged from the client. If the comparison
indicates no modification, the name cache can be updated on the indicates no modification, the name cache can be updated on the
client to reflect the directory operation and the associated timeout client to reflect the directory operation and the associated timeout
extended. The post-operation change value needs to be saved as the extended. The post-operation change value needs to be saved as the
basis for future change_info4 comparisons. basis for future change_info4 comparisons.
As demonstrated by the scenario above, name caching requires that the As demonstrated by the scenario above, name caching requires that the
client revalidate name cache data by inspecting the change attribute client revalidate name cache data by inspecting the change attribute
of a directory at the point when the name cache item was cached. of a directory at the point when the name cache item was cached.
skipping to change at page 115, line 5 skipping to change at page 116, line 5
is adequate. The lifetime of the cache entry can be extended at is adequate. The lifetime of the cache entry can be extended at
these checkpoints. When a client is modifying the directory, the these checkpoints. When a client is modifying the directory, the
client needs to use the change_info4 data to determine whether there client needs to use the change_info4 data to determine whether there
are other clients modifying the directory. If it is determined that are other clients modifying the directory. If it is determined that
no other client modifications are occurring, the client may update no other client modifications are occurring, the client may update
its directory cache to reflect its own changes. its directory cache to reflect its own changes.
As demonstrated previously, directory caching requires that the As demonstrated previously, directory caching requires that the
client revalidate directory cache data by inspecting the change client revalidate directory cache data by inspecting the change
Draft Specification NFS version 4 Protocol September 2002 Draft Specification NFS version 4 Protocol October 2002
attribute of a directory at the point when the directory was cached. attribute of a directory at the point when the directory was cached.
This requires that the server update the change attribute for This requires that the server update the change attribute for
directories when the contents of the corresponding directory is directories when the contents of the corresponding directory is
modified. For a client to use the change_info4 information modified. For a client to use the change_info4 information
appropriately and correctly, the server must report the pre and post appropriately and correctly, the server must report the pre and post
operation change attribute values atomically. When the server is operation change attribute values atomically. When the server is
unable to report the before and after values atomically with respect unable to report the before and after values atomically with respect
to the directory operation, the server must indicate that fact in the to the directory operation, the server must indicate that fact in the
change_info4 return value. When the information is not atomically change_info4 return value. When the information is not atomically
reported, the client should not assume that other clients have not reported, the client should not assume that other clients have not
changed the directory. changed the directory.
Draft Specification NFS version 4 Protocol September 2002 Draft Specification NFS version 4 Protocol October 2002
10. Minor Versioning 10. Minor Versioning
To address the requirement of an NFS protocol that can evolve as the To address the requirement of an NFS protocol that can evolve as the
need arises, the NFS version 4 protocol contains the rules and need arises, the NFS version 4 protocol contains the rules and
framework to allow for future minor changes or versioning. framework to allow for future minor changes or versioning.
The base assumption with respect to minor versioning is that any The base assumption with respect to minor versioning is that any
future accepted minor version must follow the IETF process and be future accepted minor version must follow the IETF process and be
documented in a standards track RFC. Therefore, each minor version documented in a standards track RFC. Therefore, each minor version
skipping to change at page 117, line 5 skipping to change at page 118, line 5
documented attribute. documented attribute.
Since attribute results are specified as an opaque array of Since attribute results are specified as an opaque array of
per-attribute XDR encoded results, the complexity of adding new per-attribute XDR encoded results, the complexity of adding new
attributes in the midst of the current definitions will be too attributes in the midst of the current definitions will be too
burdensome. burdensome.
3 Minor versions must not modify the structure of an existing 3 Minor versions must not modify the structure of an existing
operation's arguments or results. operation's arguments or results.
Draft Specification NFS version 4 Protocol September 2002 Draft Specification NFS version 4 Protocol October 2002
Again the complexity of handling multiple structure definitions Again the complexity of handling multiple structure definitions
for a single operation is too burdensome. New operations should for a single operation is too burdensome. New operations should
be added instead of modifying existing structures for a minor be added instead of modifying existing structures for a minor
version. version.
This rule does not preclude the following adaptations in a minor This rule does not preclude the following adaptations in a minor
version. version.
o adding bits to flag fields such as new attributes to o adding bits to flag fields such as new attributes to
skipping to change at page 118, line 5 skipping to change at page 119, line 5
the request as an XDR decode error. This approach allows for the request as an XDR decode error. This approach allows for
the obsolescence of an operation while maintaining its structure the obsolescence of an operation while maintaining its structure
so that a future minor version can reintroduce the operation. so that a future minor version can reintroduce the operation.
8.1 Minor versions may declare attributes mandatory to NOT 8.1 Minor versions may declare attributes mandatory to NOT
implement. implement.
8.2 Minor versions may declare flag bits or enumeration values as 8.2 Minor versions may declare flag bits or enumeration values as
mandatory to NOT implement. mandatory to NOT implement.
Draft Specification NFS version 4 Protocol September 2002 Draft Specification NFS version 4 Protocol October 2002
9 Minor versions may downgrade features from mandatory to 9 Minor versions may downgrade features from mandatory to
recommended, or recommended to optional. recommended, or recommended to optional.
10 Minor versions may upgrade features from optional to recommended 10 Minor versions may upgrade features from optional to recommended
or recommended to mandatory. or recommended to mandatory.
11 A client and server that support minor version X must support 11 A client and server that support minor version X must support
minor versions 0 (zero) through X-1 as well. minor versions 0 (zero) through X-1 as well.
skipping to change at page 119, line 5 skipping to change at page 120, line 5
This rule allows for the introduction of new functionality and This rule allows for the introduction of new functionality and
forces the use of implementation experience before designating a forces the use of implementation experience before designating a
feature as mandatory. feature as mandatory.
13 A client MUST NOT attempt to use a stateid, filehandle, or 13 A client MUST NOT attempt to use a stateid, filehandle, or
similar returned object from the COMPOUND procedure with minor similar returned object from the COMPOUND procedure with minor
version X for another COMPOUND procedure with minor version Y, version X for another COMPOUND procedure with minor version Y,
where X != Y. where X != Y.
Draft Specification NFS version 4 Protocol September 2002 Draft Specification NFS version 4 Protocol October 2002
11. Internationalization 11. Internationalization
The primary issue in which NFS needs to deal with The primary issue in which NFS needs to deal with
internationalization, or I18N, is with respect to file names and internationalization, or I18N, is with respect to file names and
other strings as used within the protocol. The choice of string other strings as used within the protocol. The choice of string
representation must allow reasonable name/string access to clients representation must allow reasonable name/string access to clients
which use various languages. The UTF-8 encoding of the UCS as which use various languages. The UTF-8 encoding of the UCS as
defined by [ISO10646] allows for this type of access and follows the defined by [ISO10646] allows for this type of access and follows the
policy described in "IETF Policy on Character Sets and Languages", policy described in "IETF Policy on Character Sets and Languages",
skipping to change at page 120, line 5 skipping to change at page 121, line 5
could be understood by all clients and servers, and maintaining them could be understood by all clients and servers, and maintaining them
in the face of changes would be considerable. A better solution is in the face of changes would be considerable. A better solution is
desirable. desirable.
If the NFS version 4 protocol used a universal 16 bit or 32 bit If the NFS version 4 protocol used a universal 16 bit or 32 bit
character set (or an encoding of a 16 bit or 32 bit character set character set (or an encoding of a 16 bit or 32 bit character set
into octets), then the server and client need not care if the locale into octets), then the server and client need not care if the locale
of the user accessing the file is different than the locale of the of the user accessing the file is different than the locale of the
user who created the file. The unique 16 bit or 32 bit encoding of user who created the file. The unique 16 bit or 32 bit encoding of
Draft Specification NFS version 4 Protocol September 2002 Draft Specification NFS version 4 Protocol October 2002
the character allows for determination of what language the character the character allows for determination of what language the character
is from and also how to display that character on the client. The is from and also how to display that character on the client. The
server need not know what locales are used. server need not know what locales are used.
11.2. Overview of Universal Character Set Standards 11.2. Overview of Universal Character Set Standards
The previous section makes a case for using a universal character The previous section makes a case for using a universal character
set. This section makes the case for using UTF-8 as the specific set. This section makes the case for using UTF-8 as the specific
universal character set for the NFS version 4 protocol. universal character set for the NFS version 4 protocol.
skipping to change at page 121, line 5 skipping to change at page 122, line 5
encoding of UCS characters as described below. encoding of UCS characters as described below.
UTF-1 Only historical interest; it has been removed from 10646-1 UTF-1 Only historical interest; it has been removed from 10646-1
UTF-7 Encodes the entire "repertoire" of UCS "characters using UTF-7 Encodes the entire "repertoire" of UCS "characters using
only octets with the higher order bit clear". [RFC2152] only octets with the higher order bit clear". [RFC2152]
describes UTF-7. UTF-7 accomplishes this by reserving one describes UTF-7. UTF-7 accomplishes this by reserving one
of the 7bit US-ASCII characters as a "shift" character to of the 7bit US-ASCII characters as a "shift" character to
indicate non-US-ASCII characters. indicate non-US-ASCII characters.
Draft Specification NFS version 4 Protocol September 2002 Draft Specification NFS version 4 Protocol October 2002
UTF-8 Unlike UTF-7, uses all 8 bits of the octets. US-ASCII UTF-8 Unlike UTF-7, uses all 8 bits of the octets. US-ASCII
characters are encoded as before unchanged. Any octet with characters are encoded as before unchanged. Any octet with
the high bit cleared can only mean a US-ASCII character. the high bit cleared can only mean a US-ASCII character.
The high bit set means that a UCS character is being The high bit set means that a UCS character is being
encoded. encoded.
UTF-16 Encodes UCS-4 characters into UCS-2 characters using a UTF-16 Encodes UCS-4 characters into UCS-2 characters using a
reserved range in UCS-2. reserved range in UCS-2.
skipping to change at page 122, line 5 skipping to change at page 123, line 5
0000 0080-0000 07FF 110xxxxx 10xxxxxx 0000 0080-0000 07FF 110xxxxx 10xxxxxx
0000 0800-0000 FFFF 1110xxxx 10xxxxxx 10xxxxxx 0000 0800-0000 FFFF 1110xxxx 10xxxxxx 10xxxxxx
0001 0000-001F FFFF 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx 0001 0000-001F FFFF 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
0020 0000-03FF FFFF 111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 0020 0000-03FF FFFF 111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
0400 0000-7FFF FFFF 1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 0400 0000-7FFF FFFF 1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
10xxxxxx 10xxxxxx
See [RFC2279] for precise encoding and decoding rules. Note because See [RFC2279] for precise encoding and decoding rules. Note because
Draft Specification NFS version 4 Protocol September 2002 Draft Specification NFS version 4 Protocol October 2002
of UTF-16, the algorithm from Unicode/UCS-2 to UTF-8 needs to account of UTF-16, the algorithm from Unicode/UCS-2 to UTF-8 needs to account
for the reserved range between D800 and DFFF. for the reserved range between D800 and DFFF.
Note that the 16 bit UCS or Unicode characters require no more than 3 Note that the 16 bit UCS or Unicode characters require no more than 3
octets to encode into UTF-8 octets to encode into UTF-8
Interestingly, UTF-8 has room to handle characters larger than 31 Interestingly, UTF-8 has room to handle characters larger than 31
bits, because the leading octet of form: bits, because the leading octet of form:
skipping to change at page 123, line 5 skipping to change at page 124, line 5
11.6. UTF-8 Related Errors 11.6. UTF-8 Related Errors
Where the client sends an invalid UTF-8 string, the server should Where the client sends an invalid UTF-8 string, the server should
return an NFS4ERR_INVAL error. This includes cases in which return an NFS4ERR_INVAL error. This includes cases in which
inappropriate prefixes are detected and where the count includes inappropriate prefixes are detected and where the count includes
trailing bytes that do not constitute a full UCS character. trailing bytes that do not constitute a full UCS character.
Where the client supplied string is valid UTF-8 but contains Where the client supplied string is valid UTF-8 but contains
Draft Specification NFS version 4 Protocol September 2002 Draft Specification NFS version 4 Protocol October 2002
characters that are not supported by the server as a value for that characters that are not supported by the server as a value for that
string (e.g. names containing characters that have more than two string (e.g. names containing characters that have more than two
octets on a filesystem that supports Unicode characters only), the octets on a filesystem that supports Unicode characters only), the
server should return an NFS4ERR_BADCHAR error. server should return an NFS4ERR_BADCHAR error.
Where a UTF-8 string is used as a file name, and the filesystem, Where a UTF-8 string is used as a file name, and the filesystem,
while supporting all of the characters within the name, does not while supporting all of the characters within the name, does not
allow that particular name to be used, the error should return the allow that particular name to be used, the error should return the
error NFS4ERR_BADNAME. This includes situations in which the server error NFS4ERR_BADNAME. This includes situations in which the server
filesystem imposes a normalization constraint on name strings, but filesystem imposes a normalization constraint on name strings, but
will also include such situations as filesystem prohibitions of "." will also include such situations as filesystem prohibitions of "."
and ".." as file names for certain operations, and other such and ".." as file names for certain operations, and other such
constraints. constraints.
Draft Specification NFS version 4 Protocol September 2002 Draft Specification NFS version 4 Protocol October 2002
12. Error Definitions 12. Error Definitions
NFS error numbers are assigned to failed operations within a compound NFS error numbers are assigned to failed operations within a compound
request. A compound request contains a number of NFS operations that request. A compound request contains a number of NFS operations that
have their results encoded in sequence in a compound reply. The have their results encoded in sequence in a compound reply. The
results of successful operations will consist of an NFS4_OK status results of successful operations will consist of an NFS4_OK status
followed by the encoded results of the operation. If an NFS followed by the encoded results of the operation. If an NFS
operation fails, an error status will be entered in the reply and the operation fails, an error status will be entered in the reply and the
compound request will be terminated. compound request will be terminated.
skipping to change at page 125, line 5 skipping to change at page 126, line 5
valid name for current operation. valid name for current operation.
NFS4ERR_BADOWNER An owner, owner_group, or ACL attribute value NFS4ERR_BADOWNER An owner, owner_group, or ACL attribute value
can not be translated to local representation. can not be translated to local representation.
NFS4ERR_BADTYPE An attempt was made to create an object of a NFS4ERR_BADTYPE An attempt was made to create an object of a
type not supported by the server. type not supported by the server.
NFS4ERR_BAD_RANGE The range for a LOCK, LOCKT, or LOCKU operation NFS4ERR_BAD_RANGE The range for a LOCK, LOCKT, or LOCKU operation
Draft Specification NFS version 4 Protocol September 2002 Draft Specification NFS version 4 Protocol October 2002
is not appropriate to the allowable range of is not appropriate to the allowable range of
offsets for the server. offsets for the server.
NFS4ERR_BAD_SEQID The sequence number in a locking request is NFS4ERR_BAD_SEQID The sequence number in a locking request is
neither the next expected number or the last neither the next expected number or the last
number processed. number processed.
NFS4ERR_BAD_STATEID A stateid generated by the current server NFS4ERR_BAD_STATEID A stateid generated by the current server
instance, but which does not designate any instance, but which does not designate any
skipping to change at page 126, line 5 skipping to change at page 127, line 5
exceeded. exceeded.
NFS4ERR_EXIST File exists. The file specified already exists. NFS4ERR_EXIST File exists. The file specified already exists.
NFS4ERR_EXPIRED A lease has expired that is being used in the NFS4ERR_EXPIRED A lease has expired that is being used in the
current operation. current operation.
NFS4ERR_FBIG File too large. The operation would have caused NFS4ERR_FBIG File too large. The operation would have caused
a file to grow beyond the server's limit. a file to grow beyond the server's limit.
Draft Specification NFS version 4 Protocol September 2002 Draft Specification NFS version 4 Protocol October 2002
NFS4ERR_FHEXPIRED The filehandle provided is volatile and has NFS4ERR_FHEXPIRED The filehandle provided is volatile and has
expired at the server. expired at the server.
NFS4ERR_FILE_OPEN The operation can not be successfully processed NFS4ERR_FILE_OPEN The operation can not be successfully processed
because a file involved in the operation is because a file involved in the operation is
currently open. currently open.
NFS4ERR_GRACE The server is in its recovery or grace period NFS4ERR_GRACE The server is in its recovery or grace period
which should match the lease period of the which should match the lease period of the
skipping to change at page 127, line 5 skipping to change at page 128, line 5
The server has received a request that The server has received a request that
specifies an unsupported minor version. The specifies an unsupported minor version. The
server must return a COMPOUND4res with a zero server must return a COMPOUND4res with a zero
length operations result array. length operations result array.
NFS4ERR_MLINK Too many hard links. NFS4ERR_MLINK Too many hard links.
NFS4ERR_MOVED The filesystem which contains the current NFS4ERR_MOVED The filesystem which contains the current
filehandle object has been relocated or filehandle object has been relocated or
Draft Specification NFS version 4 Protocol September 2002 Draft Specification NFS version 4 Protocol October 2002
migrated to another server. The client may migrated to another server. The client may
obtain the new filesystem location by obtaining obtain the new filesystem location by obtaining
the "fs_locations" attribute for the current the "fs_locations" attribute for the current
filehandle. For further discussion, refer to filehandle. For further discussion, refer to
the section "Filesystem Migration or the section "Filesystem Migration or
Relocation". Relocation".
NFS4ERR_NAMETOOLONG The filename in an operation was too long. NFS4ERR_NAMETOOLONG The filename in an operation was too long.
skipping to change at page 128, line 5 skipping to change at page 129, line 5
NFS4ERR_OLD_STATEID A stateid which designates the locking state NFS4ERR_OLD_STATEID A stateid which designates the locking state
for a lockowner-file at an earlier time was for a lockowner-file at an earlier time was
used. used.
NFS4ERR_OPENMODE The client attempted a READ, WRITE, LOCK or NFS4ERR_OPENMODE The client attempted a READ, WRITE, LOCK or
SETATTR operation not sanctioned by the stateid SETATTR operation not sanctioned by the stateid
passed (e.g. writing to a file opened only for passed (e.g. writing to a file opened only for
read). read).
Draft Specification NFS version 4 Protocol September 2002 Draft Specification NFS version 4 Protocol October 2002
NFS4ERR_OP_ILLEGAL An illegal operation value has been specified NFS4ERR_OP_ILLEGAL An illegal operation value has been specified
in the argop field of a COMPOUND or CB_COMPOUND in the argop field of a COMPOUND or CB_COMPOUND
procedure. procedure.
NFS4ERR_PERM Not owner. The operation was not allowed NFS4ERR_PERM Not owner. The operation was not allowed
because the caller is either not a privileged because the caller is either not a privileged
user (root) or not the owner of the target of user (root) or not the owner of the target of
the operation. the operation.
skipping to change at page 129, line 5 skipping to change at page 130, line 5
NFS4ERR_SHARE_DENIED An attempt to OPEN a file with a share NFS4ERR_SHARE_DENIED An attempt to OPEN a file with a share
reservation has failed because of a share reservation has failed because of a share
conflict. conflict.
NFS4ERR_STALE Invalid filehandle. The filehandle given in the NFS4ERR_STALE Invalid filehandle. The filehandle given in the
arguments was invalid. The file referred to by arguments was invalid. The file referred to by
that filehandle no longer exists or access to that filehandle no longer exists or access to
it has been revoked. it has been revoked.
Draft Specification NFS version 4 Protocol September 2002 Draft Specification NFS version 4 Protocol October 2002
NFS4ERR_STALE_CLIENTID A clientid not recognized by the server was NFS4ERR_STALE_CLIENTID A clientid not recognized by the server was
used in a locking or SETCLIENTID_CONFIRM used in a locking or SETCLIENTID_CONFIRM
request. request.
NFS4ERR_STALE_STATEID A stateid generated by an earlier server NFS4ERR_STALE_STATEID A stateid generated by an earlier server
instance was used. instance was used.
NFS4ERR_SYMLINK The current filehandle provided for a LOOKUP is NFS4ERR_SYMLINK The current filehandle provided for a LOOKUP is
not a directory but a symbolic link. Also used not a directory but a symbolic link. Also used
skipping to change at page 130, line 5 skipping to change at page 131, line 5
NFS4ERR_WRONGSEC The security mechanism being used by the client NFS4ERR_WRONGSEC The security mechanism being used by the client
for the operation does not match the server's for the operation does not match the server's
security policy. The client should change the security policy. The client should change the
security mechanism being used and retry the security mechanism being used and retry the
operation. operation.
NFS4ERR_XDEV Attempt to do an operation between different NFS4ERR_XDEV Attempt to do an operation between different
fsids. fsids.
Draft Specification NFS version 4 Protocol September 2002 Draft Specification NFS version 4 Protocol October 2002
13. NFS version 4 Requests 13. NFS version 4 Requests
For the NFS version 4 RPC program, there are two traditional RPC For the NFS version 4 RPC program, there are two traditional RPC
procedures: NULL and COMPOUND. All other functionality is defined as procedures: NULL and COMPOUND. All other functionality is defined as
a set of operations and these operations are defined in normal a set of operations and these operations are defined in normal
XDR/RPC syntax and semantics. However, these operations are XDR/RPC syntax and semantics. However, these operations are
encapsulated within the COMPOUND procedure. This requires that the encapsulated within the COMPOUND procedure. This requires that the
client combine one or more of the NFS version 4 operations into a client combine one or more of the NFS version 4 operations into a
single request. single request.
skipping to change at page 131, line 5 skipping to change at page 132, line 5
+-----+--------------+--------+-----------+-----------+-----------+-- +-----+--------------+--------+-----------+-----------+-----------+--
and the reply's structure is: and the reply's structure is:
+------------+-----+--------+-----------------------+-- +------------+-----+--------+-----------------------+--
|last status | tag | numres | status + op + results | |last status | tag | numres | status + op + results |
+------------+-----+--------+-----------------------+-- +------------+-----+--------+-----------------------+--
The numops and numres fields, used in the depiction above, represent The numops and numres fields, used in the depiction above, represent
Draft Specification NFS version 4 Protocol September 2002 Draft Specification NFS version 4 Protocol October 2002
the count for the counted array encoding use to signify the number of the count for the counted array encoding use to signify the number of
arguments or results encoded in the request and response. As per the arguments or results encoded in the request and response. As per the
XDR encoding, these counts must match exactly the number of operation XDR encoding, these counts must match exactly the number of operation
arguments or results encoded. arguments or results encoded.
13.2. Evaluation of a Compound Request 13.2. Evaluation of a Compound Request
The server will process the COMPOUND procedure by evaluating each of The server will process the COMPOUND procedure by evaluating each of
the operations within the COMPOUND procedure in order. Each the operations within the COMPOUND procedure in order. Each
skipping to change at page 132, line 5 skipping to change at page 133, line 5
13.3. Synchronous Modifying Operations 13.3. Synchronous Modifying Operations
NFS version 4 operations that modify the filesystem are synchronous. NFS version 4 operations that modify the filesystem are synchronous.
When an operation is successfully completed at the server, the client When an operation is successfully completed at the server, the client
can depend that any data associated with the request is now on stable can depend that any data associated with the request is now on stable
storage (the one exception is in the case of the file data in a WRITE storage (the one exception is in the case of the file data in a WRITE
operation with the UNSTABLE option specified). operation with the UNSTABLE option specified).
This implies that any previous operations within the same compound This implies that any previous operations within the same compound
Draft Specification NFS version 4 Protocol September 2002 Draft Specification NFS version 4 Protocol October 2002
request are also reflected in stable storage. This behavior enables request are also reflected in stable storage. This behavior enables
the client's ability to recover from a partially executed compound the client's ability to recover from a partially executed compound
request which may resulted from the failure of the server. For request which may resulted from the failure of the server. For
example, if a compound request contains operations A and B and the example, if a compound request contains operations A and B and the
server is unable to send a response to the client, depending on the server is unable to send a response to the client, depending on the
progress the server made in servicing the request the result of both progress the server made in servicing the request the result of both
operations may be reflected in stable storage or just operation A may operations may be reflected in stable storage or just operation A may
be reflected. The server must not have just the results of operation be reflected. The server must not have just the results of operation
B in stable storage. B in stable storage.
13.4. Operation Values 13.4. Operation Values
The operations encoded in the COMPOUND procedure are identified by The operations encoded in the COMPOUND procedure are identified by
operation values. To avoid overlap with the RPC procedure numbers, operation values. To avoid overlap with the RPC procedure numbers,
operations 0 (zero) and 1 are not defined. Operation 2 is not operations 0 (zero) and 1 are not defined. Operation 2 is not
defined but reserved for future use with minor versioning. defined but reserved for future use with minor versioning.
Draft Specification NFS version 4 Protocol September 2002 Draft Specification NFS version 4 Protocol October 2002
14. NFS version 4 Procedures 14. NFS version 4 Procedures
14.1. Procedure 0: NULL - No Operation 14.1. Procedure 0: NULL - No Operation
SYNOPSIS SYNOPSIS
<null> <null>
ARGUMENT ARGUMENT
skipping to change at page 134, line 5 skipping to change at page 135, line 5
Standard NULL procedure. Void argument, void response. This Standard NULL procedure. Void argument, void response. This
procedure has no functionality associated with it. Because of this procedure has no functionality associated with it. Because of this
it is sometimes used to measure the overhead of processing a it is sometimes used to measure the overhead of processing a
service request. Therefore, the server should ensure that no service request. Therefore, the server should ensure that no
unnecessary work is done in servicing this procedure. unnecessary work is done in servicing this procedure.
ERRORS ERRORS
None. None.
Draft Specification NFS version 4 Protocol September 2002 Draft Specification NFS version 4 Protocol October 2002
14.2. Procedure 1: COMPOUND - Compound Operations 14.2. Procedure 1: COMPOUND - Compound Operations
SYNOPSIS SYNOPSIS
compoundargs -> compoundres compoundargs -> compoundres
ARGUMENT ARGUMENT
union nfs_argop4 switch (nfs_opnum4 argop) { union nfs_argop4 switch (nfs_opnum4 argop) {
skipping to change at page 135, line 5 skipping to change at page 136, line 5
the COMPOUND procedure as a wrapper. the COMPOUND procedure as a wrapper.
The COMPOUND procedure is used to combine individual operations The COMPOUND procedure is used to combine individual operations
into a single RPC request. The server interprets each of the into a single RPC request. The server interprets each of the
operations in turn. If an operation is executed by the server and operations in turn. If an operation is executed by the server and
the status of that operation is NFS4_OK, then the next operation in the status of that operation is NFS4_OK, then the next operation in
the COMPOUND procedure is executed. The server continues this the COMPOUND procedure is executed. The server continues this
process until there are no more operations to be executed or one of process until there are no more operations to be executed or one of
the operations has a status value other than NFS4_OK. the operations has a status value other than NFS4_OK.
Draft Specification NFS version 4 Protocol September 2002 Draft Specification NFS version 4 Protocol October 2002
In the processing of the COMPOUND procedure, the server may find In the processing of the COMPOUND procedure, the server may find
that it does not have the available resources to execute any or all that it does not have the available resources to execute any or all
of the operations within the COMPOUND sequence. In this case, the of the operations within the COMPOUND sequence. In this case, the
error NFS4ERR_RESOURCE will be returned for the particular error NFS4ERR_RESOURCE will be returned for the particular
operation within the COMPOUND procedure where the resource operation within the COMPOUND procedure where the resource
exhaustion occurred. This assumes that all previous operations exhaustion occurred. This assumes that all previous operations
within the COMPOUND sequence have been evaluated successfully. The within the COMPOUND sequence have been evaluated successfully. The
results for all of the evaluated operations must be returned to the results for all of the evaluated operations must be returned to the
client. client.
skipping to change at page 136, line 5 skipping to change at page 137, line 5
the minorversion field is non-zero and the server does not support the minorversion field is non-zero and the server does not support
the minor version, the server returns an error of the minor version, the server returns an error of
NFS4ERR_MINOR_VERS_MISMATCH. Therefore, the NFS4ERR_MINOR_VERS_MISMATCH. Therefore, the
NFS4ERR_MINOR_VERS_MISMATCH error takes precedence over all other NFS4ERR_MINOR_VERS_MISMATCH error takes precedence over all other
errors. errors.
It is possible that the server receives a request that contains an It is possible that the server receives a request that contains an
operation that is less than the first legal operation (OP_ACCESS) operation that is less than the first legal operation (OP_ACCESS)
or greater than the last legal operation (OP_RELEASE_LOCKOWNER). or greater than the last legal operation (OP_RELEASE_LOCKOWNER).
Draft Specification NFS version 4 Protocol September 2002 Draft Specification NFS version 4 Protocol October 2002
In this case, the server's response will encode the opcode In this case, the server's response will encode the opcode
OP_ILLEGAL rather than the illegal opcode of the request. The OP_ILLEGAL rather than the illegal opcode of the request. The
status field in the ILLEGAL return results will set to status field in the ILLEGAL return results will set to
NFS4ERR_OP_ILLEGAL. The COMPOUND procedure's return results will NFS4ERR_OP_ILLEGAL. The COMPOUND procedure's return results will
also be NFS4ERR_OP_ILLEGAL. also be NFS4ERR_OP_ILLEGAL.
The definition of the "tag" in the request is left to the The definition of the "tag" in the request is left to the
implementor. It may be used to summarize the content of the implementor. It may be used to summarize the content of the
compound request for the benefit of packet sniffers and engineers compound request for the benefit of packet sniffers and engineers
skipping to change at page 137, line 5 skipping to change at page 138, line 5
recover from any failure. If the source of an NFS4ERR_RESOURCE recover from any failure. If the source of an NFS4ERR_RESOURCE
error was a complex or lengthy set of operations, it is likely that error was a complex or lengthy set of operations, it is likely that
if the number of operations were reduced the server would be able if the number of operations were reduced the server would be able
to evaluate them successfully. Therefore, the client is to evaluate them successfully. Therefore, the client is
responsible for dealing with this type of complexity in recovery. responsible for dealing with this type of complexity in recovery.
ERRORS ERRORS
All errors defined in the protocol All errors defined in the protocol
Draft Specification NFS version 4 Protocol September 2002 Draft Specification NFS version 4 Protocol October 2002
14.2.1. Operation 3: ACCESS - Check Access Rights 14.2.1. Operation 3: ACCESS - Check Access Rights
SYNOPSIS SYNOPSIS
(cfh), accessreq -> supported, accessrights (cfh), accessreq -> supported, accessrights
ARGUMENT ARGUMENT
const ACCESS4_READ = 0x00000001; const ACCESS4_READ = 0x00000001;
skipping to change at page 138, line 5 skipping to change at page 139, line 5
system object specified by the current filehandle. The client system object specified by the current filehandle. The client
encodes the set of access rights that are to be checked in the bit encodes the set of access rights that are to be checked in the bit
mask "access". The server checks the permissions encoded in the mask "access". The server checks the permissions encoded in the
bit mask. If a status of NFS4_OK is returned, two bit masks are bit mask. If a status of NFS4_OK is returned, two bit masks are
included in the response. The first, "supported", represents the included in the response. The first, "supported", represents the
access rights for which the server can verify reliably. The access rights for which the server can verify reliably. The
second, "access", represents the access rights available to the second, "access", represents the access rights available to the
user for the filehandle provided. On success, the current user for the filehandle provided. On success, the current
filehandle retains its value. filehandle retains its value.
Draft Specification NFS version 4 Protocol September 2002 Draft Specification NFS version 4 Protocol October 2002
Note that the supported field will contain only as many values as Note that the supported field will contain only as many values as
was originally sent in the arguments. For example, if the client was originally sent in the arguments. For example, if the client
sends an ACCESS operation with only the ACCESS4_READ value set and sends an ACCESS operation with only the ACCESS4_READ value set and
the server supports this value, the server will return only the server supports this value, the server will return only
ACCESS4_READ even if it could have reliably checked other values. ACCESS4_READ even if it could have reliably checked other values.
The results of this operation are necessarily advisory in nature. The results of this operation are necessarily advisory in nature.
A return status of NFS4_OK and the appropriate bit set in the bit A return status of NFS4_OK and the appropriate bit set in the bit
mask does not imply that such access will be allowed to the file mask does not imply that such access will be allowed to the file
skipping to change at page 139, line 5 skipping to change at page 140, line 5
In the NFS version 2 protocol, the only reliable way to determine In the NFS version 2 protocol, the only reliable way to determine
whether an operation was allowed was to try it and see if it whether an operation was allowed was to try it and see if it
succeeded or failed. Using the ACCESS operation in the NFS version succeeded or failed. Using the ACCESS operation in the NFS version
4 protocol, the client can ask the server to indicate whether or 4 protocol, the client can ask the server to indicate whether or
not one or more classes of operations are permitted. The ACCESS not one or more classes of operations are permitted. The ACCESS
operation is provided to allow clients to check before doing a operation is provided to allow clients to check before doing a
series of operations which will result in an access failure. The series of operations which will result in an access failure. The
OPEN operation provides a point where the server can verify access OPEN operation provides a point where the server can verify access
to the file object and method to return that information to the to the file object and method to return that information to the
Draft Specification NFS version 4 Protocol September 2002 Draft Specification NFS version 4 Protocol October 2002
client. The ACCESS operation is still useful for directory client. The ACCESS operation is still useful for directory
operations or for use in the case the UNIX API "access" is used on operations or for use in the case the UNIX API "access" is used on
the client. the client.
The information returned by the server in response to an ACCESS The information returned by the server in response to an ACCESS
call is not permanent. It was correct at the exact time that the call is not permanent. It was correct at the exact time that the
server performed the checks, but not necessarily afterwards. The server performed the checks, but not necessarily afterwards. The
server can revoke access permission at any time. server can revoke access permission at any time.
skipping to change at page 140, line 5 skipping to change at page 141, line 5
NFS4ERR_DELAY NFS4ERR_DELAY
NFS4ERR_FHEXPIRED NFS4ERR_FHEXPIRED
NFS4ERR_INVAL NFS4ERR_INVAL
NFS4ERR_IO NFS4ERR_IO
NFS4ERR_MOVED NFS4ERR_MOVED
NFS4ERR_NOFILEHANDLE NFS4ERR_NOFILEHANDLE
NFS4ERR_RESOURCE NFS4ERR_RESOURCE
NFS4ERR_SERVERFAULT NFS4ERR_SERVERFAULT
NFS4ERR_STALE NFS4ERR_STALE
Draft Specification NFS version 4 Protocol September 2002 Draft Specification NFS version 4 Protocol October 2002
14.2.2. Operation 4: CLOSE - Close File 14.2.2. Operation 4: CLOSE - Close File
SYNOPSIS SYNOPSIS
(cfh), seqid, open_stateid -> open_stateid (cfh), seqid, open_stateid -> open_stateid
ARGUMENT ARGUMENT
struct CLOSE4args { struct CLOSE4args {
skipping to change at page 141, line 5 skipping to change at page 142, line 5
locks would exist after the CLOSE. locks would exist after the CLOSE.
On success, the current filehandle retains its value. On success, the current filehandle retains its value.
IMPLEMENTATION IMPLEMENTATION
Even though CLOSE returns a stateid, this stateid is not useful to Even though CLOSE returns a stateid, this stateid is not useful to
the client and should be treated as deprecated. CLOSE "shuts down" the client and should be treated as deprecated. CLOSE "shuts down"
the state associated with all OPENs for the file by a single the state associated with all OPENs for the file by a single
Draft Specification NFS version 4 Protocol September 2002 Draft Specification NFS version 4 Protocol October 2002
open_owner. As noted above, CLOSE will either release all file open_owner. As noted above, CLOSE will either release all file
locking state or return an error. Therefore, the stateid returned locking state or return an error. Therefore, the stateid returned
by CLOSE is not useful for operations that follow. by CLOSE is not useful for operations that follow.
ERRORS ERRORS
NFS4ERR_ADMIN_REVOKED NFS4ERR_ADMIN_REVOKED
NFS4ERR_BADHANDLE NFS4ERR_BADHANDLE
NFS4ERR_BAD_SEQID NFS4ERR_BAD_SEQID
skipping to change at page 142, line 5 skipping to change at page 143, line 5
NFS4ERR_LEASE_MOVED NFS4ERR_LEASE_MOVED
NFS4ERR_LOCKS_HELD NFS4ERR_LOCKS_HELD
NFS4ERR_MOVED NFS4ERR_MOVED
NFS4ERR_NOFILEHANDLE NFS4ERR_NOFILEHANDLE
NFS4ERR_OLD_STATEID NFS4ERR_OLD_STATEID
NFS4ERR_RESOURCE NFS4ERR_RESOURCE
NFS4ERR_SERVERFAULT NFS4ERR_SERVERFAULT
NFS4ERR_STALE NFS4ERR_STALE
NFS4ERR_STALE_STATEID NFS4ERR_STALE_STATEID
Draft Specification NFS version 4 Protocol September 2002 Draft Specification NFS version 4 Protocol October 2002
14.2.3. Operation 5: COMMIT - Commit Cached Data 14.2.3. Operation 5: COMMIT - Commit Cached Data
SYNOPSIS SYNOPSIS
(cfh), offset, count -> verifier (cfh), offset, count -> verifier
ARGUMENT ARGUMENT
struct COMMIT4args { struct COMMIT4args {
skipping to change at page 143, line 5 skipping to change at page 144, line 5
The server returns a write verifier upon successful completion of The server returns a write verifier upon successful completion of
the COMMIT. The write verifier is used by the client to determine the COMMIT. The write verifier is used by the client to determine
if the server has restarted or rebooted between the initial if the server has restarted or rebooted between the initial
WRITE(s) and the COMMIT. The client does this by comparing the WRITE(s) and the COMMIT. The client does this by comparing the
write verifier returned from the initial writes and the verifier write verifier returned from the initial writes and the verifier
returned by the COMMIT operation. The server must vary the value returned by the COMMIT operation. The server must vary the value
of the write verifier at each server event or instantiation that of the write verifier at each server event or instantiation that
may lead to a loss of uncommitted data. Most commonly this occurs may lead to a loss of uncommitted data. Most commonly this occurs
when the server is rebooted; however, other events at the server when the server is rebooted; however, other events at the server
Draft Specification NFS version 4 Protocol September 2002 Draft Specification NFS version 4 Protocol October 2002
may result in uncommitted data loss as well. may result in uncommitted data loss as well.
On success, the current filehandle retains its value. On success, the current filehandle retains its value.
IMPLEMENTATION IMPLEMENTATION
The COMMIT operation is similar in operation and semantics to the The COMMIT operation is similar in operation and semantics to the
POSIX fsync(2) system call that synchronizes a file's state with POSIX fsync(2) system call that synchronizes a file's state with
the disk (file data and metadata is flushed to disk or stable the disk (file data and metadata is flushed to disk or stable
skipping to change at page 144, line 5 skipping to change at page 145, line 5
close. In this case, the client would gather all of the buffers close. In this case, the client would gather all of the buffers
for this file that contain uncommitted data, do the COMMIT for this file that contain uncommitted data, do the COMMIT
operation with an offset of 0 and count of 0, and then free all of operation with an offset of 0 and count of 0, and then free all of
those buffers. Any other dirty buffers would be sent to the server those buffers. Any other dirty buffers would be sent to the server
in the normal fashion. in the normal fashion.
After a buffer is written by the client with the stable parameter After a buffer is written by the client with the stable parameter
set to UNSTABLE4, the buffer must be considered as modified by the set to UNSTABLE4, the buffer must be considered as modified by the
client until the buffer has either been flushed via a COMMIT client until the buffer has either been flushed via a COMMIT
Draft Specification NFS version 4 Protocol September 2002 Draft Specification NFS version 4 Protocol October 2002
operation or written via a WRITE operation with stable parameter operation or written via a WRITE operation with stable parameter
set to FILE_SYNC4 or DATA_SYNC4. This is done to prevent the buffer set to FILE_SYNC4 or DATA_SYNC4. This is done to prevent the buffer
from being freed and reused before the data can be flushed to from being freed and reused before the data can be flushed to
stable storage on the server. stable storage on the server.
When a response is returned from either a WRITE or a COMMIT When a response is returned from either a WRITE or a COMMIT
operation and it contains a write verifier that is different than operation and it contains a write verifier that is different than
previously returned by the server, the client will need to previously returned by the server, the client will need to
retransmit all of the buffers containing uncommitted cached data to retransmit all of the buffers containing uncommitted cached data to
skipping to change at page 145, line 5 skipping to change at page 146, line 5
NFS4ERR_INVAL NFS4ERR_INVAL
NFS4ERR_IO NFS4ERR_IO
NFS4ERR_ISDIR NFS4ERR_ISDIR
NFS4ERR_MOVED NFS4ERR_MOVED
NFS4ERR_NOFILEHANDLE NFS4ERR_NOFILEHANDLE
NFS4ERR_RESOURCE NFS4ERR_RESOURCE
NFS4ERR_ROFS NFS4ERR_ROFS
NFS4ERR_SERVERFAULT NFS4ERR_SERVERFAULT
NFS4ERR_STALE NFS4ERR_STALE
Draft Specification NFS version 4 Protocol September 2002 Draft Specification NFS version 4 Protocol October 2002
14.2.4. Operation 6: CREATE - Create a Non-Regular File Object 14.2.4. Operation 6: CREATE - Create a Non-Regular File Object
SYNOPSIS SYNOPSIS
(cfh), name, type, attrs -> (cfh), change_info, attrs_set (cfh), name, type, attrs -> (cfh), change_info, attrs_set
ARGUMENT ARGUMENT
union createtype4 switch (nfs_ftype4 type) { union createtype4 switch (nfs_ftype4 type) {
skipping to change at page 146, line 5 skipping to change at page 147, line 5
DESCRIPTION DESCRIPTION
The CREATE operation creates a non-regular file object in a The CREATE operation creates a non-regular file object in a
directory with a given name. The OPEN operation MUST be used to directory with a given name. The OPEN operation MUST be used to
create a regular file. create a regular file.
The objname specifies the name for the new object. The objtype The objname specifies the name for the new object. The objtype
determines the type of object to be created: directory, symlink, determines the type of object to be created: directory, symlink,
Draft Specification NFS version 4 Protocol September 2002 Draft Specification NFS version 4 Protocol October 2002
etc. etc.
If an object of the same name already exists in the directory, the If an object of the same name already exists in the directory, the
server will return the error NFS4ERR_EXIST. server will return the error NFS4ERR_EXIST.
For the directory where the new file object was created, the server For the directory where the new file object was created, the server
returns change_info4 information in cinfo. With the atomic field returns change_info4 information in cinfo. With the atomic field
of the change_info4 struct, the server will indicate if the before of the change_info4 struct, the server will indicate if the before
and after change attributes were obtained atomically with respect and after change attributes were obtained atomically with respect
skipping to change at page 147, line 5 skipping to change at page 148, line 5
OPEN operation too. OPEN operation too.
Conversely, it is possible the client will specify in createattrs Conversely, it is possible the client will specify in createattrs
an owner attribute or group attribute or ACL that the principal an owner attribute or group attribute or ACL that the principal
indicated the RPC call's credentials does not have permissions to indicated the RPC call's credentials does not have permissions to
create files for. The error to be returned in this instance is create files for. The error to be returned in this instance is
NFS4ERR_PERM. This applies to the OPEN operation too. NFS4ERR_PERM. This applies to the OPEN operation too.
IMPLEMENTATION IMPLEMENTATION
Draft Specification NFS version 4 Protocol September 2002 Draft Specification NFS version 4 Protocol October 2002
If the client desires to set attribute values after the create, a If the client desires to set attribute values after the create, a
SETATTR operation can be added to the COMPOUND request so that the SETATTR operation can be added to the COMPOUND request so that the
appropriate attributes will be set. appropriate attributes will be set.
ERRORS ERRORS
NFS4ERR_ACCESS NFS4ERR_ACCESS
NFS4ERR_ATTRNOTSUPP NFS4ERR_ATTRNOTSUPP
NFS4ERR_BADCHAR NFS4ERR_BADCHAR
skipping to change at page 148, line 5 skipping to change at page 149, line 5
NFS4ERR_NAMETOOLONG NFS4ERR_NAMETOOLONG
NFS4ERR_NOFILEHANDLE NFS4ERR_NOFILEHANDLE
NFS4ERR_NOSPC NFS4ERR_NOSPC
NFS4ERR_NOTDIR NFS4ERR_NOTDIR
NFS4ERR_PERM NFS4ERR_PERM
NFS4ERR_RESOURCE NFS4ERR_RESOURCE
NFS4ERR_ROFS NFS4ERR_ROFS
NFS4ERR_SERVERFAULT NFS4ERR_SERVERFAULT
NFS4ERR_STALE NFS4ERR_STALE
Draft Specification NFS version 4 Protocol September 2002 Draft Specification NFS version 4 Protocol October 2002
14.2.5. Operation 7: DELEGPURGE - Purge Delegations Awaiting Recovery 14.2.5. Operation 7: DELEGPURGE - Purge Delegations Awaiting Recovery
SYNOPSIS SYNOPSIS
clientid -> clientid ->
ARGUMENT ARGUMENT
struct DELEGPURGE4args { struct DELEGPURGE4args {
skipping to change at page 149, line 5 skipping to change at page 150, line 5
support CLAIM_DELEGATE_PREV. support CLAIM_DELEGATE_PREV.
ERRORS ERRORS
NFS4ERR_BADXDR NFS4ERR_BADXDR
NFS4ERR_NOTSUPP NFS4ERR_NOTSUPP
NFS4ERR_LEASE_MOVED NFS4ERR_LEASE_MOVED
NFS4ERR_MOVED NFS4ERR_MOVED
NFS4ERR_RESOURCE NFS4ERR_RESOURCE
Draft Specification NFS version 4 Protocol September 2002 Draft Specification NFS version 4 Protocol October 2002
NFS4ERR_SERVERFAULT NFS4ERR_SERVERFAULT
NFS4ERR_STALE_CLIENTID NFS4ERR_STALE_CLIENTID
Draft Specification NFS version 4 Protocol September 2002 Draft Specification NFS version 4 Protocol October 2002
14.2.6. Operation 8: DELEGRETURN - Return Delegation 14.2.6. Operation 8: DELEGRETURN - Return Delegation
SYNOPSIS SYNOPSIS
(cfh), stateid -> (cfh), stateid ->
ARGUMENT ARGUMENT
struct DELEGRETURN4args { struct DELEGRETURN4args {
skipping to change at page 151, line 5 skipping to change at page 152, line 5
NFS4ERR_LEASE_MOVED NFS4ERR_LEASE_MOVED
NFS4ERR_MOVED NFS4ERR_MOVED
NFS4ERR_NOFILEHANDLE NFS4ERR_NOFILEHANDLE
NFS4ERR_NOTSUPP NFS4ERR_NOTSUPP
NFS4ERR_OLD_STATEID NFS4ERR_OLD_STATEID
NFS4ERR_RESOURCE NFS4ERR_RESOURCE
NFS4ERR_SERVERFAULT NFS4ERR_SERVERFAULT
NFS4ERR_STALE NFS4ERR_STALE
NFS4ERR_STALE_STATEID NFS4ERR_STALE_STATEID
Draft Specification NFS version 4 Protocol September 2002 Draft Specification NFS version 4 Protocol October 2002
14.2.7. Operation 9: GETATTR - Get Attributes 14.2.7. Operation 9: GETATTR - Get Attributes
SYNOPSIS SYNOPSIS
(cfh), attrbits -> attrbits, attrvals (cfh), attrbits -> attrbits, attrvals
ARGUMENT ARGUMENT
struct GETATTR4args { struct GETATTR4args {
skipping to change at page 152, line 5 skipping to change at page 153, line 5
value then it must not return the attribute value and must not set value then it must not return the attribute value and must not set
the attribute bit in the result bitmap. The server must return an the attribute bit in the result bitmap. The server must return an
error if it supports an attribute but cannot obtain its value. In error if it supports an attribute but cannot obtain its value. In
that case no attribute values will be returned. that case no attribute values will be returned.
All servers must support the mandatory attributes as specified in All servers must support the mandatory attributes as specified in
the section "File Attributes". the section "File Attributes".
On success, the current filehandle retains its value. On success, the current filehandle retains its value.
Draft Specification NFS version 4 Protocol September 2002 Draft Specification NFS version 4 Protocol October 2002
IMPLEMENTATION IMPLEMENTATION
ERRORS ERRORS
NFS4ERR_ACCESS NFS4ERR_ACCESS
NFS4ERR_BADHANDLE NFS4ERR_BADHANDLE
NFS4ERR_BADXDR NFS4ERR_BADXDR
NFS4ERR_DELAY NFS4ERR_DELAY
NFS4ERR_FHEXPIRED NFS4ERR_FHEXPIRED
NFS4ERR_INVAL NFS4ERR_INVAL
NFS4ERR_IO NFS4ERR_IO
NFS4ERR_MOVED NFS4ERR_MOVED
NFS4ERR_NOFILEHANDLE NFS4ERR_NOFILEHANDLE
NFS4ERR_RESOURCE NFS4ERR_RESOURCE
NFS4ERR_SERVERFAULT NFS4ERR_SERVERFAULT
NFS4ERR_STALE NFS4ERR_STALE
Draft Specification NFS version 4 Protocol September 2002 Draft Specification NFS version 4 Protocol October 2002
14.2.8. Operation 10: GETFH - Get Current Filehandle 14.2.8. Operation 10: GETFH - Get Current Filehandle
SYNOPSIS SYNOPSIS
(cfh) -> filehandle (cfh) -> filehandle
ARGUMENT ARGUMENT
/* CURRENT_FH: */ /* CURRENT_FH: */
skipping to change at page 154, line 5 skipping to change at page 155, line 5
PUTFH (directory filehandle) PUTFH (directory filehandle)
LOOKUP (entry name) LOOKUP (entry name)
GETFH GETFH
ERRORS ERRORS
NFS4ERR_BADHANDLE NFS4ERR_BADHANDLE
NFS4ERR_FHEXPIRED NFS4ERR_FHEXPIRED
NFS4ERR_MOVED NFS4ERR_MOVED
Draft Specification NFS version 4 Protocol September 2002 Draft Specification NFS version 4 Protocol October 2002
NFS4ERR_NOFILEHANDLE NFS4ERR_NOFILEHANDLE
NFS4ERR_RESOURCE NFS4ERR_RESOURCE
NFS4ERR_SERVERFAULT NFS4ERR_SERVERFAULT
NFS4ERR_STALE NFS4ERR_STALE
Draft Specification NFS version 4 Protocol September 2002 Draft Specification NFS version 4 Protocol October 2002
14.2.9. Operation 11: LINK - Create Link to a File 14.2.9. Operation 11: LINK - Create Link to a File
SYNOPSIS SYNOPSIS
(sfh), (cfh), newname -> (cfh), change_info (sfh), (cfh), newname -> (cfh), change_info
ARGUMENT ARGUMENT
struct LINK4args { struct LINK4args {
skipping to change at page 156, line 5 skipping to change at page 157, line 5
For the target directory, the server returns change_info4 For the target directory, the server returns change_info4
information in cinfo. With the atomic field of the change_info4 information in cinfo. With the atomic field of the change_info4
struct, the server will indicate if the before and after change struct, the server will indicate if the before and after change
attributes were obtained atomically with respect to the link attributes were obtained atomically with respect to the link
creation. creation.
If the newname has a length of 0 (zero), or if newname does not If the newname has a length of 0 (zero), or if newname does not
obey the UTF-8 definition, the error NFS4ERR_INVAL will be obey the UTF-8 definition, the error NFS4ERR_INVAL will be
returned. returned.
Draft Specification NFS version 4 Protocol September 2002 Draft Specification NFS version 4 Protocol October 2002
IMPLEMENTATION IMPLEMENTATION
Changes to any property of the "hard" linked files are reflected in Changes to any property of the "hard" linked files are reflected in
all of the linked files. When a link is made to a file, the all of the linked files. When a link is made to a file, the
attributes for the file should have a value for numlinks that is attributes for the file should have a value for numlinks that is
one greater than the value before the LINK operation. one greater than the value before the LINK operation.
The statement "file and the target directory must reside within the The statement "file and the target directory must reside within the
same filesystem on the server" means that the fsid fields in the same filesystem on the server" means that the fsid fields in the
skipping to change at page 157, line 5 skipping to change at page 158, line 5
NFS4ERR_NOSPC NFS4ERR_NOSPC
NFS4ERR_NOTDIR NFS4ERR_NOTDIR
NFS4ERR_NOTSUPP NFS4ERR_NOTSUPP
NFS4ERR_RESOURCE NFS4ERR_RESOURCE
NFS4ERR_ROFS NFS4ERR_ROFS
NFS4ERR_SERVERFAULT NFS4ERR_SERVERFAULT
NFS4ERR_STALE NFS4ERR_STALE
NFS4ERR_WRONGSEC NFS4ERR_WRONGSEC
NFS4ERR_XDEV NFS4ERR_XDEV
Draft Specification NFS version 4 Protocol September 2002 Draft Specification NFS version 4 Protocol October 2002
14.2.10. Operation 12: LOCK - Create Lock 14.2.10. Operation 12: LOCK - Create Lock
SYNOPSIS SYNOPSIS
(cfh) locktype, reclaim, offset, length, locker -> stateid (cfh) locktype, reclaim, offset, length, locker -> stateid
ARGUMENT ARGUMENT
struct open_to_lock_owner4 { struct open_to_lock_owner4 {
skipping to change at page 158, line 5 skipping to change at page 159, line 5
locker4 locker; locker4 locker;
}; };
RESULT RESULT
struct LOCK4denied { struct LOCK4denied {
offset4 offset; offset4 offset;
length4 length; length4 length;
nfs_lock_type4 locktype; nfs_lock_type4 locktype;
Draft Specification NFS version 4 Protocol September 2002 Draft Specification NFS version 4 Protocol October 2002
lock_owner4 owner; lock_owner4 owner;
}; };
struct LOCK4resok { struct LOCK4resok {
stateid4 lock_stateid; stateid4 lock_stateid;
}; };
union LOCK4res switch (nfsstat4 status) { union LOCK4res switch (nfsstat4 status) {
case NFS4_OK: case NFS4_OK:
skipping to change at page 159, line 5 skipping to change at page 160, line 5
On success, the current filehandle retains its value. On success, the current filehandle retains its value.
IMPLEMENTATION IMPLEMENTATION
If the server is unable to determine the exact offset and length of If the server is unable to determine the exact offset and length of
the conflicting lock, the same offset and length that were provided the conflicting lock, the same offset and length that were provided
in the arguments should be returned in the denied results. The in the arguments should be returned in the denied results. The
File Locking section contains a full description of this and the File Locking section contains a full description of this and the
other file locking operations. other file locking operations.
Draft Specification NFS version 4 Protocol September 2002 Draft Specification NFS version 4 Protocol October 2002
LOCK operations are subject to permission checks and to checks LOCK operations are subject to permission checks and to checks
against the access type of the associated file. However, the against the access type of the associated file. However, the
specific right and modes required for various type of locks, specific right and modes required for various type of locks,
reflect the semantics of the server-exported filesystem, and are reflect the semantics of the server-exported filesystem, and are
not specified by the protocol. For example, Windows 2000 allows a not specified by the protocol. For example, Windows 2000 allows a
write lock of a file open for READ, while a POSIX-compliant system write lock of a file open for READ, while a POSIX-compliant system
does not. does not.
When the client makes a lock request that corresponds to a range When the client makes a lock request that corresponds to a range
skipping to change at page 160, line 5 skipping to change at page 161, line 5
NFS4ERR_ACCESS NFS4ERR_ACCESS
NFS4ERR_ADMIN_REVOKED NFS4ERR_ADMIN_REVOKED
NFS4ERR_BADHANDLE NFS4ERR_BADHANDLE
NFS4ERR_BAD_RANGE NFS4ERR_BAD_RANGE
NFS4ERR_BAD_SEQID NFS4ERR_BAD_SEQID
NFS4ERR_BAD_STATEID NFS4ERR_BAD_STATEID
NFS4ERR_BADXDR NFS4ERR_BADXDR
NFS4ERR_DEADLOCK NFS4ERR_DEADLOCK
NFS4ERR_DELAY NFS4ERR_DELAY
Draft Specification NFS version 4 Protocol September 2002 Draft Specification NFS version 4 Protocol October 2002
NFS4ERR_DENIED NFS4ERR_DENIED
NFS4ERR_EXPIRED NFS4ERR_EXPIRED
NFS4ERR_FHEXPIRED NFS4ERR_FHEXPIRED
NFS4ERR_GRACE NFS4ERR_GRACE
NFS4ERR_INVAL NFS4ERR_INVAL
NFS4ERR_ISDIR NFS4ERR_ISDIR
NFS4ERR_LEASE_MOVED NFS4ERR_LEASE_MOVED
NFS4ERR_LOCK_NOTSUPP NFS4ERR_LOCK_NOTSUPP
NFS4ERR_LOCK_RANGE NFS4ERR_LOCK_RANGE
skipping to change at page 161, line 5 skipping to change at page 162, line 5
NFS4ERR_OLD_STATEID NFS4ERR_OLD_STATEID
NFS4ERR_OPENMODE NFS4ERR_OPENMODE
NFS4ERR_RECLAIM_BAD NFS4ERR_RECLAIM_BAD
NFS4ERR_RECLAIM_CONFLICT NFS4ERR_RECLAIM_CONFLICT
NFS4ERR_RESOURCE NFS4ERR_RESOURCE
NFS4ERR_SERVERFAULT NFS4ERR_SERVERFAULT
NFS4ERR_STALE NFS4ERR_STALE
NFS4ERR_STALE_CLIENTID NFS4ERR_STALE_CLIENTID
NFS4ERR_STALE_STATEID NFS4ERR_STALE_STATEID
Draft Specification NFS version 4 Protocol September 2002 Draft Specification NFS version 4 Protocol October 2002
14.2.11. Operation 13: LOCKT - Test For Lock 14.2.11. Operation 13: LOCKT - Test For Lock
SYNOPSIS SYNOPSIS
(cfh) locktype, offset, length owner -> {void, NFS4ERR_DENIED -> (cfh) locktype, offset, length owner -> {void, NFS4ERR_DENIED ->
owner} owner}
ARGUMENT ARGUMENT
skipping to change at page 162, line 5 skipping to change at page 163, line 5
of the conflicting lock are returned; if no lock is held, nothing of the conflicting lock are returned; if no lock is held, nothing
other than NFS4_OK is returned. Lock types READ_LT and READW_LT other than NFS4_OK is returned. Lock types READ_LT and READW_LT
are processed in the same way in that a conflicting lock test is are processed in the same way in that a conflicting lock test is
done without regard to blocking or non-blocking. The same is true done without regard to blocking or non-blocking. The same is true
for WRITE_LT and WRITEW_LT. for WRITE_LT and WRITEW_LT.
The ranges are specified as for LOCK. The NFS4ERR_INVAL and The ranges are specified as for LOCK. The NFS4ERR_INVAL and
NFS4ERR_BAD_RANGE errors are returned under the same circumstances NFS4ERR_BAD_RANGE errors are returned under the same circumstances
as for LOCK. as for LOCK.
Draft Specification NFS version 4 Protocol September 2002 Draft Specification NFS version 4 Protocol October 2002
On success, the current filehandle retains its value. On success, the current filehandle retains its value.
IMPLEMENTATION IMPLEMENTATION
If the server is unable to determine the exact offset and length of If the server is unable to determine the exact offset and length of
the conflicting lock, the same offset and length that were provided the conflicting lock, the same offset and length that were provided
in the arguments should be returned in the denied results. The in the arguments should be returned in the denied results. The
File Locking section contains further discussion of the file File Locking section contains further discussion of the file
locking mechanisms. locking mechanisms.
skipping to change at page 163, line 5 skipping to change at page 164, line 5
NFS4ERR_ISDIR NFS4ERR_ISDIR
NFS4ERR_LEASE_MOVED NFS4ERR_LEASE_MOVED
NFS4ERR_LOCK_RANGE NFS4ERR_LOCK_RANGE
NFS4ERR_MOVED NFS4ERR_MOVED
NFS4ERR_NOFILEHANDLE NFS4ERR_NOFILEHANDLE
NFS4ERR_RESOURCE NFS4ERR_RESOURCE
NFS4ERR_SERVERFAULT NFS4ERR_SERVERFAULT
NFS4ERR_STALE NFS4ERR_STALE
NFS4ERR_STALE_CLIENTID NFS4ERR_STALE_CLIENTID
Draft Specification NFS version 4 Protocol September 2002 Draft Specification NFS version 4 Protocol October 2002
14.2.12. Operation 14: LOCKU - Unlock File 14.2.12. Operation 14: LOCKU - Unlock File
SYNOPSIS SYNOPSIS
(cfh) type, seqid, stateid, offset, length -> stateid (cfh) type, seqid, stateid, offset, length -> stateid
ARGUMENT ARGUMENT
struct LOCKU4args { struct LOCKU4args {
skipping to change at page 164, line 5 skipping to change at page 165, line 5
On success, the current filehandle retains its value. On success, the current filehandle retains its value.
IMPLEMENTATION IMPLEMENTATION
If the area to be unlocked does not correspond exactly to a lock If the area to be unlocked does not correspond exactly to a lock
actually held by the lockowner the server may return the error actually held by the lockowner the server may return the error
NFS4ERR_LOCK_RANGE. This includes the case in which the area is NFS4ERR_LOCK_RANGE. This includes the case in which the area is
not locked, where the area is a sub-range of the area locked, where not locked, where the area is a sub-range of the area locked, where
it overlaps the area locked without matching exactly or the area it overlaps the area locked without matching exactly or the area
Draft Specification NFS version 4 Protocol September 2002 Draft Specification NFS version 4 Protocol October 2002
specified includes multiple locks held by the lockowner. In all of specified includes multiple locks held by the lockowner. In all of
these cases, allowed by POSIX locking semantics, a client receiving these cases, allowed by POSIX locking semantics, a client receiving
this error, should if it desires support for such operations, this error, should if it desires support for such operations,
simulate the operation using LOCKU on ranges corresponding to locks simulate the operation using LOCKU on ranges corresponding to locks
it actually holds, possibly followed by LOCK requests for the sub- it actually holds, possibly followed by LOCK requests for the sub-
ranges not being unlocked. ranges not being unlocked.
ERRORS ERRORS
skipping to change at page 165, line 5 skipping to change at page 166, line 5
NFS4ERR_LEASE_MOVED NFS4ERR_LEASE_MOVED
NFS4ERR_LOCK_RANGE NFS4ERR_LOCK_RANGE
NFS4ERR_MOVED NFS4ERR_MOVED
NFS4ERR_NOFILEHANDLE NFS4ERR_NOFILEHANDLE
NFS4ERR_OLD_STATEID NFS4ERR_OLD_STATEID
NFS4ERR_RESOURCE NFS4ERR_RESOURCE
NFS4ERR_SERVERFAULT NFS4ERR_SERVERFAULT
NFS4ERR_STALE NFS4ERR_STALE
NFS4ERR_STALE_STATEID NFS4ERR_STALE_STATEID
Draft Specification NFS version 4 Protocol September 2002 Draft Specification NFS version 4 Protocol October 2002
14.2.13. Operation 15: LOOKUP - Lookup Filename 14.2.13. Operation 15: LOOKUP - Lookup Filename
SYNOPSIS SYNOPSIS
(cfh), component -> (cfh) (cfh), component -> (cfh)
ARGUMENT ARGUMENT
struct LOOKUP4args { struct LOOKUP4args {
skipping to change at page 166, line 5 skipping to change at page 167, line 5
If the component is a zero length string or if any component does If the component is a zero length string or if any component does
not obey the UTF-8 definition, the error NFS4ERR_INVAL will be not obey the UTF-8 definition, the error NFS4ERR_INVAL will be
returned. returned.
IMPLEMENTATION IMPLEMENTATION
If the client wants to achieve the effect of a multi-component If the client wants to achieve the effect of a multi-component
lookup, it may construct a COMPOUND request such as (and obtain lookup, it may construct a COMPOUND request such as (and obtain
each filehandle): each filehandle):
Draft Specification NFS version 4 Protocol September 2002 Draft Specification NFS version 4 Protocol October 2002
PUTFH (directory filehandle) PUTFH (directory filehandle)
LOOKUP "pub" LOOKUP "pub"
GETFH GETFH
LOOKUP "foo" LOOKUP "foo"
GETFH GETFH
LOOKUP "bar" LOOKUP "bar"
GETFH GETFH
NFS version 4 servers depart from the semantics of previous NFS NFS version 4 servers depart from the semantics of previous NFS
skipping to change at page 167, line 5 skipping to change at page 168, line 5
NFS4ERR_ACCESS NFS4ERR_ACCESS
NFS4ERR_BADCHAR NFS4ERR_BADCHAR
NFS4ERR_BADHANDLE NFS4ERR_BADHANDLE
NFS4ERR_BADNAME NFS4ERR_BADNAME
NFS4ERR_BADXDR NFS4ERR_BADXDR
NFS4ERR_FHEXPIRED NFS4ERR_FHEXPIRED
NFS4ERR_INVAL NFS4ERR_INVAL
NFS4ERR_IO NFS4ERR_IO
NFS4ERR_MOVED NFS4ERR_MOVED
Draft Specification NFS version 4 Protocol September 2002 Draft Specification NFS version 4 Protocol October 2002
NFS4ERR_NAMETOOLONG NFS4ERR_NAMETOOLONG
NFS4ERR_NOENT NFS4ERR_NOENT
NFS4ERR_NOFILEHANDLE NFS4ERR_NOFILEHANDLE
NFS4ERR_NOTDIR NFS4ERR_NOTDIR
NFS4ERR_RESOURCE NFS4ERR_RESOURCE
NFS4ERR_SERVERFAULT NFS4ERR_SERVERFAULT
NFS4ERR_STALE NFS4ERR_STALE
NFS4ERR_SYMLINK NFS4ERR_SYMLINK
NFS4ERR_WRONGSEC NFS4ERR_WRONGSEC
Draft Specification NFS version 4 Protocol September 2002 Draft Specification NFS version 4 Protocol October 2002
14.2.14. Operation 16: LOOKUPP - Lookup Parent Directory 14.2.14. Operation 16: LOOKUPP - Lookup Parent Directory
SYNOPSIS SYNOPSIS
(cfh) -> (cfh) (cfh) -> (cfh)
ARGUMENT ARGUMENT
/* CURRENT_FH: object */ /* CURRENT_FH: object */
skipping to change at page 169, line 5 skipping to change at page 170, line 5
NFS4ERR_FHEXPIRED NFS4ERR_FHEXPIRED
NFS4ERR_IO NFS4ERR_IO
NFS4ERR_MOVED NFS4ERR_MOVED
NFS4ERR_NOENT NFS4ERR_NOENT
NFS4ERR_NOFILEHANDLE NFS4ERR_NOFILEHANDLE
NFS4ERR_NOTDIR NFS4ERR_NOTDIR
NFS4ERR_RESOURCE NFS4ERR_RESOURCE
NFS4ERR_SERVERFAULT NFS4ERR_SERVERFAULT
NFS4ERR_STALE NFS4ERR_STALE
Draft Specification NFS version 4 Protocol September 2002 Draft Specification NFS version 4 Protocol October 2002
14.2.15. Operation 17: NVERIFY - Verify Difference in Attributes 14.2.15. Operation 17: NVERIFY - Verify Difference in Attributes
SYNOPSIS SYNOPSIS
(cfh), fattr -> - (cfh), fattr -> -
ARGUMENT ARGUMENT
struct NVERIFY4args { struct NVERIFY4args {
skipping to change at page 170, line 5 skipping to change at page 171, line 5
NVERIFY attrbits attrs NVERIFY attrbits attrs
READ 0 32767 READ 0 32767
In the case that a recommended attribute is specified in the In the case that a recommended attribute is specified in the
NVERIFY operation and the server does not support that attribute NVERIFY operation and the server does not support that attribute
for the filesystem object, the error NFS4ERR_ATTRNOTSUPP is for the filesystem object, the error NFS4ERR_ATTRNOTSUPP is
returned to the client. returned to the client.
When the attribute rdattr_error or any write-only attribute (e.g. When the attribute rdattr_error or any write-only attribute (e.g.
Draft Specification NFS version 4 Protocol September 2002 Draft Specification NFS version 4 Protocol October 2002
time_modify_set) is specified, the error NFS4ERR_INVAL is returned time_modify_set) is specified, the error NFS4ERR_INVAL is returned
to the client. to the client.
ERRORS ERRORS
NFS4ERR_ACCESS NFS4ERR_ACCESS
NFS4ERR_ATTRNOTSUPP NFS4ERR_ATTRNOTSUPP
NFS4ERR_BADCHAR NFS4ERR_BADCHAR
NFS4ERR_BADHANDLE NFS4ERR_BADHANDLE
skipping to change at page 171, line 5 skipping to change at page 172, line 5
NFS4ERR_FHEXPIRED NFS4ERR_FHEXPIRED
NFS4ERR_INVAL NFS4ERR_INVAL
NFS4ERR_IO NFS4ERR_IO
NFS4ERR_MOVED NFS4ERR_MOVED
NFS4ERR_NOFILEHANDLE NFS4ERR_NOFILEHANDLE
NFS4ERR_RESOURCE NFS4ERR_RESOURCE
NFS4ERR_SAME NFS4ERR_SAME
NFS4ERR_SERVERFAULT NFS4ERR_SERVERFAULT
NFS4ERR_STALE NFS4ERR_STALE
Draft Specification NFS version 4 Protocol September 2002 Draft Specification NFS version 4 Protocol October 2002
14.2.16. Operation 18: OPEN - Open a Regular File 14.2.16. Operation 18: OPEN - Open a Regular File
SYNOPSIS SYNOPSIS
(cfh), seqid, share_access, share_deny, owner, openhow, claim -> (cfh), seqid, share_access, share_deny, owner, openhow, claim ->
(cfh), stateid, cinfo, rflags, open_confirm, attrset delegation (cfh), stateid, cinfo, rflags, open_confirm, attrset delegation
ARGUMENT ARGUMENT
skipping to change at page 172, line 5 skipping to change at page 173, line 5
void; void;
}; };
/* Next definitions used for OPEN delegation */ /* Next definitions used for OPEN delegation */
enum limit_by4 { enum limit_by4 {
NFS_LIMIT_SIZE = 1, NFS_LIMIT_SIZE = 1,
NFS_LIMIT_BLOCKS = 2 NFS_LIMIT_BLOCKS = 2
/* others as needed */ /* others as needed */
}; };
Draft Specification NFS version 4 Protocol September 2002 Draft Specification NFS version 4 Protocol October 2002
struct nfs_modified_limit4 { struct nfs_modified_limit4 {
uint32_t num_blocks; uint32_t num_blocks;
uint32_t bytes_per_block; uint32_t bytes_per_block;
}; };
union nfs_space_limit4 switch (limit_by4 limitby) { union nfs_space_limit4 switch (limit_by4 limitby) {
/* limit specified as file size */ /* limit specified as file size */
case NFS_LIMIT_SIZE: case NFS_LIMIT_SIZE:
uint64_t filesize; uint64_t filesize;
skipping to change at page 173, line 5 skipping to change at page 174, line 5
* rather than by name. * rather than by name.
*/ */
case CLAIM_PREVIOUS: case CLAIM_PREVIOUS:
/* CURRENT_FH: file being reclaimed */ /* CURRENT_FH: file being reclaimed */
open_delegation_type4 delegate_type; open_delegation_type4 delegate_type;
/* /*
* Right to file based on a delegation granted by the server. * Right to file based on a delegation granted by the server.
* File is specified by name. * File is specified by name.
Draft Specification NFS version 4 Protocol September 2002 Draft Specification NFS version 4 Protocol October 2002
*/ */
case CLAIM_DELEGATE_CUR: case CLAIM_DELEGATE_CUR:
/* CURRENT_FH: directory */ /* CURRENT_FH: directory */
open_claim_delegate_cur4 delegate_cur_info; open_claim_delegate_cur4 delegate_cur_info;
/* Right to file based on a delegation granted to a previous boot /* Right to file based on a delegation granted to a previous boot
* instance of the client. File is specified by name. * instance of the client. File is specified by name.
*/ */
case CLAIM_DELEGATE_PREV: case CLAIM_DELEGATE_PREV:
skipping to change at page 174, line 5 skipping to change at page 175, line 5
open. */ open. */
}; };
union open_delegation4 union open_delegation4
switch (open_delegation_type4 delegation_type) { switch (open_delegation_type4 delegation_type) {
case OPEN_DELEGATE_NONE: case OPEN_DELEGATE_NONE:
void; void;
case OPEN_DELEGATE_READ: case OPEN_DELEGATE_READ:
open_read_delegation4 read; open_read_delegation4 read;
Draft Specification NFS version 4 Protocol September 2002 Draft Specification NFS version 4 Protocol October 2002
case OPEN_DELEGATE_WRITE: case OPEN_DELEGATE_WRITE:
open_write_delegation4 write; open_write_delegation4 write;
}; };
const OPEN4_RESULT_CONFIRM = 0x00000002; const OPEN4_RESULT_CONFIRM = 0x00000002;
const OPEN4_RESULT_LOCKTYPE_POSIX = 0x00000004; const OPEN4_RESULT_LOCKTYPE_POSIX = 0x00000004;
struct OPEN4resok { struct OPEN4resok {
stateid4 stateid; /* Stateid for open */ stateid4 stateid; /* Stateid for open */
skipping to change at page 175, line 5 skipping to change at page 176, line 5
The OPEN operation creates and/or opens a regular file in a The OPEN operation creates and/or opens a regular file in a
directory with the provided name. If the file does not exist at directory with the provided name. If the file does not exist at
the server and creation is desired, specification of the method of the server and creation is desired, specification of the method of
creation is provided by the openhow parameter. The client has the creation is provided by the openhow parameter. The client has the
choice of three creation methods: UNCHECKED, GUARDED, or EXCLUSIVE. choice of three creation methods: UNCHECKED, GUARDED, or EXCLUSIVE.
If the current filehandle is a named attribute directory, OPEN will If the current filehandle is a named attribute directory, OPEN will
then create or open a named attribute file. Note that exclusive then create or open a named attribute file. Note that exclusive
Draft Specification NFS version 4 Protocol September 2002 Draft Specification NFS version 4 Protocol October 2002
create of a named attribute is not supported. If the createmode is create of a named attribute is not supported. If the createmode is
EXCLUSIVE4 and the current filehandle is a named attribute EXCLUSIVE4 and the current filehandle is a named attribute
directory, the server will return EINVAL. directory, the server will return EINVAL.
UNCHECKED means that the file should be created if a file of that UNCHECKED means that the file should be created if a file of that
name does not exist and encountering an existing regular file of name does not exist and encountering an existing regular file of
that name is not an error. For this type of create, createattrs that name is not an error. For this type of create, createattrs
specifies the initial set of attributes for the file. The set of specifies the initial set of attributes for the file. The set of
attributes may include any writable attribute valid for regular attributes may include any writable attribute valid for regular
skipping to change at page 176, line 5 skipping to change at page 177, line 5
that of the new object. that of the new object.
The OPEN operation provides for Windows share reservation The OPEN operation provides for Windows share reservation
capability with the use of the share_access and share_deny fields capability with the use of the share_access and share_deny fields
of the OPEN arguments. The client specifies at OPEN the required of the OPEN arguments. The client specifies at OPEN the required
share_access and share_deny modes. For clients that do not share_access and share_deny modes. For clients that do not
directly support SHAREs (i.e. UNIX), the expected deny value is directly support SHAREs (i.e. UNIX), the expected deny value is
DENY_NONE. In the case that there is a existing SHARE reservation DENY_NONE. In the case that there is a existing SHARE reservation
that conflicts with the OPEN request, the server returns the error that conflicts with the OPEN request, the server returns the error
Draft Specification NFS version 4 Protocol September 2002 Draft Specification NFS version 4 Protocol October 2002
NFS4ERR_SHARE_DENIED. For a complete SHARE request, the client NFS4ERR_SHARE_DENIED. For a complete SHARE request, the client
must provide values for the owner and seqid fields for the OPEN must provide values for the owner and seqid fields for the OPEN
argument. For additional discussion of SHARE semantics see the argument. For additional discussion of SHARE semantics see the
section on 'Share Reservations'. section on 'Share Reservations'.
In the case that the client is recovering state from a server In the case that the client is recovering state from a server
failure, the claim field of the OPEN argument is used to signify failure, the claim field of the OPEN argument is used to signify
that the request is meant to reclaim state previously held. that the request is meant to reclaim state previously held.
skipping to change at page 177, line 5 skipping to change at page 178, line 5
server reboot) that reach the server during its grace or lease server reboot) that reach the server during its grace or lease
expiration period, the server returns an error of NFS4ERR_GRACE. expiration period, the server returns an error of NFS4ERR_GRACE.
For any OPEN request, the server may return an open delegation, For any OPEN request, the server may return an open delegation,
which allows further opens and closes to be handled locally on the which allows further opens and closes to be handled locally on the
client as described in the section Open Delegation. Note that client as described in the section Open Delegation. Note that
delegation is up to the server to decide. The client should never delegation is up to the server to decide. The client should never
assume that delegation will or will not be granted in a particular assume that delegation will or will not be granted in a particular
instance. It should always be prepared for either case. A partial instance. It should always be prepared for either case. A partial
Draft Specification NFS version 4 Protocol September 2002 Draft Specification NFS version 4 Protocol October 2002
exception is the reclaim (CLAIM_PREVIOUS) case, in which a exception is the reclaim (CLAIM_PREVIOUS) case, in which a
delegation type is claimed. In this case, delegation will always delegation type is claimed. In this case, delegation will always
be granted, although the server may specify an immediate recall in be granted, although the server may specify an immediate recall in
the delegation structure. the delegation structure.
The rflags returned by a successful OPEN allow the server to return The rflags returned by a successful OPEN allow the server to return
information governing how the open file is to be handled. information governing how the open file is to be handled.
OPEN4_RESULT_CONFIRM indicates that the client MUST execute an OPEN4_RESULT_CONFIRM indicates that the client MUST execute an
OPEN_CONFIRM operation before using the open file. OPEN_CONFIRM operation before using the open file.
skipping to change at page 178, line 5 skipping to change at page 179, line 5
In the case of a OPEN which specifies a size of zero (e.g. In the case of a OPEN which specifies a size of zero (e.g.
truncation) and the file has named attributes, the named attributes truncation) and the file has named attributes, the named attributes
are left as is. They are not removed. are left as is. They are not removed.
IMPLEMENTATION IMPLEMENTATION
The OPEN operation contains support for EXCLUSIVE create. The The OPEN operation contains support for EXCLUSIVE create. The
mechanism is similar to the support in NFS version 3 [RFC1813]. As mechanism is similar to the support in NFS version 3 [RFC1813]. As
in NFS version 3, this mechanism provides reliable exclusive in NFS version 3, this mechanism provides reliable exclusive
Draft Specification NFS version 4 Protocol September 2002 Draft Specification NFS version 4 Protocol October 2002
creation. Exclusive create is invoked when the how parameter is creation. Exclusive create is invoked when the how parameter is
EXCLUSIVE. In this case, the client provides a verifier that can EXCLUSIVE. In this case, the client provides a verifier that can
reasonably be expected to be unique. A combination of a client reasonably be expected to be unique. A combination of a client
identifier, perhaps the client network address, and a unique number identifier, perhaps the client network address, and a unique number
generated by the client, perhaps the RPC transaction identifier, generated by the client, perhaps the RPC transaction identifier,
may be appropriate. may be appropriate.
If the object does not exist, the server creates the object and If the object does not exist, the server creates the object and
stores the verifier in stable storage. For filesystems that do not stores the verifier in stable storage. For filesystems that do not
skipping to change at page 179, line 5 skipping to change at page 180, line 5
data to store the verifier. The subsequent SETATTR must not occur data to store the verifier. The subsequent SETATTR must not occur
in the same COMPOUND request as the OPEN. This separation will in the same COMPOUND request as the OPEN. This separation will
guarantee that the exclusive create mechanism will continue to guarantee that the exclusive create mechanism will continue to
function properly in the face of retransmission of the request. function properly in the face of retransmission of the request.
Use of the GUARDED attribute does not provide exactly-once Use of the GUARDED attribute does not provide exactly-once
semantics. In particular, if a reply is lost and the server does semantics. In particular, if a reply is lost and the server does
not detect the retransmission of the request, the operation can not detect the retransmission of the request, the operation can
fail with NFS4ERR_EXIST, even though the create was performed fail with NFS4ERR_EXIST, even though the create was performed
Draft Specification NFS version 4 Protocol September 2002 Draft Specification NFS version 4 Protocol October 2002
successfully. The client would use this behavior in the case that successfully. The client would use this behavior in the case that
the application has not requested an exclusive create but has asked the application has not requested an exclusive create but has asked
to have the file truncated when the file is opened. In the case of to have the file truncated when the file is opened. In the case of
the client timing out and retransmitting the create request, the the client timing out and retransmitting the create request, the
client can use GUARDED to prevent against a sequence like: create, client can use GUARDED to prevent against a sequence like: create,
write, create (retransmitted) from occurring. write, create (retransmitted) from occurring.
For SHARE reservations, the client must specify a value for For SHARE reservations, the client must specify a value for
share_access that is one of READ, WRITE, or BOTH. For share_deny, share_access that is one of READ, WRITE, or BOTH. For share_deny,
skipping to change at page 180, line 5 skipping to change at page 181, line 5
NFS4ERR_BADXDR NFS4ERR_BADXDR
NFS4ERR_DELAY NFS4ERR_DELAY
NFS4ERR_DQUOT NFS4ERR_DQUOT
NFS4ERR_EXIST NFS4ERR_EXIST
NFS4ERR_EXPIRED NFS4ERR_EXPIRED
NFS4ERR_FHEXPIRED NFS4ERR_FHEXPIRED
NFS4ERR_GRACE NFS4ERR_GRACE
NFS4ERR_IO NFS4ERR_IO
NFS4ERR_INVAL NFS4ERR_INVAL
Draft Specification NFS version 4 Protocol September 2002 Draft Specification NFS version 4 Protocol October 2002
NFS4ERR_ISDIR NFS4ERR_ISDIR
NFS4ERR_LEASE_MOVED NFS4ERR_LEASE_MOVED
NFS4ERR_MOVED NFS4ERR_MOVED
NFS4ERR_NAMETOOLONG NFS4ERR_NAMETOOLONG
NFS4ERR_NOENT NFS4ERR_NOENT
NFS4ERR_NOFILEHANDLE NFS4ERR_NOFILEHANDLE
NFS4ERR_NOSPC NFS4ERR_NOSPC
NFS4ERR_NOTDIR NFS4ERR_NOTDIR
NFS4ERR_NO_GRACE NFS4ERR_NO_GRACE
skipping to change at page 181, line 5 skipping to change at page 182, line 5
NFS4ERR_RECLAIM_CONFLICT NFS4ERR_RECLAIM_CONFLICT
NFS4ERR_RESOURCE NFS4ERR_RESOURCE
NFS4ERR_ROFS NFS4ERR_ROFS
NFS4ERR_SERVERFAULT NFS4ERR_SERVERFAULT
NFS4ERR_SHARE_DENIED NFS4ERR_SHARE_DENIED
NFS4ERR_STALE NFS4ERR_STALE
NFS4ERR_STALE_CLIENTID NFS4ERR_STALE_CLIENTID
NFS4ERR_SYMLINK NFS4ERR_SYMLINK
NFS4ERR_WRONGSEC NFS4ERR_WRONGSEC
Draft Specification NFS version 4 Protocol September 2002 Draft Specification NFS version 4 Protocol October 2002
14.2.17. Operation 19: OPENATTR - Open Named Attribute Directory 14.2.17. Operation 19: OPENATTR - Open Named Attribute Directory
SYNOPSIS SYNOPSIS
(cfh) createdir -> (cfh) (cfh) createdir -> (cfh)
ARGUMENT ARGUMENT
struct OPENATTR4args { struct OPENATTR4args {
skipping to change at page 182, line 5 skipping to change at page 183, line 5
attribute directory assumes that the server has implemented named attribute directory assumes that the server has implemented named
attribute support in this fashion and is not required to do so by attribute support in this fashion and is not required to do so by
this definition. this definition.
IMPLEMENTATION IMPLEMENTATION
If the server does not support named attributes for the current If the server does not support named attributes for the current
filehandle, an error of NFS4ERR_NOTSUPP will be returned to the filehandle, an error of NFS4ERR_NOTSUPP will be returned to the
client. client.
Draft Specification NFS version 4 Protocol September 2002 Draft Specification NFS version 4 Protocol October 2002
ERRORS ERRORS
NFS4ERR_ACCESS NFS4ERR_ACCESS
NFS4ERR_BADHANDLE NFS4ERR_BADHANDLE
NFS4ERR_BADXDR NFS4ERR_BADXDR
NFS4ERR_DELAY NFS4ERR_DELAY
NFS4ERR_DQUOT NFS4ERR_DQUOT
NFS4ERR_FHEXPIRED NFS4ERR_FHEXPIRED
NFS4ERR_IO NFS4ERR_IO
NFS4ERR_MOVED NFS4ERR_MOVED
NFS4ERR_NOENT NFS4ERR_NOENT
NFS4ERR_NOFILEHANDLE NFS4ERR_NOFILEHANDLE
NFS4ERR_NOSPC NFS4ERR_NOSPC
NFS4ERR_NOTSUPP NFS4ERR_NOTSUPP
NFS4ERR_RESOURCE NFS4ERR_RESOURCE
NFS4ERR_ROFS NFS4ERR_ROFS
NFS4ERR_SERVERFAULT NFS4ERR_SERVERFAULT
NFS4ERR_STALE NFS4ERR_STALE
Draft Specification NFS version 4 Protocol September 2002 Draft Specification NFS version 4 Protocol October 2002
14.2.18. Operation 20: OPEN_CONFIRM - Confirm Open 14.2.18. Operation 20: OPEN_CONFIRM - Confirm Open
SYNOPSIS SYNOPSIS
(cfh), seqid, stateid-> stateid (cfh), seqid, stateid-> stateid
ARGUMENT ARGUMENT
struct OPEN_CONFIRM4args { struct OPEN_CONFIRM4args {
skipping to change at page 184, line 5 skipping to change at page 185, line 5
On success, the current filehandle retains its value. On success, the current filehandle retains its value.
IMPLEMENTATION IMPLEMENTATION
A given client might generate many open_owner4 data structures for A given client might generate many open_owner4 data structures for
a given clientid. The client will periodically either dispose of a given clientid. The client will periodically either dispose of
its open_owner4s or stop using them for indefinite periods of time. its open_owner4s or stop using them for indefinite periods of time.
The latter situation is why the NFS version 4 protocol does not The latter situation is why the NFS version 4 protocol does not
Draft Specification NFS version 4 Protocol September 2002 Draft Specification NFS version 4 Protocol October 2002