← Documents Documentation/filesystems/nfs/nfs41-server.rst GitHub 원문 ↗

Linux 6.18.37 · Filesystems / NFS

NFSv4.1 Server Implementation

Linux NFSv4.1 server의 session, operation·callback 지원표와 구현 제한을 설명하는 전문 번역입니다.

Source pathDocumentation/filesystems/nfs/nfs41-server.rst
Source versionLinux v6.18.37
TranslationDUJINLABS 전문 번역 + 해설

요약·해설과 원문, 전문 번역을 서로 분리했습니다. API 이름, symbol, source path는 원문 표기를 사용합니다.

1. 요약·해설

원문의 핵심 논리와 kernel programming 관점의 보충 설명입니다. 아래의 전문 번역과는 별도로 작성했습니다.

요약·해설

nfs41-server.rst:1-256

Linux nfsd의 NFSv4.1 구현은 RFC 5661 Session을 중심으로 `exactly once` semantics와 client별 resource control을 제공합니다. `/proc/fs/nfsd/versions`로 지원을 제어하되 구형 kernel의 parsing 차이 때문에 4.1을 version 4보다 먼저 변경해야 합니다.

Operation 표는 protocol requirement와 Linux 구현 상태를 분리해 읽어야 합니다. Session과 핵심 pNFS layout operation은 구현되어 있지만 SSV, 일부 optional delegation·notification, backchannel GSS, dynamic slot renegotiation과 특정 최대 크기 compound에는 명시적인 제한이 있습니다.

NFSv4.1 server session 중심 구조
EXCHANGE_ID로 client/server identity와 capability 교환CREATE_SESSION으로 fore/back channel resource 협상BIND_CONN_TO_SESSION으로 connection 연결SEQUENCE와 slot으로 replay 및 exactly-once semantics 제공DESTROY_SESSION과 DESTROY_CLIENTID로 수명 종료

Client identity 교환부터 exactly-once compound 처리까지 이어집니다.

2. 영어 원문 전체

번역 기준이 된 Linux v6.18.37 원문입니다. 줄 번호는 이 버전의 파일 좌표입니다.

