Index: Makefile =================================================================== RCS file: /cvs/stdk/NFSv41/Makefile,v retrieving revision 1.114 diff -u -r1.114 Makefile --- Makefile 1 May 2008 18:18:31 -0000 1.114 +++ Makefile 6 May 2008 03:43:43 -0000 @@ -6,8 +6,8 @@ YEAR=`date +%Y` MONTH=`date +%b` -PREVVERS=21 -VERS=22 +PREVVERS=22 +VERS=23 VPATH = dotx.d autogen/%.xml : %.x Index: nfsv41_back_references.xml =================================================================== RCS file: /cvs/stdk/NFSv41/nfsv41_back_references.xml,v retrieving revision 1.18 diff -u -r1.18 nfsv41_back_references.xml --- nfsv41_back_references.xml 20 Apr 2008 16:28:33 -0000 1.18 +++ nfsv41_back_references.xml 6 May 2008 03:43:43 -0000 @@ -762,7 +762,7 @@ + target='ftp://www.ietf.org/internet-drafts/draft-ietf-nfsv4-pnfs-block-08.txt'> pNFS Block/Volume Layout @@ -774,7 +774,7 @@ EMC Corporation - + @@ -1119,7 +1119,7 @@ + target='ftp://www.ietf.org/internet-drafts/draft-nfsv4-pnfs-obj-07.txt'> Object-based pNFS Operations @@ -1131,7 +1131,7 @@ "Panasas Inc." - + Index: nfsv41_middle_cbproc_compound.xml =================================================================== RCS file: /cvs/stdk/NFSv41/nfsv41_middle_cbproc_compound.xml,v retrieving revision 1.14 diff -u -r1.14 nfsv41_middle_cbproc_compound.xml --- nfsv41_middle_cbproc_compound.xml 15 Dec 2007 05:44:52 -0000 1.14 +++ nfsv41_middle_cbproc_compound.xml 6 May 2008 03:43:43 -0000 @@ -23,10 +23,10 @@ operations use the CB_COMPOUND procedure as a wrapper. - In the processing of the CB_COMPOUND procedure, the client may find + During the processing of the CB_COMPOUND procedure, the client may find that it does not have the available resources to execute any or all of - the operations within the CB_COMPOUND sequence. This is - discussed in . + the operations within the CB_COMPOUND sequence. + Refer to for details. The minorversion field of the arguments MUST be the same as the @@ -41,9 +41,8 @@ as is being returned for the operation that failed. - For a description of the "tag" field, see - where the corresponding - forward channel procedure is described. + The "tag" field is handled the same way as that of COMPOUND + procedure (see ). Illegal operation codes are handled in the same way as they are Index: nfsv41_middle_cbproc_null.xml =================================================================== RCS file: /cvs/stdk/NFSv41/nfsv41_middle_cbproc_null.xml,v retrieving revision 1.4 diff -u -r1.4 nfsv41_middle_cbproc_null.xml --- nfsv41_middle_cbproc_null.xml 8 Nov 2007 04:15:21 -0000 1.4 +++ nfsv41_middle_cbproc_null.xml 6 May 2008 03:43:43 -0000 @@ -21,10 +21,10 @@
- Standard NULL procedure. Void argument, void response. Even though + CB_NULL is the standard ONC RPC NULL procedure, with the standard void argument and void response. Even though there is no direct functionality associated with this procedure, the server will use CB_NULL to confirm the existence of a path for RPCs - from server to client. + from the server to client.
Index: nfsv41_middle_core_infrastructure.xml =================================================================== RCS file: /cvs/stdk/NFSv41/nfsv41_middle_core_infrastructure.xml,v retrieving revision 1.90 diff -u -r1.90 nfsv41_middle_core_infrastructure.xml --- nfsv41_middle_core_infrastructure.xml 20 Apr 2008 16:28:33 -0000 1.90 +++ nfsv41_middle_core_infrastructure.xml 6 May 2008 03:43:44 -0000 @@ -1789,7 +1789,7 @@ Of course, even if the eir_server_owner.so_minor_id fields do match, the client is free to employ client - ID trunking instead of sessiond trunking. + ID trunking instead of session trunking. @@ -2134,7 +2134,7 @@ - The slot id, sequence id, and sessionid therefore take over the traditional role + The slot id, sequence id, and session id therefore take over the traditional role of the XID and source network address in the replier's reply cache implementation. This approach is considerably @@ -2168,7 +2168,7 @@ The SEQUENCE or CB_SEQUENCE operation may generate an error. - If so, the embedded slot id, sequence id, and sessionid (if + If so, the embedded slot id, sequence id, and session id (if present) in the request will not be in the reply, and the requester has only the XID to match the reply to the request. @@ -2177,16 +2177,16 @@ Given that well formulated XIDs continue to be required, this begs the question why SEQUENCE and CB_SEQUENCE replies - have a sessionid, slot id and sequence id? Having the sessionid + have a session id, slot id and sequence id? Having the session id in the reply means the requester does not have to use the XID to lookup - the sessionid, which would be necessary if the connection were + the session id, which would be necessary if the connection were associated with multiple sessions. Having the slot id and sequence id in the reply means requester does not have to use the XID to lookup the slot id and sequence id. Furhermore, since the XID is only 32 bits, it is too small to guarantee the re-association of a reply with its request (); having - sessionid, slot id, and sequence id in the reply allows the + session id, slot id, and sequence id in the reply allows the client to validate that the reply in fact belongs to the matched request. @@ -2260,7 +2260,7 @@ the server can both retire the slot and return NFS4ERR_BADSLOT (however the server MUST NOT do one and not the other). (The reason it is safe to retire the slot - is because that by using the next sequenceid, the client + is because that by using the next sequence id, the client is indicating it has received the previous reply for the slot.) Once the replier has forcibly lowered the enforced @@ -2288,8 +2288,8 @@ has seen a reply containing the new granted highest_slotid. The replier can infer that requester as seen such a reply when it receives a new request with the same - slotid as the request replied to and the next higher - sequenceid. + slot id as the request replied to and the next higher + sequence id. @@ -2299,16 +2299,16 @@ When a SEQUENCE or CB_SEQUENCE operation is successfully executed, its reply MUST always be - cached. Specifically, sessionid, sequenceid, - and slotid MUST be cached in the reply cache. + cached. Specifically, session id, sequence id, + and slot id MUST be cached in the reply cache. The reply from SEQUENCE also includes the highest - slotid, target highest slotid, and status flags. Instead + slot id, target highest slot id, and status flags. Instead of caching these values, the server MAY re-compute the values from the current state of the fore channel, session and/or client ID as appropriate. Similarly, the reply from - CB_SEQUENCE includes a highest slotid and target - highest slotid. The client + CB_SEQUENCE includes a highest slot id and target + highest slot id. The client MAY re-compute the values from the current state of the session as appropriate. @@ -2316,14 +2316,14 @@ - Regardless of whether a replier is re-computing highest slotid, - target slotid, and status on replies to retries or not, the requester + Regardless of whether a replier is re-computing highest slot id, + target slot id, and status on replies to retries or not, the requester MUST NOT assume the values are being re-computed whenever it receives a reply after a retry is sent, since it has no way of knowing whether the reply it has received was sent by the server in response to the retry, or is a delayed response to the original request. Therefore, it may be the case that - highest slotid, target slotid, or status bits may reflect + highest slot id, target slot id, or status bits may reflect the state of affairs when the request was first executed. Although acting based on such delayed information is valid, it may cause the receiver to do unneeded work. Requesters @@ -2485,7 +2485,7 @@ The presence of a session between client and server alleviates this issue. When a session is in place, each client request is uniquely identified by its { - sessionid, slot id, sequence id } triple. By the rules under which + session id, slot id, sequence id } triple. By the rules under which slot entries (reply cache entries) are retired, the server has knowledge whether the client has "seen" each of the server's replies. The server @@ -2497,10 +2497,10 @@ For each client operation which might result in some sort of server callback, the server SHOULD "remember" - the { sessionid, slot id, sequence id } triple of the client request + the { session id, slot id, sequence id } triple of the client request until the slot id retirement rules allow the server to determine that the client has, in fact, seen the - server's reply. Until the time the { sessionid, slot id, + server's reply. Until the time the { session id, slot id, sequence id } request triple can be retired, any recalls of the associated object MUST carry an array of these referring identifiers (in the CB_SEQUENCE operation's @@ -2511,15 +2511,15 @@ The CB_SEQUENCE operation which begins each server - callback carries a list of "referring" { sessionid, slot id, + callback carries a list of "referring" { session id, slot id, sequence id } triples. If the client finds the request - corresponding to the referring sessionid, slot id and sequence id + corresponding to the referring session id, slot id and sequence id to be currently outstanding (i.e. the server's reply has not been seen by the client), it can determine that the callback has raced the reply, and act accordingly. If the client does not find the request corresponding the referring triple to be outstanding (including - the case of a sessionid referring to a destroyed session), + the case of a session id referring to a destroyed session), then there is no race with respect to this triple. The server SHOULD limit the referring triples to requests that refer to just those that apply to the objects @@ -2673,7 +2673,7 @@ - The sessionid. + The session id. The slot table including the sequence id and cached reply for @@ -2689,7 +2689,7 @@ the server will never see any NFSv4.1-level protocol manifestation of a client restart. If the replier is a server, with just the - slot table and sessionid persisting, + slot table and session id persisting, any requests the client retries after the server restart will return the results that are cached in reply cache. and any new requests (i.e. the sequence id is one (1) greater than the @@ -2707,7 +2707,7 @@ as the - The client ID's sequenceid that is used for creating + The client ID's sequence id that is used for creating sessions (see and . This is a prerequisite to let the client create more sessions. @@ -2996,7 +2996,7 @@ As described to this point in the specification, the state model of NFSv4.1 is vulnerable to an attacker that sends a - SEQUENCE operation with a forged sessionid and with a slot id that + SEQUENCE operation with a forged session id and with a slot id that it expects the legitimate client to use next. When the legitimate client uses the slot id with the same sequence number, the server returns the attacker's result from the reply cache which @@ -3743,7 +3743,7 @@ is not necessary to retry requests over a connection with the same source network address or the same destination network address as the lost connection. As - long as the sessionid, slot id, and sequence id in the + long as the session id, slot id, and sequence id in the retry match that of the original request, the server will recognize the request as a retry if it executed the request prior to disconnect. @@ -3793,7 +3793,7 @@ Loss of reply cache is equivalent to loss of session. The replier indicates loss of session to the requester by returning NFS4ERR_BADSESSION on the next operation - that uses the sessionid that refers to the lost + that uses the session id that refers to the lost session. @@ -3802,7 +3802,7 @@ that the session has not been lost. It reconnects, and if it specified connection association enforcement when the session was created, it - invokes BIND_CONN_TO_SESSION using the sessionid. Otherwise, + invokes BIND_CONN_TO_SESSION using the session id. Otherwise, it invokes SEQUENCE. If BIND_CONN_TO_SESSION or SEQUENCE returns NFS4ERR_BADSESSION, the client knows the session was lost. If the connection survives @@ -3879,7 +3879,7 @@ is not necessary to retry requests over a connection with the same source network address or the same destination network address as the lost connection. As long as - the sessionid, slot id, and sequence id in the retry + the session id, slot id, and sequence id in the retry match that of the original request, the callback target will recognize the request as a retry even if it did see the request prior to disconnect. Index: nfsv41_middle_errors.xml =================================================================== RCS file: /cvs/stdk/NFSv41/nfsv41_middle_errors.xml,v retrieving revision 1.64 diff -u -r1.64 nfsv41_middle_errors.xml --- nfsv41_middle_errors.xml 20 Apr 2008 16:28:33 -0000 1.64 +++ nfsv41_middle_errors.xml 6 May 2008 03:43:45 -0000 @@ -1243,7 +1243,7 @@
- A sessionid was specified which does not exist. + A session id was specified which does not exist.
In NFSv4.1, the - sessionid in the SEQUENCE operation implies the + session id in the SEQUENCE operation implies the client ID, which in turn might be used by the server to map the stateid to the right client/server pair. However, when a data server is presented with a READ or WRITE operation with a stateid, because the stateid is associated with - client ID on a metadata server, and because the sessionid in + client ID on a metadata server, and because the session id in the preceding SEQUENCE operation is tied to the client ID of the data server, the data server has no obvious way to determine the metadata server from the Index: nfsv41_middle_filelocking.xml =================================================================== RCS file: /cvs/stdk/NFSv41/nfsv41_middle_filelocking.xml,v retrieving revision 1.47 diff -u -r1.47 nfsv41_middle_filelocking.xml --- nfsv41_middle_filelocking.xml 31 Mar 2008 23:18:57 -0000 1.47 +++ nfsv41_middle_filelocking.xml 6 May 2008 03:43:46 -0000 @@ -217,7 +217,7 @@ does not conflict with the delegation, but is sent under the aegis of the delegation. Even though it is possible for the server to determine from the client ID (via - the sessionid) that the client does in fact have a + the session id) that the client does in fact have a delegation, the server is not obliged to check this, so using a special stateid can result in avoidable recall of the delegation. Index: nfsv41_middle_op_bind_conn_to_session.xml =================================================================== RCS file: /cvs/stdk/NFSv41/nfsv41_middle_op_bind_conn_to_session.xml,v retrieving revision 1.27 diff -u -r1.27 nfsv41_middle_op_bind_conn_to_session.xml --- nfsv41_middle_op_bind_conn_to_session.xml 1 May 2008 22:44:00 -0000 1.27 +++ nfsv41_middle_op_bind_conn_to_session.xml 6 May 2008 03:43:46 -0000 @@ -81,7 +81,7 @@ the client might need to use BIND_CONN_TO_SESSION to associate a new connection. If the server restarted and does not keep the reply cache in stable - storage, the server will not recognize the sessionid. + storage, the server will not recognize the session id. The client will ultimately have to invoke EXCHANGE_ID to create a new client ID and session. Index: nfsv41_middle_op_cb_getattr.xml =================================================================== RCS file: /cvs/stdk/NFSv41/nfsv41_middle_op_cb_getattr.xml,v retrieving revision 1.6 diff -u -r1.6 nfsv41_middle_op_cb_getattr.xml --- nfsv41_middle_op_cb_getattr.xml 20 Nov 2007 21:30:04 -0000 1.6 +++ nfsv41_middle_op_cb_getattr.xml 6 May 2008 03:43:46 -0000 @@ -22,7 +22,7 @@ If the filehandle specified is not one for which the client holds a - write open delegation, an NFS4ERR_BADHANDLE error is returned. + write delegation, an NFS4ERR_BADHANDLE error is returned.
Index: nfsv41_middle_op_cb_illegal.xml =================================================================== RCS file: /cvs/stdk/NFSv41/nfsv41_middle_op_cb_illegal.xml,v retrieving revision 1.6 diff -u -r1.6 nfsv41_middle_op_cb_illegal.xml --- nfsv41_middle_op_cb_illegal.xml 1 May 2008 22:44:00 -0000 1.6 +++ nfsv41_middle_op_cb_illegal.xml 6 May 2008 03:43:46 -0000 @@ -16,10 +16,10 @@
This operation is a placeholder for encoding a - result to handle the case of the client sending - an operation code within COMPOUND that is not + result to handle the case of the server sending + an operation code within CB_COMPOUND that is not defined in the NFSv4.1 specification. See for more details. + target="OP_CB_COMPOUND_DESCRIPTION"/> for more details. @@ -34,8 +34,8 @@ just as it would be with any other invalid operation code. Note that if the client gets an illegal operation code that is not OP_ILLEGAL, and if the client checks for legal operation codes - during the XDR decode phase, then the CB_ILLEGAL4res would not be - returned. + during the XDR decode phase, then an instance of + data type CB_ILLEGAL4res will not be returned.
Index: nfsv41_middle_op_cb_layoutrecall.xml =================================================================== RCS file: /cvs/stdk/NFSv41/nfsv41_middle_op_cb_layoutrecall.xml,v retrieving revision 1.24 diff -u -r1.24 nfsv41_middle_op_cb_layoutrecall.xml --- nfsv41_middle_op_cb_layoutrecall.xml 27 Mar 2008 21:05:40 -0000 1.24 +++ nfsv41_middle_op_cb_layoutrecall.xml 6 May 2008 03:43:46 -0000 @@ -14,7 +14,7 @@ The CB_LAYOUTRECALL operation is used by the server to recall layouts from the client; as a result, the client will begin the - process of returning layouts with LAYOUTRETURN. The + process of returning layouts via LAYOUTRETURN. The CB_LAYOUTRECALL operation specifies one of three forms of recall processing with the value of layoutrecall_type4. The recall is either for a specific layout (by file), for an entire file system @@ -26,20 +26,20 @@ - For a layout to match the recall request, the following fields - must match in value with the layout: clora_type, clora_iomode, - lor_fh, and the byte range specified by lor_offset, and + For a layout to match the recall request, the values of the following fields + must match those of the layout: clora_type, clora_iomode, + lor_fh, and the byte range specified by lor_offset and lor_length. The clora_iomode field may have a special value - of LAYOUTIOMODE4_ANY. The LAYOUTIOMODE4_ANY will match any - value originally returned in a layout; therefore it acts as a - wild card for iomode. The other special value used is for - lor_length. If lor_length has a value of NFS4_MAXFILELEN, the + of LAYOUTIOMODE4_ANY. The special value LAYOUTIOMODE4_ANY will match any + iomode originally returned in a layout; therefore it acts as a + wild card. The other special value used is for + lor_length. If lor_length has a value of NFS4_UINT64_MAX, the lor_length field means the maximum possible file size. If a matching layout is found, it MUST be returned using the - LAYOUTRETURN operation, see . + LAYOUTRETURN operation (see ). An example of the field's special value use is if clora_iomode is LAYOUTIOMODE4_ANY, lor_offset is zero, and lor_length is - NFS4_MAXFILELEN, then the entire layout is to be returned. + NFS4_UINT64_MAX, then the entire layout is to be returned. The NFS4ERR_NOMATCHING_LAYOUT error is only returned when the @@ -70,7 +70,7 @@ In processing the layout recall request, the client also varies - its behavior on the value of the clora_changed field. This + its behavior based on the value of the clora_changed field. This field is used by the server to provide additional context for the reason why the layout is being recalled. A FALSE value for clora_changed indicates that no change in the layout is expected @@ -78,7 +78,7 @@ involved; this must be done prior to returning the layout via LAYOUTRETURN. A TRUE value for clora_changed indicates that the server is changing the layout. Examples of layout changes and - reasons for a TRUE indication are: metadata server is restriping + reasons for a TRUE indication are: the metadata server is restriping the file or a permanent error has occurred on a storage device and the metadata server would like to provide a new layout for the file. Therefore, a clora_changed value of TRUE indicates @@ -99,21 +99,21 @@
The client's processing for CB_LAYOUTRECALL is similar to - CB_RECALL (recall of file delegations) in that straightforward - processing of the layout recall done and the client responds to - the request before actually returning layouts with the + CB_RECALL (recall of file delegations) in that + the client responds to + the request before actually returning layouts via the LAYOUTRETURN operation. While the client responds to the CB_LAYOUTRECALL immediately, the operation is not considered complete (i.e. considered pending) until all affected layouts are returned to the server - with the LAYOUTRETURN operation. + via the LAYOUTRETURN operation. - Before returning the layout to the server with LAYOUTRETURN, the + Before returning the layout to the server via LAYOUTRETURN, the client should wait for the response from in-process or in-flight READ, WRITE, or COMMIT operations that use the recalled layout. - If the client is holding modified data which is effected by a + If the client is holding modified data which is affected by a recalled layout, the client has various options for writing the data to the server. As always, the client may write the data through the metadata server. In fact, the client may not have a @@ -122,7 +122,7 @@ from the server. However, the client may be able to write the modified data to the storage device if the clora_changed argument is FALSE; this needs to be done before returning the - layout with LAYOUTRETURN. If the client were to obtain a new + layout via LAYOUTRETURN. If the client were to obtain a new layout covering the modified data's range, then writing to the storage devices is an available alternative. Note that before obtaining a new layout, the client must first return the Index: nfsv41_middle_op_cb_notify.xml =================================================================== RCS file: /cvs/stdk/NFSv41/nfsv41_middle_op_cb_notify.xml,v retrieving revision 1.20 diff -u -r1.20 nfsv41_middle_op_cb_notify.xml --- nfsv41_middle_op_cb_notify.xml 19 Dec 2007 15:27:13 -0000 1.20 +++ nfsv41_middle_op_cb_notify.xml 6 May 2008 03:43:46 -0000 @@ -31,13 +31,13 @@ - If the server has more notifications then can fit in + If the server has more notifications than can fit in the CB_COMPOUND request, it SHOULD send a sequence of serial CB_COMPOUND requests so that the client's view of the directory does not become confused. E.g. If the server indicates a file named "foo" is added, and that the - file "foo" is removed, the order it which the client receives - these notifications are processed needs to be the same as the + file "foo" is removed, the order in which the client receives + these notifications needs to be the same as the order in which corresponding operations occurred on the server. @@ -66,16 +66,16 @@ (see below), and when a hard link is being created to an existing file. If this entry is added to the end of the directory, the server will set the nad_last_entry flag to - true. If the file is added such that there is at least one + TRUE. If the file is added such that there is at least one entry before it, the server will also return the previous entry information (nad_prev_entry, a variable length array of up to one element. If the array is of zero length, there is no previous entry), along with its cookie. This is to - help clients find the right location in their DNLC or + help clients find the right location in their file name caches and directory caches where this entry should be cached. If the new entry's cookie is available, it will be in - nad_new_entry_cookie (another variable length array of up to - one element). If the addition of the entry causes another + the nad_new_entry_cookie (another variable length array of up to + one element) field. If the addition of the entry causes another entry to be deleted (which can only happen in the rename case) atomically with the addition, then information on this entry is reported in nad_old_entry. Index: nfsv41_middle_op_cb_notify_deviceid.xml =================================================================== RCS file: /cvs/stdk/NFSv41/nfsv41_middle_op_cb_notify_deviceid.xml,v retrieving revision 1.6 diff -u -r1.6 nfsv41_middle_op_cb_notify_deviceid.xml --- nfsv41_middle_op_cb_notify_deviceid.xml 29 Jan 2008 08:19:32 -0000 1.6 +++ nfsv41_middle_op_cb_notify_deviceid.xml 6 May 2008 03:43:46 -0000 @@ -17,10 +17,9 @@ The CB_NOTIFY_DEVICEID operation is used by the server to send notifications to clients about changes to pNFS device IDs. The registration of - device ID notifications occurs when the device - mapping stateid is established using GETDEVICEINFO - or GETDEVICELIST. These notifications are sent - over the backchannel. The notification is sent + device ID notifications is optional and is done via + GETDEVICEINFO. These notifications are sent + over the backchannel once the original request has been processed on the server. The server will send an array of notifications, cnda_changes, as a list of pairs of @@ -58,7 +57,7 @@ A previously provided device ID to device address mapping has changed and the client uses - GETDEVICEINFO or GETDEVICELIST to obtain the + GETDEVICEINFO to obtain the updated mapping. The notification is encoded in a value of data Index: nfsv41_middle_op_cb_notify_lock.xml =================================================================== RCS file: /cvs/stdk/NFSv41/nfsv41_middle_op_cb_notify_lock.xml,v retrieving revision 1.6 diff -u -r1.6 nfsv41_middle_op_cb_notify_lock.xml --- nfsv41_middle_op_cb_notify_lock.xml 21 Feb 2008 12:58:17 -0000 1.6 +++ nfsv41_middle_op_cb_notify_lock.xml 6 May 2008 03:43:46 -0000 @@ -13,7 +13,7 @@
- The server can use this operation to indicate that a lock for the given + The server can use this operation to indicate that a byte-range lock for the given file and lock-owner, previously requested by the client via an unsuccessful LOCK request, might be available. @@ -23,7 +23,7 @@ been polling for a blocking lock may now be able to acquire the lock. If the server supports this callback for a given file, it MUST set the OPEN4_RESULT_MAY_NOTIFY_LOCK flag when responding to successful opens - for that file. This does not commit the server to use of CB_NOTIFY_LOCK, + for that file. This does not commit the server to the use of CB_NOTIFY_LOCK, but the client may use this as a hint to decide how frequently to poll for locks derived from that open. @@ -40,10 +40,10 @@
- The server must not grant the lock to the client unless and until it - receives an actual lock request from the client. Similarly, the client + The server MUST NOT grant the lock to the client unless and until it + receives an actual LOCK request from the client. Similarly, the client receiving this callback cannot assume that it now has the lock, or that a - subsequent request for the lock will be successful. + subsequent LOCK request for the lock will be successful. The server is not required to implement this callback, and even if it Index: nfsv41_middle_op_cb_push_deleg.xml =================================================================== RCS file: /cvs/stdk/NFSv41/nfsv41_middle_op_cb_push_deleg.xml,v retrieving revision 1.13 diff -u -r1.13 nfsv41_middle_op_cb_push_deleg.xml --- nfsv41_middle_op_cb_push_deleg.xml 17 Dec 2007 14:44:27 -0000 1.13 +++ nfsv41_middle_op_cb_push_deleg.xml 6 May 2008 03:43:46 -0000 @@ -18,7 +18,9 @@
CB_PUSH_DELEG is used by the server to both signal to the - client that the delegation it wants is available and to + client that the delegation it wants (previously indicated + via a want established from an + OPEN or WANT_DELEGATION operation) is available and to simultaneously offer the delegation to the client. The client has the choice of accepting the delegation by returning NFS4_OK to the server, delaying the decision to accept the @@ -26,12 +28,8 @@ or permanently rejecting the offer of the delegation by returning NFS4ERR_REJECT_DELEG. When a delegation is rejected in this fashion, the want - previously established is permanently deleted. - - - The server MUST send in cpda_delegation a delegation - which satisfies a request made in an - OPEN or WANT_DELEGATION operation. + previously established is permanently deleted and the delegation + is subject to acquisition by another client.
Index: nfsv41_middle_op_cb_recall.xml =================================================================== RCS file: /cvs/stdk/NFSv41/nfsv41_middle_op_cb_recall.xml,v retrieving revision 1.5 diff -u -r1.5 nfsv41_middle_op_cb_recall.xml --- nfsv41_middle_op_cb_recall.xml 8 Nov 2007 04:15:21 -0000 1.5 +++ nfsv41_middle_op_cb_recall.xml 6 May 2008 03:43:46 -0000 @@ -1,7 +1,7 @@ -
+
@@ -12,17 +12,18 @@
The CB_RECALL operation is used to begin the process of recalling - an open delegation and returning it to the server. + a delegation and returning it to the server. - The truncate flag is used to optimize recall for a file which is - about to be truncated to zero. When it is set, the client is freed - of obligation to propagate modified data for the file to the + The truncate flag is used to optimize recall for a file object which + is a regular file and is + about to be truncated to zero. When it is TRUE, the client is freed + of the obligation to propagate modified data for the file to the server, since this data is irrelevant. - If the handle specified is not one for which the client holds an - open delegation, an NFS4ERR_BADHANDLE error is returned. + If the handle specified is not one for which the client holds a + delegation, an NFS4ERR_BADHANDLE error is returned. If the stateid specified is not one corresponding to an open @@ -32,10 +33,13 @@
- The client should reply to the callback immediately. Replying does - not complete the recall except when an error was returned. The - recall is not complete until the delegation is returned using a - DELEGRETURN. + The client SHOULD reply to the callback immediately. + Replying does not complete the recall except when + the value of the reply's status field is neither + NFS4ERR_DELAY nor NFS4_OK. The recall is not complete + until the delegation is returned using a DELEGRETURN + operation. +
Index: nfsv41_middle_op_cb_recall_any.xml =================================================================== RCS file: /cvs/stdk/NFSv41/nfsv41_middle_op_cb_recall_any.xml,v retrieving revision 1.10 diff -u -r1.10 nfsv41_middle_op_cb_recall_any.xml --- nfsv41_middle_op_cb_recall_any.xml 25 Feb 2008 20:51:37 -0000 1.10 +++ nfsv41_middle_op_cb_recall_any.xml 6 May 2008 03:43:46 -0000 @@ -3,7 +3,7 @@
- Notify client to return delegation and keep N of them. + Notify client to return all but N delegations.
@@ -53,24 +53,83 @@ in that class should be returned. - For NFSv4.1, a number of bits are defined. For some of these, ranges + A number of bits are defined. For some of these, ranges are defined and it is up to the definition of the storage protocol to specify how these are to be used. There are ranges - for blocks-based storage protocols, for object-based storage - protocols and a reserved range for other experimental storage - protocols. The RFC defining such a storage protocol needs to + reserved for object-based storage + protocols and for other experimental storage + protocols. An RFC defining such a storage protocol needs to specify how particular bits within its range are to be used. For example, it may specify a mapping between attributes of the layout (read vs. write, size of area) and the bit to be used or it may define a field in the layout where the associated bit position is made available by the server to the client. + + + + + + The client is to return read delegations on + non-directory file objects. + + + + + + + The client is to return write delegations on + regular file objects. + + + + + + + The client is to return directory delegations. + + + + + + + The client is to return layouts of type LAYOUT4_NFSV4_1_FILES. + + + + + + See for a description. + + + + + + + See for a description. + + + + + + This range is reserved for telling the client to recall + layouts of experimental + or site specific layout types (see ). + + + + - When an undefined bit is set in the type mask, NFS4ERR_INVAL - should be returned. If a client does not support - an object of the specified type, if the bit is defined, - NFS4ERR_INVAL should not be returned. Future minor versions - of NFSv4 may expand the set of valid type mask bits. + When a bit is set in the type mask that corresponds + to an undefined type of recallable object, + NFS4ERR_INVAL MUST be returned. When a bit is set + that corresponds to a defined type of object, but + the client does not support an object of the type, + NFS4ERR_INVAL MUST NOT be returned. Future minor + versions of NFSv4 may expand the set of valid type + mask bits. + CB_RECALL_ANY specifies a count of objects that the client may Index: nfsv41_middle_op_cb_recall_credit.xml =================================================================== RCS file: /cvs/stdk/NFSv41/nfsv41_middle_op_cb_recall_credit.xml,v retrieving revision 1.13 diff -u -r1.13 nfsv41_middle_op_cb_recall_credit.xml --- nfsv41_middle_op_cb_recall_credit.xml 25 Feb 2008 20:51:37 -0000 1.13 +++ nfsv41_middle_op_cb_recall_credit.xml 6 May 2008 03:43:46 -0000 @@ -17,16 +17,16 @@ The CB_RECALL_SLOT operation requests the client to return session slots, and if applicable, transport credits (e.g. RDMA credits for connections associated with - the operations channel) to the server. + the operations channel) of the session's fore channel. CB_RECALL_SLOT specifies - rsa_target_highest_slotid, the target highest_slot the server wants - for the session. The client, should then work toward reducing - the highest_slot to the target. + rsa_target_highest_slotid, the value of the target highest slot id the server wants + for the session. The client MUST then progress toward reducing + the session's highest slot id to the target value. If the session has only non-RDMA connections associated with its operations channel, then the client need only wait - for all outstanding requests with a slotid > + for all outstanding requests with a slot id > rsa_target_highest_slotid to complete, then send a single COMPOUND consisting of a single SEQUENCE operation, with the sa_highestslot field set to rsa_target_highest_slotid. Index: nfsv41_middle_op_cb_recallable_obj_avail.xml =================================================================== RCS file: /cvs/stdk/NFSv41/nfsv41_middle_op_cb_recallable_obj_avail.xml,v retrieving revision 1.10 diff -u -r1.10 nfsv41_middle_op_cb_recallable_obj_avail.xml --- nfsv41_middle_op_cb_recallable_obj_avail.xml 17 Dec 2007 14:44:27 -0000 1.10 +++ nfsv41_middle_op_cb_recallable_obj_avail.xml 6 May 2008 03:43:46 -0000 @@ -21,7 +21,7 @@ WANT_DELEGATION, GET_DIR_DELEG, or LAYOUTGET. - The argument, objects_to_keep means the total number of + The argument craa_objects_to_keep means the total number of recallable objects of the types indicated in the argument type_mask that the server believes it can allow the client to have, including the number of such objects the client already @@ -29,5 +29,25 @@ than the server informs it can have runs the risk of having objects recalled. + + The server is not obligated to reserve the + difference between the number of the objects + the client currently has and the value of + craa_objects_to_keep, nor does delaying the reply + to CB_RECALLABLE_OBJ_AVAIL prevent the server + from using the resources of the recallable objects + for another purpose. Indeed, if a client responds + slowly to CB_RECALLABLE_OBJ_AVAIL, the server might + interpret the client as having reduced capability + to manage recallable objects, and so cancel + or reduce any reservation it is maintaining on behalf + of the client. + Thus if the client desires to acquire more + recallable objects, it needs to reply quickly + to CB_RECALLABLE_OBJ_AVAIL, and then send the + appropriate operations to acquire recallable + objects. + +
Index: nfsv41_middle_op_cb_sequence.xml =================================================================== RCS file: /cvs/stdk/NFSv41/nfsv41_middle_op_cb_sequence.xml,v retrieving revision 1.23 diff -u -r1.23 nfsv41_middle_op_cb_sequence.xml --- nfsv41_middle_op_cb_sequence.xml 19 Mar 2008 05:04:46 -0000 1.23 +++ nfsv41_middle_op_cb_sequence.xml 6 May 2008 03:43:46 -0000 @@ -16,13 +16,13 @@ The CB_SEQUENCE operation is used to manage operational accounting for the backchannel of the session on which a request is - sent. The contents include the session to which this - request belongs, slot id and sequence id used by the server to + sent. The contents include the session id to which this + request belongs, the slot id and sequence id used by the server to implement session request control and exactly once - semantics, and exchanged slot maximums which are used to adjust the - size of the reply cache. This operation MUST appear once as the first operation in + semantics, and exchanged slot id maxima which are used to adjust the + size of the reply cache. This operation will appear once as the first operation in each CB_COMPOUND request - or a protocol error must result. See + or a protocol error MUST result. See for a description of how slots are processed. @@ -33,18 +33,18 @@ The csa_referring_call_lists array is the list of COMPOUND - requests, identified by sessionid, slot id and sequencid. These + requests, identified by session id, slot id and sequencid. These are requests that the client previously sent to the server. These previous requests created state that some operation(s) - in the same CB_COMPOUND as the csa_referring_call_lists is + in the same CB_COMPOUND as the csa_referring_call_lists are identifying. - A sessionid is included because + A session id is included because leased state is tied to a client ID, and a client ID can have multiple sessions. See . - The value of csa_sequenceid argument relative to + The value of the csa_sequenceid argument relative to the cached sequence id on the slot falls into one of three cases. @@ -100,6 +100,4 @@
-
-
Index: nfsv41_middle_op_create_session.xml =================================================================== RCS file: /cvs/stdk/NFSv41/nfsv41_middle_op_create_session.xml,v retrieving revision 1.47 diff -u -r1.47 nfsv41_middle_op_create_session.xml --- nfsv41_middle_op_create_session.xml 1 May 2008 22:44:00 -0000 1.47 +++ nfsv41_middle_op_create_session.xml 6 May 2008 03:43:47 -0000 @@ -52,7 +52,7 @@ This is the client ID the new session will be associated - with. The corresponding result is csr_sessionid, the sessionid + with. The corresponding result is csr_sessionid, the session id of the new session. @@ -359,7 +359,8 @@ as a result of a client restart, network partition, malfunctioning router, etc. For each client ID created by EXCHANGE_ID, the server maintains a - separate reply cache similar to the session reply + separate reply cache (called the CREATE_SESSION reply cache) + similar to the session reply cache used for SEQUENCE operations, with two distinctions. @@ -377,6 +378,34 @@ + As previously stated, CREATE_SESSION can be sent with + or without a preceding SEQUENCE operation. Even if + SEQUENCE precedes CREATE_SESSION, the server MUST + maintain the CREATE_SESSION reply cache, which + is separate from the reply cache for the session + associated with SEQUENCE. If CREATE_SESSION was + originally sent by itself, the client MAY send + a retry of the CREATE_SESSION operation within a + COMPOUND preceded by SEQUENCE. If CREATE_SESSION + was originally sent in a COMPOUND that started with + SEQUENCE, then the client SHOULD send a retry in + a COMPOUND that starts with SEQUENCE that has the + same session id as the SEQUENCE of the original + request. However, the client MAY send a retry in a + COMPOUND that either has no preceding SEQUENCE, or + has a preceding SEQUENCE that refers to a different + session than the original CREATE_SESSION. This might + be necessary if the client sends a CREATE_SESSION + in a COMPOUND preceded by a SEQUENCE with session + id X, and session X no longer exists. Regardless any + retry of CREATE_SESSION, with or without a preceding + SEQUENCE, MUST use the same value of csa_sequence + as the original. + + + + + When a client sends a successful EXCHANGE_ID and it is returned an unconfirmed client ID, the client is also returned eir_sequenceid, and the client is Index: nfsv41_middle_op_destroy_clientid.xml =================================================================== RCS file: /cvs/stdk/NFSv41/nfsv41_middle_op_destroy_clientid.xml,v retrieving revision 1.9 diff -u -r1.9 nfsv41_middle_op_destroy_clientid.xml --- nfsv41_middle_op_destroy_clientid.xml 1 May 2008 22:44:00 -0000 1.9 +++ nfsv41_middle_op_destroy_clientid.xml 6 May 2008 03:43:47 -0000 @@ -22,7 +22,7 @@ ID, the server MUST return NFS4ERR_CLIENTID_BUSY. DESTROY_CLIENTID MAY be preceded with a SEQUENCE operation as long as the client ID derived from the - sessionid of SEQUENCE is not the same as the client + session id of SEQUENCE is not the same as the client ID to be destroyed. If the client IDs are the same, then the server MUST return NFS4ERR_CLIENTID_BUSY. Index: nfsv41_middle_op_layoutcommit.xml =================================================================== RCS file: /cvs/stdk/NFSv41/nfsv41_middle_op_layoutcommit.xml,v retrieving revision 1.23 diff -u -r1.23 nfsv41_middle_op_layoutcommit.xml --- nfsv41_middle_op_layoutcommit.xml 1 May 2008 22:44:00 -0000 1.23 +++ nfsv41_middle_op_layoutcommit.xml 6 May 2008 03:43:47 -0000 @@ -12,7 +12,7 @@
Commits changes in the layout represented by the current - filehandle, client ID (derived from the sessionid in the + filehandle, client ID (derived from the session id in the preceding SEQUENCE operation), byte range, and stateid. Since layouts are sub-dividable, a smaller portion of a layout, retrieved via LAYOUTGET, can be committed. The region being Index: nfsv41_middle_op_layoutget.xml =================================================================== RCS file: /cvs/stdk/NFSv41/nfsv41_middle_op_layoutget.xml,v retrieving revision 1.27 diff -u -r1.27 nfsv41_middle_op_layoutget.xml --- nfsv41_middle_op_layoutget.xml 1 May 2008 22:44:00 -0000 1.27 +++ nfsv41_middle_op_layoutget.xml 6 May 2008 03:43:47 -0000 @@ -14,7 +14,7 @@ Requests a layout from the metadata server for reading or writing the file given by the filehandle at the byte range specified by offset and length. Layouts are - identified by the client ID (derived from the sessionid in the + identified by the client ID (derived from the session id in the preceding SEQUENCE operation), current filehandle, layout type (loga_layout_type), and the layout stateid (loga_stateid). The use of the loga_iomode field depends upon the layout type, but should @@ -23,54 +23,180 @@ If the metadata server is in a grace period, and does not persist layouts and device ID to device address mappings, then - it MUST return NFS4ERR_GRACE (see ). + it MUST return NFS4ERR_GRACE (see ). The LAYOUTGET operation returns layout information - for the specified byte range: a layout. To get - a layout from a specific offset through the - end-of-file, regardless of the file's length, a - loga_length field set to NFS4_UINT64_MAX is used. - If loga_length is zero, or if a loga_length which is - not NFS4_UINT64_MAX is specified, and the sum of loga_length - and loga_offset exceeds NFS4_UINT64_MAX, - the error NFS4ERR_INVAL will result. - - - - The loga_minlength field specifies the minimum length of - layout the server MUST return with two exceptions: - - - + for the specified byte range: a layout. + The client actually specifies two ranges, both starting + at the offset in the loga_offset field. The first + range is between loga_offset and loga_offset + loga_length - 1 + inclusive. This range indicates the desired range the client + wants the layout to cover. The second range is between + loga_offset and loga_offset + loga_minlength - 1 inclusive. This + range indicates the required range the client needs the layout + to cover. Thus, loga_minlength MUST be less than or equal to + loga_length. + + + + When a length field is set to NFS4_UINT64_MAX, + this indicates a desire (when loga_length is NFS4_UINT64_MAX) + or requirement (when loga_minlength is NFS4_UINT64_MAX) + to get a layout from loga_offset through the + end-of-file, regardless of the file's length. + + + The following rules govern the relationships among, + and minima of + loga_length, loga_minlength, and loga_offset. + + - - The argument loga_iomode was set to - LAYOUTIOMODE_READ, and loga_offset plus - loga_minlength goes past the end of the file. + If loga_length is less than loga_minlength, the metadata server + MUST return NFS4ERR_INAL. - + If loga_length or loga_minlength are zero the metadata server + MUST return NFS4ERR_INVAL. - The range from loga_offset through loga_offset + - loga_minlength - 1 overlaps two or more striping - patterns. In which case, logr_layout will - contain two or more elements, and the sum of - the lo_length fields of each element MUST be at - least loga_minlength unless the first exception - also applies. + + + If the sum of loga_offset and loga_minlength exceeds + NFS4_UINT64_MAX, and loga_minlength is not NFS4_UINT64_MAX, + the error NFS4ERR_INVAL MUST result. + + If the sum of loga_offset and loga_length exceeds + NFS4_UINT64_MAX, and loga_length is not NFS4_UINT64_MAX, + the error NFS4ERR_INVAL MUST result. + - If this requirement cannot be met, the server MUST - NOT return a layout and the error NFS4ERR_BADLAYOUT - MUST be returned. - - + After the metadata server has performed the above checks on loga_offset, + loga_minlength, and loga_offset, the metadata server MUST return a + layout according to the rules in . + + + + + + Acceptable layouts based on loga_minlength. + u64m = NFS4_UINT64_MAX; a_off = loga_offset; + a_minlen = loga_minlength. + + + + Layout iomode of request + Layout a_minlen of request + Layout iomode of reply + Layout offset of reply + Layout length of reply + + _READ + u64m + MAY be _READ + MUST be <= a_off + MUST be >= file length - layout offset + + _READ + u64m + MAY be _RW + MUST be <= a_off + MUST be u64m + + _READ + < u64m + MAY be _READ + MUST be <= a_off + MUST be >= MIN(file length, a_minlen + a_off) - layout offset + + _READ + < u64m + MAY be _RW + MUST be <= a_off + MUST be >= a_off - layout offset + a_minlen + + _RW + u64m + MUST be _RW + MUST be <= a_off + MUST be u64m + + _RW + < u64m + MUST be _RW + MUST be <= a_off + MUST be >= a_off - layout offset + a_minlen + + + + If the metadata server cannot return a layout according + to the rules in , + then the metadata server MUST return the error + NFS4ERR_BADLAYOUT. Assuming loga_length is greater + than loga_minlength, the metadata server SHOULD + return a layout according to the rules in . + + + + + + + Desired layouts based on loga_length. + The rules of MUST be applied first. + u64m = NFS4_UINT64_MAX; a_off = loga_offset; + a_len = loga_length. + + + + Layout iomode of request + Layout a_len of request + Layout iomode of reply + Layout offset of reply + Layout length of reply + + _READ + u64m + MAY be _READ + MUST be <= a_off + SHOULD be u64m + + _READ + u64m + MAY be _RW + MUST be <= a_off + SHOULD be u64m + + _READ + < u64m + MAY be _READ + MUST be <= a_off + SHOULD be >= a_off - layout offset + a_len + + _READ + < u64m + MAY be _RW + MUST be <= a_off + SHOULD be >= a_off - layout offset + a_len + + _RW + u64m + MUST be _RW + MUST be <= a_off + SHOULD be u64m + + _RW + < u64m + MUST be _RW + MUST be <= a_off + SHOULD be >= a_off - layout offset + a_len + The loga_stateid field specifies a valid stateid. @@ -78,11 +204,11 @@ the loga_stateid field represents a stateid reflecting the correspondingly valid open, byte-range lock, or delegation stateid. Once a - layout is held by the client for the file, the - loga_stateid field is a stateid as returned from + layout is held on the file by the client, the + loga_stateid field MUST be a stateid as returned from a previous LAYOUTGET or LAYOUTRETURN operation or provided by a CB_LAYOUTRECALL operation (see ). + target="layout_stateid"/>). @@ -91,6 +217,7 @@ exceeds the size specified by maxcount, the metadata server will return the NFS4ERR_TOOSMALL error. + The returned layout is expressed as an array, logr_layout, with each element of type layout4. If a @@ -104,45 +231,117 @@ in the range between two successive elements of logr_layout. The lo_iomode field in each element of logr_layout MUST be the same. - - - The metadata server may adjust - the range of the returned layout - based on the usage implied by - the loga_iomode. The client MUST - be prepared to get a layout that - does not align exactly with its - request. - See - for more details. - - The metadata server may also return a layout with an lo_iomode - other than that requested by the client. If it does so, it MUST - ensure that the lo_iomode is more permissive than the - loga_iomode requested. For example, this behavior allows an - implementation to upgrade read-only requests to read/write - requests at its discretion, within the limits of the layout type - specific protocol. A lo_iomode of either LAYOUTIOMODE4_READ or - LAYOUTIOMODE4_RW MUST be returned. + + and + + + both refer to a returned layout iomode, offset, and length. + Because the returned layout is encoded in the logr_layout array, + more description is required. + + + + + The value of the returned layout iomode listed in + + and + + is equal to the value of the lo_iomode field in each + element of logr_layout. + + As shown in + and , + the metadata server MAY return a layout with an lo_iomode + different from the requested iomode (field loga_iomode of the request). + If it does so, it MUST + ensure that the lo_iomode is more permissive than the + loga_iomode requested. For example, this behavior allows an + implementation to upgrade read-only requests to read/write + requests at its discretion, within the limits of the layout type + specific protocol. A lo_iomode of either LAYOUTIOMODE4_READ or + LAYOUTIOMODE4_RW MUST be returned. + + + + + + The value of the returned layout offset listed in + + and + + is always equal to the lo_offset field of the field + element logr_layout. + + + + + + When setting the value of the returned layout + length, the situation is complicated by the + possibility that the special layout length value + NFS4_UINT64_MAX is involved. For a logr_layout + array of N elements, the lo_length field in the + first N-1 elements MUST NOT be NFS4_UINT64_MAX. The + lo_length field of the last element of logr_layout + can be NFS4_UINT64_MAX under some conditions as + described in the following list. + + + + + If an applicable rule of + states the metadata server MUST return a layout of length + NFS4_UINT64_MAX, then lo_length field of the last + element of logr_layout MUST be NFS4_UINT64_MAX. + + + + If an applicable rule of + states the metadata server MUST NOT return a layout of length + NFS4_UINT64_MAX, then lo_length field of the last + element of logr_layout MUST NOT be NFS4_UINT64_MAX. + + + + If an applicable rule of + states the metadata server SHOULD return a layout of length + NFS4_UINT64_MAX, then lo_length field of the last + element of logr_layout SHOULD be NFS4_UINT64_MAX. + + + + When the value of the returned layout length of + + and + is not NFS4_UINT64_MAX, then + the returned layout length is equal to the sum of the + lo_length fields of each element of logr_layout. + + + + + + + + The logr_return_on_close result field is a directive to return - the layout before closing the file. When the server sets this + the layout before closing the file. When the metadata server sets this return value to TRUE, it MUST be prepared to recall the layout in the case the client fails to return the layout before close. - For the server that knows a layout must be returned before a + For the metadata server that knows a layout must be returned before a close of the file, this return value can be used to communicate the desired behavior to the client and thus remove one extra - step from the client's and server's interaction. + step from the client's and metadata server's interaction. The logr_stateid stateid is returned to the client for use in subsequent layout related operations. See - , , and + , , and for a further discussion and requirements. @@ -150,45 +349,45 @@ The format of the returned layout (lo_content) is specific to the layout type. The value of the layout type (lo_content.loc_type) for each of - the elements of the array of layouts returned by the server + the elements of the array of layouts returned by the metadata server (logr_layout) MUST be equal to the loga_layout_type specified by the client. If it is not equal, the client SHOULD ignore - the response as invalid and behave as if the server returned + the response as invalid and behave as if the metadata server returned an error, even if the client does have support for the layout type returned. If layouts are not supported for the requested file or its - containing file system the server SHOULD return + containing file system the metadata server MUST return NFS4ERR_LAYOUTUNAVAILABLE. If the layout type is not supported, - the metadata server should return NFS4ERR_UNKNOWN_LAYOUTTYPE. + the metadata server MUST return NFS4ERR_UNKNOWN_LAYOUTTYPE. If layouts are supported but no layout matches the client - provided layout identification, the server should return + provided layout identification, the metadata server MUST return NFS4ERR_BADLAYOUT. If an invalid loga_iomode is specified, or a - loga_iomode of LAYOUTIOMODE4_ANY is specified, the server should + loga_iomode of LAYOUTIOMODE4_ANY is specified, the metadata server MUST return NFS4ERR_BADIOMODE. If the layout for the file is unavailable due to transient - conditions, e.g. file sharing prohibits layouts, the server MUST + conditions, e.g. file sharing prohibits layouts, the metadata server MUST return NFS4ERR_LAYOUTTRYLATER. If the layout request is rejected due to an overlapping layout - recall, the server MUST return NFS4ERR_RECALLCONFLICT. See for details. + recall, the metadata server MUST return NFS4ERR_RECALLCONFLICT. See for details. If the layout conflicts with a mandatory byte range lock held on the file, and if the storage devices have no method of enforcing mandatory locks, other than through the restriction of layouts, the - metadata server should return NFS4ERR_LOCKED. + metadata server SHOULD return NFS4ERR_LOCKED. If client sets loga_signal_layout_avail to TRUE, then it is registering with the client a "want" for a layout in the event the layout cannot be obtained due to resource exhaustion. - If the server supports and will honor the "want", + If the metadata server supports and will honor the "want", the results will have logr_will_signal_layout_avail set to TRUE. If so the client should expect a CB_RECALLABLE_OBJ_AVAIL @@ -206,28 +405,28 @@ COMPOUND request after an OPEN operation and results in the client having location information for the file; this requires that loga_stateid be set to the - special stateid that tells the server to use the + special stateid that tells the metadata server to use the current stateid, which is set by OPEN (see ) . A client may also hold a layout across multiple OPENs. The client specifies a layout type that limits what kind of layout the - server will return. This prevents servers from - issuing layouts that are unusable by the client. + metadata server will return. This prevents metadata servers from + granting layouts that are unusable by the client. Once the client has obtained a layout referring to a particular - device ID, the server MUST NOT delete the device ID until the + device ID, the metadata server MUST NOT delete the device ID until the layout is returned or revoked. CB_NOTIFY_DEVICEID can race with LAYOUTGET. One race scenario is that LAYOUTGET returns a device ID the client does not have device - address mappings for, and the server sends a CB_NOTIFY_DEVICEID + address mappings for, and the metadata server sends a CB_NOTIFY_DEVICEID to add the device ID to the client's awareness and meanwhile the client sends GETDEVICEINFO on the device ID. This scenario is discussed in - . + . Another scenario is that the CB_NOTIFY_DEVICEID is processed by the client before it processes the results from LAYOUTGET. The client will send a GETDEVICEINFO on the device ID. Index: nfsv41_middle_op_layoutreturn.xml =================================================================== RCS file: /cvs/stdk/NFSv41/nfsv41_middle_op_layoutreturn.xml,v retrieving revision 1.29 diff -u -r1.29 nfsv41_middle_op_layoutreturn.xml --- nfsv41_middle_op_layoutreturn.xml 1 May 2008 22:44:00 -0000 1.29 +++ nfsv41_middle_op_layoutreturn.xml 6 May 2008 03:43:47 -0000 @@ -15,7 +15,7 @@ This operation returns from the client to the server one or more layouts represented by the client ID - (derived from the sessionid in the preceding SEQUENCE + (derived from the session id in the preceding SEQUENCE operation), lora_layout_type, and lora_iomode. When lr_returntype is LAYOUTRETURN4_FILE, the returned layout is further identified by the current Index: nfsv41_middle_op_lock.xml =================================================================== RCS file: /cvs/stdk/NFSv41/nfsv41_middle_op_lock.xml,v retrieving revision 1.17 diff -u -r1.17 nfsv41_middle_op_lock.xml --- nfsv41_middle_op_lock.xml 20 Apr 2008 16:28:33 -0000 1.17 +++ nfsv41_middle_op_lock.xml 6 May 2008 03:43:47 -0000 @@ -82,7 +82,7 @@ (locker.open_owner.lock_owner.clientid). The reason the server MUST ignore the clientid field is that the server MUST derive the client ID from - the sessionid from the SEQUENCE operation of the + the session id from the SEQUENCE operation of the COMPOUND request. Index: nfsv41_middle_op_lockt.xml =================================================================== RCS file: /cvs/stdk/NFSv41/nfsv41_middle_op_lockt.xml,v retrieving revision 1.12 diff -u -r1.12 nfsv41_middle_op_lockt.xml --- nfsv41_middle_op_lockt.xml 20 Apr 2008 16:28:33 -0000 1.12 +++ nfsv41_middle_op_lockt.xml 6 May 2008 03:43:47 -0000 @@ -35,7 +35,7 @@ any value by the client and MUST be ignored by the server. The reason the server MUST ignore the clientid field is that the server MUST derive the - client ID from the sessionid from the SEQUENCE + client ID from the session id from the SEQUENCE operation of the COMPOUND request. Index: nfsv41_middle_op_open.xml =================================================================== RCS file: /cvs/stdk/NFSv41/nfsv41_middle_op_open.xml,v retrieving revision 1.34 diff -u -r1.34 nfsv41_middle_op_open.xml --- nfsv41_middle_op_open.xml 20 Apr 2008 16:28:33 -0000 1.34 +++ nfsv41_middle_op_open.xml 6 May 2008 03:43:47 -0000 @@ -216,7 +216,7 @@ field called clientid and a field called owner. The client can set the clientid field to any value and the server MUST ignore it. Instead the server MUST - derive the client ID from the sessionid of the + derive the client ID from the session id of the SEQUENCE operation of the COMPOUND request. Index: nfsv41_middle_op_sequence.xml =================================================================== RCS file: /cvs/stdk/NFSv41/nfsv41_middle_op_sequence.xml,v retrieving revision 1.40 diff -u -r1.40 nfsv41_middle_op_sequence.xml --- nfsv41_middle_op_sequence.xml 1 May 2008 22:44:00 -0000 1.40 +++ nfsv41_middle_op_sequence.xml 6 May 2008 03:43:47 -0000 @@ -285,7 +285,7 @@
- The server MUST maintain a mapping of sessionid to client ID + The server MUST maintain a mapping of session id to client ID in order to validate any operations that follow SEQUENCE that take a stateid as an argument and/or result. Index: nfsv41_middle_pnfs.xml =================================================================== RCS file: /cvs/stdk/NFSv41/nfsv41_middle_pnfs.xml,v retrieving revision 1.79 diff -u -r1.79 nfsv41_middle_pnfs.xml --- nfsv41_middle_pnfs.xml 1 May 2008 22:44:00 -0000 1.79 +++ nfsv41_middle_pnfs.xml 6 May 2008 03:43:48 -0000 @@ -218,7 +218,7 @@
-
+
A layout defines how a file's data is organized on one or more storage devices. There are many potential layout types; each of the @@ -509,15 +509,12 @@ The client selects an appropriate layout type that the server supports and the client is prepared to use. The layout returned to - the client may not exactly align with the - requested byte range. A field within the - LAYOUTGET request, loga_minlength, specifies - the minimum length of the layout. - The loga_minlength - field should be at least one. As needed a - client may make multiple LAYOUTGET requests; - these will result in multiple overlapping, - non-conflicting layouts. + the client might not exactly match the + requested byte range as described in . As needed a client + may make multiple LAYOUTGET requests; these might result + in multiple overlapping, non-conflicting layouts (see + ). @@ -610,7 +607,7 @@ knowledge of which layout ranges are held. Note that overlapping layout ranges may occur because of the client's specific requests or because the server is allowed to expand the range of a requested - layout and notify the client in the LAYOUTRETURN results Additional + layout and notify the client in the LAYOUTRETURN results. Additional layout stateid sequencing requirements are provided in . Index: nfsv41_middle_state_mgmt.xml =================================================================== RCS file: /cvs/stdk/NFSv41/nfsv41_middle_state_mgmt.xml,v retrieving revision 1.34 diff -u -r1.34 nfsv41_middle_state_mgmt.xml --- nfsv41_middle_state_mgmt.xml 20 Apr 2008 16:28:33 -0000 1.34 +++ nfsv41_middle_state_mgmt.xml 6 May 2008 03:43:49 -0000 @@ -55,7 +55,7 @@ and then one or more sessionids (see ) before performing any operations to open, lock, delegate, or obtain a layout for a file object. - Each sessionid is associated with a specific client ID, and thus + Each session id is associated with a specific client ID, and thus serves as a shorthand reference to an NFSv4.1 client. @@ -436,7 +436,7 @@ If server restart has resulted in an invalid - client ID or a sessionid which is invalid, SEQUENCE will return + client ID or a session id which is invalid, SEQUENCE will return an error and the operation that takes a stateid as an argument will never be processed. @@ -601,7 +601,7 @@
- Because each operation is associated with a sessionid and from that + Because each operation is associated with a session id and from that the clientid can be determined, operations do not need to include a stateid for the server to be able to determine whether the they should cause a delegation to be recalled or are to be Index: dotx-id.d/Makefile =================================================================== RCS file: /cvs/stdk/NFSv41/dotx-id.d/Makefile,v retrieving revision 1.16 diff -u -r1.16 Makefile --- dotx-id.d/Makefile 1 May 2008 18:18:57 -0000 1.16 +++ dotx-id.d/Makefile 6 May 2008 03:43:50 -0000 @@ -5,8 +5,8 @@ YEAR=`date +%Y` MONTH=`date +%b` -PREVVERS=03 -VERS=04 +PREVVERS=04 +VERS=05 VPATH = ../../dotx.d all: txt filelist Index: dotx.d/cb_recall_any_args.x =================================================================== RCS file: /cvs/stdk/NFSv41/dotx.d/cb_recall_any_args.x,v retrieving revision 1.3 diff -u -r1.3 cb_recall_any_args.x --- dotx.d/cb_recall_any_args.x 3 Mar 2007 21:52:42 -0000 1.3 +++ dotx.d/cb_recall_any_args.x 6 May 2008 03:43:50 -0000 @@ -2,10 +2,9 @@ const RCA4_TYPE_MASK_WDATA_DLG = 1; const RCA4_TYPE_MASK_DIR_DLG = 2; const RCA4_TYPE_MASK_FILE_LAYOUT = 3; -const RCA4_TYPE_MASK_BLK_LAYOUT_MIN = 4; -const RCA4_TYPE_MASK_BLK_LAYOUT_MAX = 7; +const RCA4_TYPE_MASK_BLK_LAYOUT = 4; const RCA4_TYPE_MASK_OBJ_LAYOUT_MIN = 8; -const RCA4_TYPE_MASK_OBJ_LAYOUT_MAX = 11; +const RCA4_TYPE_MASK_OBJ_LAYOUT_MAX = 9; const RCA4_TYPE_MASK_OTHER_LAYOUT_MIN = 12; const RCA4_TYPE_MASK_OTHER_LAYOUT_MAX = 15; Index: dotx.d/spit_types.sh =================================================================== RCS file: /cvs/stdk/NFSv41/dotx.d/spit_types.sh,v retrieving revision 1.47 diff -u -r1.47 spit_types.sh --- dotx.d/spit_types.sh 21 Feb 2008 17:11:47 -0000 1.47 +++ dotx.d/spit_types.sh 6 May 2008 03:43:50 -0000 @@ -831,7 +831,7 @@ type_nfs_cb_resop4.x ) cat << EOF > $i -union nfs_cb_resop4 switch (unsigned resop){ +union nfs_cb_resop4 switch (unsigned resop) { case OP_CB_GETATTR: CB_GETATTR4res opcbgetattr; case OP_CB_RECALL: CB_RECALL4res opcbrecall; @@ -1069,7 +1069,7 @@ type_nfs_resop4.x ) cat << EOF > $i -union nfs_resop4 switch (nfs_opnum4 resop){ +union nfs_resop4 switch (nfs_opnum4 resop) { case OP_ACCESS: ACCESS4res opaccess; case OP_CLOSE: CLOSE4res opclose; case OP_COMMIT: COMMIT4res opcommit;