원문 전체 펼치기
1 =============================
2 NFSv4.1 Server Implementation
3 =============================
4
5 Server support for minorversion 1 can be controlled using the
6 /proc/fs/nfsd/versions control file. The string output returned
7 by reading this file will contain either "+4.1" or "-4.1"
8 correspondingly.
9
10 Currently, server support for minorversion 1 is enabled by default.
11 It can be disabled at run time by writing the string "-4.1" to
12 the /proc/fs/nfsd/versions control file. Note that to write this
13 control file, the nfsd service must be taken down. You can use rpc.nfsd
14 for this; see rpc.nfsd(8).
15
16 (Warning: older servers will interpret "+4.1" and "-4.1" as "+4" and
17 "-4", respectively. Therefore, code meant to work on both new and old
18 kernels must turn 4.1 on or off *before* turning support for version 4
19 on or off; rpc.nfsd does this correctly.)
20
21 The NFSv4 minorversion 1 (NFSv4.1) implementation in nfsd is based
22 on RFC 5661.
23
24 From the many new features in NFSv4.1 the current implementation
25 focuses on the mandatory-to-implement NFSv4.1 Sessions, providing
26 "exactly once" semantics and better control and throttling of the
27 resources allocated for each client.
28
29 The table below, taken from the NFSv4.1 document, lists
30 the operations that are mandatory to implement (REQ), optional
31 (OPT), and NFSv4.0 operations that are required not to implement (MNI)
32 in minor version 1. The first column indicates the operations that
33 are not supported yet by the linux server implementation.
34
35 The OPTIONAL features identified and their abbreviations are as follows:
36
37 - **pNFS** Parallel NFS
38 - **FDELG** File Delegations
39 - **DDELG** Directory Delegations
40
41 The following abbreviations indicate the linux server implementation status.
42
43 - **I** Implemented NFSv4.1 operations.
44 - **NS** Not Supported.
45 - **NS\*** Unimplemented optional feature.
46
47 Operations
48 ==========
49
50 +-----------------------+----------------------+---------------------+---------------------------+----------------+
51 | Implementation status | Operation | REQ,REC, OPT or NMI | Feature (REQ, REC or OPT) | Definition |
52 +=======================+======================+=====================+===========================+================+
53 | | ACCESS | REQ | | Section 18.1 |
54 +-----------------------+----------------------+---------------------+---------------------------+----------------+
55 | I | BACKCHANNEL_CTL | REQ | | Section 18.33 |
56 +-----------------------+----------------------+---------------------+---------------------------+----------------+
57 | I | BIND_CONN_TO_SESSION | REQ | | Section 18.34 |
58 +-----------------------+----------------------+---------------------+---------------------------+----------------+
59 | | CLOSE | REQ | | Section 18.2 |
60 +-----------------------+----------------------+---------------------+---------------------------+----------------+
61 | | COMMIT | REQ | | Section 18.3 |
62 +-----------------------+----------------------+---------------------+---------------------------+----------------+
63 | | CREATE | REQ | | Section 18.4 |
64 +-----------------------+----------------------+---------------------+---------------------------+----------------+
65 | I | CREATE_SESSION | REQ | | Section 18.36 |
66 +-----------------------+----------------------+---------------------+---------------------------+----------------+
67 | NS* | DELEGPURGE | OPT | FDELG (REQ) | Section 18.5 |
68 +-----------------------+----------------------+---------------------+---------------------------+----------------+
69 | | DELEGRETURN | OPT | FDELG, | Section 18.6 |
70 +-----------------------+----------------------+---------------------+---------------------------+----------------+
71 | | | | DDELG, pNFS | |
72 +-----------------------+----------------------+---------------------+---------------------------+----------------+
73 | | | | (REQ) | |
74 +-----------------------+----------------------+---------------------+---------------------------+----------------+
75 | I | DESTROY_CLIENTID | REQ | | Section 18.50 |
76 +-----------------------+----------------------+---------------------+---------------------------+----------------+
77 | I | DESTROY_SESSION | REQ | | Section 18.37 |
78 +-----------------------+----------------------+---------------------+---------------------------+----------------+
79 | I | EXCHANGE_ID | REQ | | Section 18.35 |
80 +-----------------------+----------------------+---------------------+---------------------------+----------------+
81 | I | FREE_STATEID | REQ | | Section 18.38 |
82 +-----------------------+----------------------+---------------------+---------------------------+----------------+
83 | | GETATTR | REQ | | Section 18.7 |
84 +-----------------------+----------------------+---------------------+---------------------------+----------------+
85 | I | GETDEVICEINFO | OPT | pNFS (REQ) | Section 18.40 |
86 +-----------------------+----------------------+---------------------+---------------------------+----------------+
87 | NS* | GETDEVICELIST | OPT | pNFS (OPT) | Section 18.41 |
88 +-----------------------+----------------------+---------------------+---------------------------+----------------+
89 | | GETFH | REQ | | Section 18.8 |
90 +-----------------------+----------------------+---------------------+---------------------------+----------------+
91 | NS* | GET_DIR_DELEGATION | OPT | DDELG (REQ) | Section 18.39 |
92 +-----------------------+----------------------+---------------------+---------------------------+----------------+
93 | I | LAYOUTCOMMIT | OPT | pNFS (REQ) | Section 18.42 |
94 +-----------------------+----------------------+---------------------+---------------------------+----------------+
95 | I | LAYOUTGET | OPT | pNFS (REQ) | Section 18.43 |
96 +-----------------------+----------------------+---------------------+---------------------------+----------------+
97 | I | LAYOUTRETURN | OPT | pNFS (REQ) | Section 18.44 |
98 +-----------------------+----------------------+---------------------+---------------------------+----------------+
99 | | LINK | OPT | | Section 18.9 |
100 +-----------------------+----------------------+---------------------+---------------------------+----------------+
101 | | LOCK | REQ | | Section 18.10 |
102 +-----------------------+----------------------+---------------------+---------------------------+----------------+
103 | | LOCKT | REQ | | Section 18.11 |
104 +-----------------------+----------------------+---------------------+---------------------------+----------------+
105 | | LOCKU | REQ | | Section 18.12 |
106 +-----------------------+----------------------+---------------------+---------------------------+----------------+
107 | | LOOKUP | REQ | | Section 18.13 |
108 +-----------------------+----------------------+---------------------+---------------------------+----------------+
109 | | LOOKUPP | REQ | | Section 18.14 |
110 +-----------------------+----------------------+---------------------+---------------------------+----------------+
111 | | NVERIFY | REQ | | Section 18.15 |
112 +-----------------------+----------------------+---------------------+---------------------------+----------------+
113 | | OPEN | REQ | | Section 18.16 |
114 +-----------------------+----------------------+---------------------+---------------------------+----------------+
115 | NS* | OPENATTR | OPT | | Section 18.17 |
116 +-----------------------+----------------------+---------------------+---------------------------+----------------+
117 | | OPEN_CONFIRM | MNI | | N/A |
118 +-----------------------+----------------------+---------------------+---------------------------+----------------+
119 | | OPEN_DOWNGRADE | REQ | | Section 18.18 |
120 +-----------------------+----------------------+---------------------+---------------------------+----------------+
121 | | PUTFH | REQ | | Section 18.19 |
122 +-----------------------+----------------------+---------------------+---------------------------+----------------+
123 | | PUTPUBFH | REQ | | Section 18.20 |
124 +-----------------------+----------------------+---------------------+---------------------------+----------------+
125 | | PUTROOTFH | REQ | | Section 18.21 |
126 +-----------------------+----------------------+---------------------+---------------------------+----------------+
127 | | READ | REQ | | Section 18.22 |
128 +-----------------------+----------------------+---------------------+---------------------------+----------------+
129 | | READDIR | REQ | | Section 18.23 |
130 +-----------------------+----------------------+---------------------+---------------------------+----------------+
131 | | READLINK | OPT | | Section 18.24 |
132 +-----------------------+----------------------+---------------------+---------------------------+----------------+
133 | | RECLAIM_COMPLETE | REQ | | Section 18.51 |
134 +-----------------------+----------------------+---------------------+---------------------------+----------------+
135 | | RELEASE_LOCKOWNER | MNI | | N/A |
136 +-----------------------+----------------------+---------------------+---------------------------+----------------+
137 | | REMOVE | REQ | | Section 18.25 |
138 +-----------------------+----------------------+---------------------+---------------------------+----------------+
139 | | RENAME | REQ | | Section 18.26 |
140 +-----------------------+----------------------+---------------------+---------------------------+----------------+
141 | | RENEW | MNI | | N/A |
142 +-----------------------+----------------------+---------------------+---------------------------+----------------+
143 | | RESTOREFH | REQ | | Section 18.27 |
144 +-----------------------+----------------------+---------------------+---------------------------+----------------+
145 | | SAVEFH | REQ | | Section 18.28 |
146 +-----------------------+----------------------+---------------------+---------------------------+----------------+
147 | | SECINFO | REQ | | Section 18.29 |
148 +-----------------------+----------------------+---------------------+---------------------------+----------------+
149 | I | SECINFO_NO_NAME | REC | pNFS files | Section 18.45, |
150 +-----------------------+----------------------+---------------------+---------------------------+----------------+
151 | | | | layout (REQ) | Section 13.12 |
152 +-----------------------+----------------------+---------------------+---------------------------+----------------+
153 | I | SEQUENCE | REQ | | Section 18.46 |
154 +-----------------------+----------------------+---------------------+---------------------------+----------------+
155 | | SETATTR | REQ | | Section 18.30 |
156 +-----------------------+----------------------+---------------------+---------------------------+----------------+
157 | | SETCLIENTID | MNI | | N/A |
158 +-----------------------+----------------------+---------------------+---------------------------+----------------+
159 | | SETCLIENTID_CONFIRM | MNI | | N/A |
160 +-----------------------+----------------------+---------------------+---------------------------+----------------+
161 | NS | SET_SSV | REQ | | Section 18.47 |
162 +-----------------------+----------------------+---------------------+---------------------------+----------------+
163 | I | TEST_STATEID | REQ | | Section 18.48 |
164 +-----------------------+----------------------+---------------------+---------------------------+----------------+
165 | | VERIFY | REQ | | Section 18.31 |
166 +-----------------------+----------------------+---------------------+---------------------------+----------------+
167 | NS* | WANT_DELEGATION | OPT | FDELG (OPT) | Section 18.49 |
168 +-----------------------+----------------------+---------------------+---------------------------+----------------+
169 | | WRITE | REQ | | Section 18.32 |
170 +-----------------------+----------------------+---------------------+---------------------------+----------------+
171
172
173 Callback Operations
174 ===================
175 +-----------------------+-------------------------+---------------------+---------------------------+---------------+
176 | Implementation status | Operation | REQ,REC, OPT or NMI | Feature (REQ, REC or OPT) | Definition |
177 +=======================+=========================+=====================+===========================+===============+
178 | | CB_GETATTR | OPT | FDELG (REQ) | Section 20.1 |
179 +-----------------------+-------------------------+---------------------+---------------------------+---------------+
180 | I | CB_LAYOUTRECALL | OPT | pNFS (REQ) | Section 20.3 |
181 +-----------------------+-------------------------+---------------------+---------------------------+---------------+
182 | NS* | CB_NOTIFY | OPT | DDELG (REQ) | Section 20.4 |
183 +-----------------------+-------------------------+---------------------+---------------------------+---------------+
184 | NS* | CB_NOTIFY_DEVICEID | OPT | pNFS (OPT) | Section 20.12 |
185 +-----------------------+-------------------------+---------------------+---------------------------+---------------+
186 | NS* | CB_NOTIFY_LOCK | OPT | | Section 20.11 |
187 +-----------------------+-------------------------+---------------------+---------------------------+---------------+
188 | NS* | CB_PUSH_DELEG | OPT | FDELG (OPT) | Section 20.5 |
189 +-----------------------+-------------------------+---------------------+---------------------------+---------------+
190 | | CB_RECALL | OPT | FDELG, | Section 20.2 |
191 +-----------------------+-------------------------+---------------------+---------------------------+---------------+
192 | | | | DDELG, pNFS | |
193 +-----------------------+-------------------------+---------------------+---------------------------+---------------+
194 | | | | (REQ) | |
195 +-----------------------+-------------------------+---------------------+---------------------------+---------------+
196 | NS* | CB_RECALL_ANY | OPT | FDELG, | Section 20.6 |
197 +-----------------------+-------------------------+---------------------+---------------------------+---------------+
198 | | | | DDELG, pNFS | |
199 +-----------------------+-------------------------+---------------------+---------------------------+---------------+
200 | | | | (REQ) | |
201 +-----------------------+-------------------------+---------------------+---------------------------+---------------+
202 | NS | CB_RECALL_SLOT | REQ | | Section 20.8 |
203 +-----------------------+-------------------------+---------------------+---------------------------+---------------+
204 | NS* | CB_RECALLABLE_OBJ_AVAIL | OPT | DDELG, pNFS | Section 20.7 |
205 +-----------------------+-------------------------+---------------------+---------------------------+---------------+
206 | | | | (REQ) | |
207 +-----------------------+-------------------------+---------------------+---------------------------+---------------+
208 | I | CB_SEQUENCE | OPT | FDELG, | Section 20.9 |
209 +-----------------------+-------------------------+---------------------+---------------------------+---------------+
210 | | | | DDELG, pNFS | |
211 +-----------------------+-------------------------+---------------------+---------------------------+---------------+
212 | | | | (REQ) | |
213 +-----------------------+-------------------------+---------------------+---------------------------+---------------+
214 | NS* | CB_WANTS_CANCELLED | OPT | FDELG, | Section 20.10 |
215 +-----------------------+-------------------------+---------------------+---------------------------+---------------+
216 | | | | DDELG, pNFS | |
217 +-----------------------+-------------------------+---------------------+---------------------------+---------------+
218 | | | | (REQ) | |
219 +-----------------------+-------------------------+---------------------+---------------------------+---------------+
220
221
222 Implementation notes:
223 =====================
224
225 SSV:
226 The spec claims this is mandatory, but we don't actually know of any
227 implementations, so we're ignoring it for now. The server returns
228 NFS4ERR_ENCR_ALG_UNSUPP on EXCHANGE_ID, which should be future-proof.
229
230 GSS on the backchannel:
231 Again, theoretically required but not widely implemented (in
232 particular, the current Linux client doesn't request it). We return
233 NFS4ERR_ENCR_ALG_UNSUPP on CREATE_SESSION.
234
235 DELEGPURGE:
236 mandatory only for servers that support CLAIM_DELEGATE_PREV and/or
237 CLAIM_DELEG_PREV_FH (which allows clients to keep delegations that
238 persist across client reboots). Thus we need not implement this for
239 now.
240
241 EXCHANGE_ID:
242 implementation ids are ignored
243
244 CREATE_SESSION:
245 backchannel attributes are ignored
246
247 SEQUENCE:
248 no support for dynamic slot table renegotiation (optional)
249
250 Nonstandard compound limitations:
251 No support for a sessions fore channel RPC compound that requires both a
252 ca_maxrequestsize request and a ca_maxresponsesize reply, so we may
253 fail to live up to the promise we made in CREATE_SESSION fore channel
254 negotiation.
255
256 See also http://wiki.linux-nfs.org/wiki/index.php/Server_4.0_and_4.1_issues.
257

3. 한국어 전문 번역

영어 원문의 문단 순서와 의미를 유지한 전체 번역입니다. 코드, 함수명, symbol과 URL은 원문 표기를 유지합니다.

NFSv4.1 server 활성화와 상태 표기

1-46

NFS server의 minor version 1 지원은 `/proc/fs/nfsd/versions` control file로 제어합니다. 읽은 문자열에 `+4.1`이 있으면 활성화, `-4.1`이 있으면 비활성화 상태입니다. 현재 NFSv4.1 server support는 기본으로 켜져 있습니다.

Run time에 끄려면 nfsd service를 먼저 내린 뒤 control file에 `-4.1`을 씁니다. Service 제어에는 `rpc.nfsd`를 사용할 수 있으며 자세한 사용법은 `rpc.nfsd(8)`을 참조합니다.

구형 server는 `+4.1`과 `-4.1`을 각각 `+4`와 `-4`로 해석합니다. 신·구 kernel 모두에서 동작해야 하는 code는 version 4 전체를 켜거나 끄기 전에 반드시 4.1을 먼저 켜거나 꺼야 합니다. `rpc.nfsd`는 이 순서를 올바르게 처리합니다.

Nfsd의 NFSv4.1 구현은 RFC 5661을 기반으로 합니다. 많은 새 기능 가운데 현재 구현은 필수인 NFSv4.1 Session에 초점을 맞추며, client별 resource 할당을 더 잘 제어하고 throttle하면서 `exactly once` semantics를 제공합니다.

이어지는 표는 operation을 필수 구현 `REQ`, 권장 `REC`, 선택 `OPT`, minor version 1에서 구현하지 않아야 하는 NFSv4.0 operation `MNI`로 분류합니다. 원문 표 header 일부에는 `NMI`가 쓰였지만 본문 정의와 row 값은 `MNI`이므로 표의 원문 표기를 그대로 보존합니다.

Optional feature 약어는 Parallel NFS인 `pNFS`, file delegation인 `FDELG`, directory delegation인 `DDELG`입니다. Linux server 구현 상태는 `I`가 구현됨, `NS`가 지원하지 않음, `NS*`가 구현하지 않은 optional feature를 뜻합니다. 빈 status cell은 원문에 명시적 marker가 없다는 의미로 유지하며 여기서 별도 상태를 추론하지 않습니다.

NFSv4.1 표기 범례
종류표기의미
Protocol`REQ`구현 필수
Protocol`REC`구현 권장
Protocol`OPT`선택 기능
Protocol`MNI`Minor version 1에서 구현 금지
Linux`I`구현됨
Linux`NS`지원하지 않음
Linux`NS*`구현하지 않은 optional feature

Protocol requirement와 Linux 구현 상태는 서로 다른 열입니다.

=============================
NFSv4.1 Server Implementation
=============================

Server support for minorversion 1 can be controlled using the
/proc/fs/nfsd/versions control file.  The string output returned
by reading this file will contain either "+4.1" or "-4.1"
correspondingly.

Currently, server support for minorversion 1 is enabled by default.
It can be disabled at run time by writing the string "-4.1" to
the /proc/fs/nfsd/versions control file.  Note that to write this
control file, the nfsd service must be taken down.  You can use rpc.nfsd
for this; see rpc.nfsd(8).

(Warning: older servers will interpret "+4.1" and "-4.1" as "+4" and
"-4", respectively.  Therefore, code meant to work on both new and old
kernels must turn 4.1 on or off *before* turning support for version 4
on or off; rpc.nfsd does this correctly.)

The NFSv4 minorversion 1 (NFSv4.1) implementation in nfsd is based
on RFC 5661.

From the many new features in NFSv4.1 the current implementation
focuses on the mandatory-to-implement NFSv4.1 Sessions, providing
"exactly once" semantics and better control and throttling of the
resources allocated for each client.

The table below, taken from the NFSv4.1 document, lists
the operations that are mandatory to implement (REQ), optional
(OPT), and NFSv4.0 operations that are required not to implement (MNI)
in minor version 1.  The first column indicates the operations that
are not supported yet by the linux server implementation.

The OPTIONAL features identified and their abbreviations are as follows:

- **pNFS**        Parallel NFS
- **FDELG**        File Delegations
- **DDELG**        Directory Delegations

The following abbreviations indicate the linux server implementation status.

- **I**        Implemented NFSv4.1 operations.
- **NS**        Not Supported.
- **NS\***        Unimplemented optional feature.

기본·session·device operation

47-86

첫 operation 묶음은 NFSv4 기본 file operation과 NFSv4.1 session lifecycle을 함께 포함합니다. `BACKCHANNEL_CTL`, `BIND_CONN_TO_SESSION`, `CREATE_SESSION`, `DESTROY_CLIENTID`, `DESTROY_SESSION`, `EXCHANGE_ID`, `FREE_STATEID`는 Linux server에서 `I`로 표시됩니다.

`DELEGPURGE`는 optional operation이지만 file delegation feature에는 필수이며 현재 `NS*`입니다. `DELEGRETURN`은 FDELG, DDELG, pNFS가 요구하는 optional operation입니다. pNFS가 요구하는 `GETDEVICEINFO`는 구현되어 있습니다.

아래 표는 원문의 status, requirement, feature, RFC 5661 definition section을 row별로 그대로 옮긴 것입니다. 빈 구현 상태는 원문 표의 빈 cell을 나타냅니다.

NFSv4.1 operation: ACCESS부터 GETDEVICEINFO
구현 상태Operation등급연관 feature정의
`ACCESS`REQSection 18.1
I`BACKCHANNEL_CTL`REQSection 18.33
I`BIND_CONN_TO_SESSION`REQSection 18.34
`CLOSE`REQSection 18.2
`COMMIT`REQSection 18.3
`CREATE`REQSection 18.4
I`CREATE_SESSION`REQSection 18.36
NS*`DELEGPURGE`OPTFDELG (REQ)Section 18.5
`DELEGRETURN`OPTFDELG, DDELG, pNFS (REQ)Section 18.6
I`DESTROY_CLIENTID`REQSection 18.50
I`DESTROY_SESSION`REQSection 18.37
I`EXCHANGE_ID`REQSection 18.35
I`FREE_STATEID`REQSection 18.38
`GETATTR`REQSection 18.7
I`GETDEVICEINFO`OPTpNFS (REQ)Section 18.40

기본 operation과 session·device 관리 operation입니다.

Operations
==========

+-----------------------+----------------------+---------------------+---------------------------+----------------+
| Implementation status | Operation            | REQ,REC, OPT or NMI | Feature (REQ, REC or OPT) | Definition     |
+=======================+======================+=====================+===========================+================+
|                       | ACCESS               | REQ                 |                           | Section 18.1   |
+-----------------------+----------------------+---------------------+---------------------------+----------------+
| I                     | BACKCHANNEL_CTL      | REQ                 |                           | Section 18.33  |
+-----------------------+----------------------+---------------------+---------------------------+----------------+
| I                     | BIND_CONN_TO_SESSION | REQ                 |                           | Section 18.34  |
+-----------------------+----------------------+---------------------+---------------------------+----------------+
|                       | CLOSE                | REQ                 |                           | Section 18.2   |
+-----------------------+----------------------+---------------------+---------------------------+----------------+
|                       | COMMIT               | REQ                 |                           | Section 18.3   |
+-----------------------+----------------------+---------------------+---------------------------+----------------+
|                       | CREATE               | REQ                 |                           | Section 18.4   |
+-----------------------+----------------------+---------------------+---------------------------+----------------+
| I                     | CREATE_SESSION       | REQ                 |                           | Section 18.36  |
+-----------------------+----------------------+---------------------+---------------------------+----------------+
| NS*                   | DELEGPURGE           | OPT                 | FDELG (REQ)               | Section 18.5   |
+-----------------------+----------------------+---------------------+---------------------------+----------------+
|                       | DELEGRETURN          | OPT                 | FDELG,                    | Section 18.6   |
+-----------------------+----------------------+---------------------+---------------------------+----------------+
|                       |                      |                     | DDELG, pNFS               |                |
+-----------------------+----------------------+---------------------+---------------------------+----------------+
|                       |                      |                     | (REQ)                     |                |
+-----------------------+----------------------+---------------------+---------------------------+----------------+
| I                     | DESTROY_CLIENTID     | REQ                 |                           | Section 18.50  |
+-----------------------+----------------------+---------------------+---------------------------+----------------+
| I                     | DESTROY_SESSION      | REQ                 |                           | Section 18.37  |
+-----------------------+----------------------+---------------------+---------------------------+----------------+
| I                     | EXCHANGE_ID          | REQ                 |                           | Section 18.35  |
+-----------------------+----------------------+---------------------+---------------------------+----------------+
| I                     | FREE_STATEID         | REQ                 |                           | Section 18.38  |
+-----------------------+----------------------+---------------------+---------------------------+----------------+
|                       | GETATTR              | REQ                 |                           | Section 18.7   |
+-----------------------+----------------------+---------------------+---------------------------+----------------+
| I                     | GETDEVICEINFO        | OPT                 | pNFS (REQ)                | Section 18.40  |
+-----------------------+----------------------+---------------------+---------------------------+----------------+

Layout, lock, namespace와 read operation

87-132

이 묶음은 pNFS layout discovery와 commit/return, directory delegation, locking, pathname traversal, open, filehandle 선택, read 계열을 포함합니다.

`GETDEVICELIST`와 `GET_DIR_DELEGATION`은 optional feature로 현재 `NS*`입니다. 반면 pNFS에 필수인 `LAYOUTCOMMIT`, `LAYOUTGET`, `LAYOUTRETURN`은 모두 `I`로 구현되어 있습니다. `OPENATTR`도 구현하지 않은 optional operation입니다.

NFSv4.0의 `OPEN_CONFIRM`은 NFSv4.1에서 `MNI`입니다. 나머지 `LOCK`, `LOOKUP`, `OPEN`, `PUTFH`, `READ`, `READDIR` 등은 session 안에서 사용하는 기존 필수 operation이며 status cell은 원문처럼 비워 둡니다.

NFSv4.1 operation: GETDEVICELIST부터 READLINK
구현 상태Operation등급연관 feature정의
NS*`GETDEVICELIST`OPTpNFS (OPT)Section 18.41
`GETFH`REQSection 18.8
NS*`GET_DIR_DELEGATION`OPTDDELG (REQ)Section 18.39
I`LAYOUTCOMMIT`OPTpNFS (REQ)Section 18.42
I`LAYOUTGET`OPTpNFS (REQ)Section 18.43
I`LAYOUTRETURN`OPTpNFS (REQ)Section 18.44
`LINK`OPTSection 18.9
`LOCK`REQSection 18.10
`LOCKT`REQSection 18.11
`LOCKU`REQSection 18.12
`LOOKUP`REQSection 18.13
`LOOKUPP`REQSection 18.14
`NVERIFY`REQSection 18.15
`OPEN`REQSection 18.16
NS*`OPENATTR`OPTSection 18.17
`OPEN_CONFIRM`MNIN/A
`OPEN_DOWNGRADE`REQSection 18.18
`PUTFH`REQSection 18.19
`PUTPUBFH`REQSection 18.20
`PUTROOTFH`REQSection 18.21
`READ`REQSection 18.22
`READDIR`REQSection 18.23
`READLINK`OPTSection 18.24

Layout, lock, open, filehandle와 read operation입니다.

| NS*                   | GETDEVICELIST        | OPT                 | pNFS (OPT)                | Section 18.41  |
+-----------------------+----------------------+---------------------+---------------------------+----------------+
|                       | GETFH                | REQ                 |                           | Section 18.8   |
+-----------------------+----------------------+---------------------+---------------------------+----------------+
| NS*                   | GET_DIR_DELEGATION   | OPT                 | DDELG (REQ)               | Section 18.39  |
+-----------------------+----------------------+---------------------+---------------------------+----------------+
| I                     | LAYOUTCOMMIT         | OPT                 | pNFS (REQ)                | Section 18.42  |
+-----------------------+----------------------+---------------------+---------------------------+----------------+
| I                     | LAYOUTGET            | OPT                 | pNFS (REQ)                | Section 18.43  |
+-----------------------+----------------------+---------------------+---------------------------+----------------+
| I                     | LAYOUTRETURN         | OPT                 | pNFS (REQ)                | Section 18.44  |
+-----------------------+----------------------+---------------------+---------------------------+----------------+
|                       | LINK                 | OPT                 |                           | Section 18.9   |
+-----------------------+----------------------+---------------------+---------------------------+----------------+
|                       | LOCK                 | REQ                 |                           | Section 18.10  |
+-----------------------+----------------------+---------------------+---------------------------+----------------+
|                       | LOCKT                | REQ                 |                           | Section 18.11  |
+-----------------------+----------------------+---------------------+---------------------------+----------------+
|                       | LOCKU                | REQ                 |                           | Section 18.12  |
+-----------------------+----------------------+---------------------+---------------------------+----------------+
|                       | LOOKUP               | REQ                 |                           | Section 18.13  |
+-----------------------+----------------------+---------------------+---------------------------+----------------+
|                       | LOOKUPP              | REQ                 |                           | Section 18.14  |
+-----------------------+----------------------+---------------------+---------------------------+----------------+
|                       | NVERIFY              | REQ                 |                           | Section 18.15  |
+-----------------------+----------------------+---------------------+---------------------------+----------------+
|                       | OPEN                 | REQ                 |                           | Section 18.16  |
+-----------------------+----------------------+---------------------+---------------------------+----------------+
| NS*                   | OPENATTR             | OPT                 |                           | Section 18.17  |
+-----------------------+----------------------+---------------------+---------------------------+----------------+
|                       | OPEN_CONFIRM         | MNI                 |                           | N/A            |
+-----------------------+----------------------+---------------------+---------------------------+----------------+
|                       | OPEN_DOWNGRADE       | REQ                 |                           | Section 18.18  |
+-----------------------+----------------------+---------------------+---------------------------+----------------+
|                       | PUTFH                | REQ                 |                           | Section 18.19  |
+-----------------------+----------------------+---------------------+---------------------------+----------------+
|                       | PUTPUBFH             | REQ                 |                           | Section 18.20  |
+-----------------------+----------------------+---------------------+---------------------------+----------------+
|                       | PUTROOTFH            | REQ                 |                           | Section 18.21  |
+-----------------------+----------------------+---------------------+---------------------------+----------------+
|                       | READ                 | REQ                 |                           | Section 18.22  |
+-----------------------+----------------------+---------------------+---------------------------+----------------+
|                       | READDIR              | REQ                 |                           | Section 18.23  |
+-----------------------+----------------------+---------------------+---------------------------+----------------+
|                       | READLINK             | OPT                 |                           | Section 18.24  |
+-----------------------+----------------------+---------------------+---------------------------+----------------+

Recovery, security, state와 write operation

133-170

마지막 fore-channel 묶음은 recovery 완료, namespace 변경, saved filehandle, security 정보, session sequencing, client/state 관리와 write를 다룹니다.

NFSv4.1에서 `RELEASE_LOCKOWNER`, `RENEW`, `SETCLIENTID`, `SETCLIENTID_CONFIRM`은 `MNI`입니다. Session과 `SEQUENCE`가 NFSv4.0의 client setup·renew 방식을 대체하는 protocol 구조를 반영합니다.

pNFS file layout에 권장되는 `SECINFO_NO_NAME`과 필수 `SEQUENCE`, `TEST_STATEID`는 구현되어 있습니다. 필수 `SET_SSV`는 `NS`, optional file-delegation operation인 `WANT_DELEGATION`은 `NS*`입니다.

NFSv4.1 operation: RECLAIM_COMPLETE부터 WRITE
구현 상태Operation등급연관 feature정의
`RECLAIM_COMPLETE`REQSection 18.51
`RELEASE_LOCKOWNER`MNIN/A
`REMOVE`REQSection 18.25
`RENAME`REQSection 18.26
`RENEW`MNIN/A
`RESTOREFH`REQSection 18.27
`SAVEFH`REQSection 18.28
`SECINFO`REQSection 18.29
I`SECINFO_NO_NAME`RECpNFS files layout (REQ)Sections 18.45, 13.12
I`SEQUENCE`REQSection 18.46
`SETATTR`REQSection 18.30
`SETCLIENTID`MNIN/A
`SETCLIENTID_CONFIRM`MNIN/A
NS`SET_SSV`REQSection 18.47
I`TEST_STATEID`REQSection 18.48
`VERIFY`REQSection 18.31
NS*`WANT_DELEGATION`OPTFDELG (OPT)Section 18.49
`WRITE`REQSection 18.32

Recovery, security, sequencing과 state 관리 operation입니다.

|                       | RECLAIM_COMPLETE     | REQ                 |                           | Section 18.51  |
+-----------------------+----------------------+---------------------+---------------------------+----------------+
|                       | RELEASE_LOCKOWNER    | MNI                 |                           | N/A            |
+-----------------------+----------------------+---------------------+---------------------------+----------------+
|                       | REMOVE               | REQ                 |                           | Section 18.25  |
+-----------------------+----------------------+---------------------+---------------------------+----------------+
|                       | RENAME               | REQ                 |                           | Section 18.26  |
+-----------------------+----------------------+---------------------+---------------------------+----------------+
|                       | RENEW                | MNI                 |                           | N/A            |
+-----------------------+----------------------+---------------------+---------------------------+----------------+
|                       | RESTOREFH            | REQ                 |                           | Section 18.27  |
+-----------------------+----------------------+---------------------+---------------------------+----------------+
|                       | SAVEFH               | REQ                 |                           | Section 18.28  |
+-----------------------+----------------------+---------------------+---------------------------+----------------+
|                       | SECINFO              | REQ                 |                           | Section 18.29  |
+-----------------------+----------------------+---------------------+---------------------------+----------------+
| I                     | SECINFO_NO_NAME      | REC                 | pNFS files                | Section 18.45, |
+-----------------------+----------------------+---------------------+---------------------------+----------------+
|                       |                      |                     | layout (REQ)              | Section 13.12  |
+-----------------------+----------------------+---------------------+---------------------------+----------------+
| I                     | SEQUENCE             | REQ                 |                           | Section 18.46  |
+-----------------------+----------------------+---------------------+---------------------------+----------------+
|                       | SETATTR              | REQ                 |                           | Section 18.30  |
+-----------------------+----------------------+---------------------+---------------------------+----------------+
|                       | SETCLIENTID          | MNI                 |                           | N/A            |
+-----------------------+----------------------+---------------------+---------------------------+----------------+
|                       | SETCLIENTID_CONFIRM  | MNI                 |                           | N/A            |
+-----------------------+----------------------+---------------------+---------------------------+----------------+
| NS                    | SET_SSV              | REQ                 |                           | Section 18.47  |
+-----------------------+----------------------+---------------------+---------------------------+----------------+
| I                     | TEST_STATEID         | REQ                 |                           | Section 18.48  |
+-----------------------+----------------------+---------------------+---------------------------+----------------+
|                       | VERIFY               | REQ                 |                           | Section 18.31  |
+-----------------------+----------------------+---------------------+---------------------------+----------------+
| NS*                   | WANT_DELEGATION      | OPT                 | FDELG (OPT)               | Section 18.49  |
+-----------------------+----------------------+---------------------+---------------------------+----------------+
|                       | WRITE                | REQ                 |                           | Section 18.32  |
+-----------------------+----------------------+---------------------+---------------------------+----------------+

Backchannel callback operation

171-219

Callback operation은 server가 session backchannel을 통해 client에 보내는 protocol operation입니다. File/directory delegation 회수와 notification, pNFS layout recall, slot과 sequence 관리에 사용됩니다.

Linux server는 pNFS에 필수인 `CB_LAYOUTRECALL`과 delegation·pNFS feature에 필요한 `CB_SEQUENCE`를 `I`로 구현합니다. 필수 `CB_RECALL_SLOT`은 `NS`이며, `CB_NOTIFY`, `CB_NOTIFY_DEVICEID`, `CB_NOTIFY_LOCK`, `CB_PUSH_DELEG`, `CB_RECALL_ANY`, `CB_RECALLABLE_OBJ_AVAIL`, `CB_WANTS_CANCELLED`은 구현되지 않은 optional feature로 `NS*`입니다.

`CB_GETATTR`와 `CB_RECALL`의 status cell은 원문에서 비어 있습니다. 아래 표는 줄이 나뉜 feature 조건을 한 cell에 합쳤지만 operation, requirement, feature requirement와 section 값은 바꾸지 않았습니다.

NFSv4.1 callback operation
구현 상태Operation등급연관 feature정의
`CB_GETATTR`OPTFDELG (REQ)Section 20.1
I`CB_LAYOUTRECALL`OPTpNFS (REQ)Section 20.3
NS*`CB_NOTIFY`OPTDDELG (REQ)Section 20.4
NS*`CB_NOTIFY_DEVICEID`OPTpNFS (OPT)Section 20.12
NS*`CB_NOTIFY_LOCK`OPTSection 20.11
NS*`CB_PUSH_DELEG`OPTFDELG (OPT)Section 20.5
`CB_RECALL`OPTFDELG, DDELG, pNFS (REQ)Section 20.2
NS*`CB_RECALL_ANY`OPTFDELG, DDELG, pNFS (REQ)Section 20.6
NS`CB_RECALL_SLOT`REQSection 20.8
NS*`CB_RECALLABLE_OBJ_AVAIL`OPTDDELG, pNFS (REQ)Section 20.7
I`CB_SEQUENCE`OPTFDELG, DDELG, pNFS (REQ)Section 20.9
NS*`CB_WANTS_CANCELLED`OPTFDELG, DDELG, pNFS (REQ)Section 20.10

Session backchannel에서 사용되는 callback의 구현 상태입니다.



Callback Operations
===================
+-----------------------+-------------------------+---------------------+---------------------------+---------------+
| Implementation status | Operation               | REQ,REC, OPT or NMI | Feature (REQ, REC or OPT) | Definition    |
+=======================+=========================+=====================+===========================+===============+
|                       | CB_GETATTR              | OPT                 | FDELG (REQ)               | Section 20.1  |
+-----------------------+-------------------------+---------------------+---------------------------+---------------+
| I                     | CB_LAYOUTRECALL         | OPT                 | pNFS (REQ)                | Section 20.3  |
+-----------------------+-------------------------+---------------------+---------------------------+---------------+
| NS*                   | CB_NOTIFY               | OPT                 | DDELG (REQ)               | Section 20.4  |
+-----------------------+-------------------------+---------------------+---------------------------+---------------+
| NS*                   | CB_NOTIFY_DEVICEID      | OPT                 | pNFS (OPT)                | Section 20.12 |
+-----------------------+-------------------------+---------------------+---------------------------+---------------+
| NS*                   | CB_NOTIFY_LOCK          | OPT                 |                           | Section 20.11 |
+-----------------------+-------------------------+---------------------+---------------------------+---------------+
| NS*                   | CB_PUSH_DELEG           | OPT                 | FDELG (OPT)               | Section 20.5  |
+-----------------------+-------------------------+---------------------+---------------------------+---------------+
|                       | CB_RECALL               | OPT                 | FDELG,                    | Section 20.2  |
+-----------------------+-------------------------+---------------------+---------------------------+---------------+
|                       |                         |                     | DDELG, pNFS               |               |
+-----------------------+-------------------------+---------------------+---------------------------+---------------+
|                       |                         |                     | (REQ)                     |               |
+-----------------------+-------------------------+---------------------+---------------------------+---------------+
| NS*                   | CB_RECALL_ANY           | OPT                 | FDELG,                    | Section 20.6  |
+-----------------------+-------------------------+---------------------+---------------------------+---------------+
|                       |                         |                     | DDELG, pNFS               |               |
+-----------------------+-------------------------+---------------------+---------------------------+---------------+
|                       |                         |                     | (REQ)                     |               |
+-----------------------+-------------------------+---------------------+---------------------------+---------------+
| NS                    | CB_RECALL_SLOT          | REQ                 |                           | Section 20.8  |
+-----------------------+-------------------------+---------------------+---------------------------+---------------+
| NS*                   | CB_RECALLABLE_OBJ_AVAIL | OPT                 | DDELG, pNFS               | Section 20.7  |
+-----------------------+-------------------------+---------------------+---------------------------+---------------+
|                       |                         |                     | (REQ)                     |               |
+-----------------------+-------------------------+---------------------+---------------------------+---------------+
| I                     | CB_SEQUENCE             | OPT                 | FDELG,                    | Section 20.9  |
+-----------------------+-------------------------+---------------------+---------------------------+---------------+
|                       |                         |                     | DDELG, pNFS               |               |
+-----------------------+-------------------------+---------------------+---------------------------+---------------+
|                       |                         |                     | (REQ)                     |               |
+-----------------------+-------------------------+---------------------+---------------------------+---------------+
| NS*                   | CB_WANTS_CANCELLED      | OPT                 | FDELG,                    | Section 20.10 |
+-----------------------+-------------------------+---------------------+---------------------------+---------------+
|                       |                         |                     | DDELG, pNFS               |               |
+-----------------------+-------------------------+---------------------+---------------------------+---------------+
|                       |                         |                     | (REQ)                     |               |
+-----------------------+-------------------------+---------------------+---------------------------+---------------+

구현상의 예외와 제한

220-256

`SSV`는 specification상 mandatory이지만 알려진 실제 구현이 없어 현재 무시합니다. Server는 `EXCHANGE_ID`에서 `NFS4ERR_ENCR_ALG_UNSUPP`를 반환하며, 문서는 이 선택이 future-proof해야 한다고 설명합니다.

Backchannel의 GSS도 이론적으로 필수지만 널리 구현되지 않았고 현재 Linux client도 요청하지 않습니다. Server는 `CREATE_SESSION`에서 `NFS4ERR_ENCR_ALG_UNSUPP`를 반환합니다.

`DELEGPURGE`는 client reboot를 지나 delegation을 유지하는 `CLAIM_DELEGATE_PREV` 또는 `CLAIM_DELEG_PREV_FH`를 지원하는 server에만 필수입니다. 현재 이 claim을 지원할 필요가 없으므로 `DELEGPURGE`도 구현하지 않아도 됩니다.

`EXCHANGE_ID`에서는 implementation ID를 무시하고, `CREATE_SESSION`에서는 backchannel attribute를 무시합니다. `SEQUENCE`는 optional인 dynamic slot-table renegotiation을 지원하지 않습니다.

비표준 compound 제한으로, session fore channel RPC compound 하나가 `ca_maxrequestsize` 크기의 request와 `ca_maxresponsesize` 크기의 reply를 동시에 요구하는 경우를 지원하지 않습니다. 따라서 `CREATE_SESSION` fore-channel negotiation에서 server가 약속한 최대치를 완전히 지키지 못할 수 있습니다.

추가 NFSv4.0·4.1 server issue는 원문의 linux-nfs wiki URL을 참조합니다.

NFSv4.1 구현 제한
영역현재 동작
SSV`EXCHANGE_ID`에서 `NFS4ERR_ENCR_ALG_UNSUPP`
Backchannel GSS`CREATE_SESSION`에서 같은 error
DELEGPURGEPersistent delegation claim 미지원으로 생략
EXCHANGE_IDImplementation ID 무시
CREATE_SESSIONBackchannel attribute 무시
SEQUENCEDynamic slot-table renegotiation 미지원
Fore-channel compoundMax request와 max response 동시 요구 미지원

Specification 요구와 현재 Linux server 선택을 연결합니다.



Implementation notes:
=====================

SSV:
  The spec claims this is mandatory, but we don't actually know of any
  implementations, so we're ignoring it for now.  The server returns
  NFS4ERR_ENCR_ALG_UNSUPP on EXCHANGE_ID, which should be future-proof.

GSS on the backchannel:
  Again, theoretically required but not widely implemented (in
  particular, the current Linux client doesn't request it).  We return
  NFS4ERR_ENCR_ALG_UNSUPP on CREATE_SESSION.

DELEGPURGE:
  mandatory only for servers that support CLAIM_DELEGATE_PREV and/or
  CLAIM_DELEG_PREV_FH (which allows clients to keep delegations that
  persist across client reboots).  Thus we need not implement this for
  now.

EXCHANGE_ID:
  implementation ids are ignored

CREATE_SESSION:
  backchannel attributes are ignored

SEQUENCE:
  no support for dynamic slot table renegotiation (optional)

Nonstandard compound limitations:
  No support for a sessions fore channel RPC compound that requires both a
  ca_maxrequestsize request and a ca_maxresponsesize reply, so we may
  fail to live up to the promise we made in CREATE_SESSION fore channel
  negotiation.

See also http://wiki.linux-nfs.org/wiki/index.php/Server_4.0_and_4.1_issues.