Whamcloud - gitweb
LUDOC-293 protocol: Merge all recent patches
[doc/protocol.git] / data_types.txt
index ea75748..2d4471b 100644 (file)
@@ -198,334 +198,7 @@ The entire header is required to be a multiple of eight bytes
 long. Thus there may need to an extra four bytes of padding after the
 'lm_bufflens' array if that array has an odd number of entries.
 
-OBD statfs
-^^^^^^^^^^
-
-The 'obd_stafs' structure defines fields that are used for returning
-server common 'statfs' data items to a client. It augments that data
-with some Lustre-specific information, and also has space allocated
-for future use by Lustre.
-
-----
-struct obd_statfs {
-        __u64           os_type;
-        __u64           os_blocks;
-        __u64           os_bfree;
-        __u64           os_bavail;
-        __u64           os_files;
-        __u64           os_ffree;
-        __u8            os_fsid[40];
-        __u32           os_bsize;
-        __u32           os_namelen;
-        __u64           os_maxbytes;
-        __u32           os_state;       /**< obd_statfs_state OS_STATE_* flag */
-       __u32           os_fprecreated; /* objs available now to the caller */
-                                       /* used in QoS code to find preferred
-                                        * OSTs */
-        __u32           os_spare2;
-        __u32           os_spare3;
-        __u32           os_spare4;
-        __u32           os_spare5;
-        __u32           os_spare6;
-        __u32           os_spare7;
-        __u32           os_spare8;
-        __u32           os_spare9;
-};
-----
-
-Lustre Message Preamble
-^^^^^^^^^^^^^^^^^^^^^^^
-[[lustre-message-preamble]]
-
-Every Lustre message starts with both the above header and an
-additional set of fields (in its first "buffer") given by the 'struct
-ptlrpc_body_v3' structure. This preamble has information information
-relevant to every message type. In particular, the Lustre message type
-is itself encoded in the 'pb_opc' Lustre operation number. The value
-of that op code determines what else will be in the message following
-the preamble.
-----
-#define PTLRPC_NUM_VERSIONS     4
-#define JOBSTATS_JOBID_SIZE     32
-struct ptlrpc_body_v3 {
-    struct lustre_handle pb_handle;
-    __u32 pb_type;
-    __u32 pb_version;
-    __u32 pb_opc;
-    __u32 pb_status;
-    __u64 pb_last_xid;
-    __u64 pb_last_seen;
-    __u64 pb_last_committed;
-    __u64 pb_transno;
-    __u32 pb_flags;
-    __u32 pb_op_flags;
-    __u32 pb_conn_cnt;
-    __u32 pb_timeout;
-    __u32 pb_service_time;
-    __u32 pb_limit;
-    __u64 pb_slv;
-    __u64 pb_pre_versions[PTLRPC_NUM_VERSIONS];
-    __u64 pb_padding[4];
-    char  pb_jobid[JOBSTATS_JOBID_SIZE];
-};
-#define ptlrpc_body     ptlrpc_body_v3
-----
-In a connection request, sent by a client to server and regarding a
-specific target, the 'pb_handle' is 0. In the reply to a connection
-request, sent by the server, the handle is a value uniquely
-identifying the target. Subsequent messages between this client and
-this server regarding this target will use this handle to to gain
-access to their shared state. The handle is persistent across
-reconnects.
-
-The 'pb_type' is PTL_RPC_MSG_REQUEST in messages when they are
-initiated, it is PTL_RPC_MSG_REPLY in a reply, and it is
-PTL_RPC_MSG_ERR to convey that a message was received that could not
-be interpreted, that is, if it was corrupt or incomplete. The encoding
-of those type values is given by:
-----
-#define PTL_RPC_MSG_REQUEST 4711
-#define PTL_RPC_MSG_ERR     4712
-#define PTL_RPC_MSG_REPLY   4713
-----
-The error message type is only for responding to a message that failed
-to be interpreted as an actual message. Note that other errors, such
-as those that emerge from processing the actual message content, do
-not use the PTL_RPC_MSG_ERR type.
-
-The 'pb_version' identifies the version of the Lustre protocol and is
-derived from the following constants. The lower two bytes give the
-version of PtlRPC being employed in the message, and the upper two
-bytes encode the role of the host for the service being
-requested. That role is one of OBD, MDS, OST, DLM, LOG, or MGS.
-----
-#define PTLRPC_MSG_VERSION  0x00000003
-#define LUSTRE_VERSION_MASK 0xffff0000
-#define LUSTRE_OBD_VERSION  0x00010000
-#define LUSTRE_MDS_VERSION  0x00020000
-#define LUSTRE_OST_VERSION  0x00030000
-#define LUSTRE_DLM_VERSION  0x00040000
-#define LUSTRE_LOG_VERSION  0x00050000
-#define LUSTRE_MGS_VERSION  0x00060000
-----
-
-The 'pb_opc' value (operation code) gives the actual Lustre operation
-that is the subject of this message. For example, MDS_CONNECT is a
-Lustre operation (number 38). The following list gives the name used
-and the value for each operation.
-----
-typedef enum {
-    OST_REPLY                       =  0,
-    OST_GETATTR                     =  1,
-    OST_SETATTR                     =  2,
-    OST_READ                        =  3,
-    OST_WRITE                       =  4,
-    OST_CREATE                      =  5,
-    OST_DESTROY                     =  6,
-    OST_GET_INFO                    =  7,
-    OST_CONNECT                     =  8,
-    OST_DISCONNECT                  =  9,
-    OST_PUNCH                       = 10,
-    OST_OPEN                        = 11,
-    OST_CLOSE                       = 12,
-    OST_STATFS                      = 13,
-    OST_SYNC                        = 16,
-    OST_SET_INFO                    = 17,
-    OST_QUOTACHECK                  = 18,
-    OST_QUOTACTL                    = 19,
-    OST_QUOTA_ADJUST_QUNIT          = 20,
-    MDS_GETATTR                     = 33,
-    MDS_GETATTR_NAME                = 34,
-    MDS_CLOSE                       = 35,
-    MDS_REINT                       = 36,
-    MDS_READPAGE                    = 37,
-    MDS_CONNECT                     = 38,
-    MDS_DISCONNECT                  = 39,
-    MDS_GETSTATUS                   = 40,
-    MDS_STATFS                      = 41,
-    MDS_PIN                         = 42,
-    MDS_UNPIN                       = 43,
-    MDS_SYNC                        = 44,
-    MDS_DONE_WRITING                = 45,
-    MDS_SET_INFO                    = 46,
-    MDS_QUOTACHECK                  = 47,
-    MDS_QUOTACTL                    = 48,
-    MDS_GETXATTR                    = 49,
-    MDS_SETXATTR                    = 50,
-    MDS_WRITEPAGE                   = 51,
-    MDS_IS_SUBDIR                   = 52,
-    MDS_GET_INFO                    = 53,
-    MDS_HSM_STATE_GET               = 54,
-    MDS_HSM_STATE_SET               = 55,
-    MDS_HSM_ACTION                  = 56,
-    MDS_HSM_PROGRESS                = 57,
-    MDS_HSM_REQUEST                 = 58,
-    MDS_HSM_CT_REGISTER             = 59,
-    MDS_HSM_CT_UNREGISTER           = 60,
-    MDS_SWAP_LAYOUTS                = 61,
-    LDLM_ENQUEUE                    = 101,
-    LDLM_CONVERT                    = 102,
-    LDLM_CANCEL                     = 103,
-    LDLM_BL_CALLBACK                = 104,
-    LDLM_CP_CALLBACK                = 105,
-    LDLM_GL_CALLBACK                = 106,
-    LDLM_SET_INFO                   = 107,
-    MGS_CONNECT                     = 250,
-    MGS_DISCONNECT                  = 251,
-    MGS_EXCEPTION                   = 252,
-    MGS_TARGET_REG                  = 253,
-    MGS_TARGET_DEL                  = 254,
-    MGS_SET_INFO                    = 255,
-    MGS_CONFIG_READ                 = 256,
-    OBD_PING                        = 400,
-    OBD_LOG_CANCEL                  = 401,
-    OBD_QC_CALLBACK                 = 402,
-    OBD_IDX_READ                    = 403,
-    LLOG_ORIGIN_HANDLE_CREATE       = 501,
-    LLOG_ORIGIN_HANDLE_NEXT_BLOCK   = 502,
-    LLOG_ORIGIN_HANDLE_READ_HEADER  = 503,
-    LLOG_ORIGIN_HANDLE_WRITE_REC    = 504,
-    LLOG_ORIGIN_HANDLE_CLOSE        = 505,
-    LLOG_ORIGIN_CONNECT             = 506,
-    LLOG_ORIGIN_HANDLE_PREV_BLOCK   = 508,
-    LLOG_ORIGIN_HANDLE_DESTROY      = 509,
-    QUOTA_DQACQ                     = 601,
-    QUOTA_DQREL                     = 602,
-    SEQ_QUERY                       = 700,
-    SEC_CTX_INIT                    = 801,
-    SEC_CTX_INIT_CONT               = 802,
-    SEC_CTX_FINI                    = 803,
-    FLD_QUERY                       = 900,
-    FLD_READ                        = 901,
-    UPDATE_OBJ                      = 1000,
-    LAST_OPC
-} cmd_t;
-----
-The symbols and values above identify the operations Lustre uses in
-its protocol. They are examined in detail in the
-<<lustre-operations,Lustre Operations>> section. Lustre carries out
-each of these operations via the exchange of a pair of messages: a
-request and a reply. The details of each message are specific to each
-operation.  The <<lustre-messages,Lustre Messages>> chapter discusses
-each message and its contents.
-
-The 'pb_status' value in a request message is set to the 'pid' of the
-process making the request. In a reply message, a zero indicates that
-the service successfully initiated the requested operation. If for
-some reason the operation could not be initiated (eg. "permission
-denied") the status will encode the standard Linux kernel (POSIX)
-error code (eg. EPERM).
-
-'pb_last_xid' and 'pb_last_seen' are not used.
-
-The 'pb_last_committed' value is always zero in a request. In a reply
-it is the highest transaction number that has been committed to
-storage. The transaction numbers are maintained on a per-target basis
-and each series of transaction numbers is a strictly increasing
-sequence. This field is set in any kind of reply message including
-pings and non-modifying transactions.
-
-The 'pb_transno' value always zero in a new request. It is also zero
-for replies to operations that do not modify the file system. For
-replies to operations that do modify the file system it is the
-server-assigned value from the sequence of values associated with the
-given client and target. That transaction number is copied into the
-'pb_trans' field of the 'ptlrpc_body' of the originial request. If the
-request has to be replayed it will include the transaction number.
-
-The 'pb_flags' value governs the client state machine. Fixme: document
-what the states and transitions are of this state machine. Currently,
-only the bottom two bytes are used, and they encode state according to
-the following values:
-----
-#define MSG_GEN_FLAG_MASK     0x0000ffff
-#define MSG_LAST_REPLAY           0x0001
-#define MSG_RESENT                0x0002
-#define MSG_REPLAY                0x0004
-#define MSG_DELAY_REPLAY          0x0010
-#define MSG_VERSION_REPLAY        0x0020
-#define MSG_REQ_REPLAY_DONE       0x0040
-#define MSG_LOCK_REPLAY_DONE      0x0080
-----
-
-The 'pb_op_flags' value governs the client connection status state
-machine. Fixme: document what the states and transitions are of this
-state machine.
-----
-#define MSG_CONNECT_RECOVERING  0x00000001
-#define MSG_CONNECT_RECONNECT   0x00000002
-#define MSG_CONNECT_REPLAYABLE  0x00000004
-#define MSG_CONNECT_LIBCLIENT   0x00000010
-#define MSG_CONNECT_INITIAL     0x00000020
-#define MSG_CONNECT_ASYNC       0x00000040
-#define MSG_CONNECT_NEXT_VER    0x00000080
-#define MSG_CONNECT_TRANSNO     0x00000100
-----
-In normal operation an initial request to connect will set
-'pb_op_flags' to MSG_CONNECT_INITIAL and MSG_CONNECT_NEXT_VER. The
-reply to that connection request (and all other, non-connect, requests
-and replies) will set 'pb_op_flags' to 0.
-
-The 'pb_conn_cnt' (connection count) value in a request message
-reports the client's "era", which is part of the client and server's
-shared state. The value of the era is initialized to one when it is
-first connected to the MDT. Each subsequent connection (after an
-eviction) increments the era for the client. Since the 'pb_conn_cnt'
-reflects the client's era at the time the message was composed the
-server can use this value to discard late-arriving messages requesting
-operations on out-of-date shared state.
-
-The 'pb_timeout' value in a request indicates how long (in seconds)
-the requester plans to wait before timing out the operation. That is,
-the corresponding reply for this message should arrive within this
-time frame. The service may extend this time frame via an "early
-reply", which is a reply to this message that notifies the requester
-that it should extend its timeout interval by the value of the
-'pb_timeout' field in the reply. The "early reply" does not indicate
-the operation has actually been initiated.  Clients maintain multiple
-request queues, called "portals", and each type of operation is
-assigned to one of these queues. There is a timeout value associated
-with each queue, and the timeout update affects all the messages
-associated with the given queue, not just the specific message that
-initiated the request. Finally, in a reply message (one that does
-indicate the operation has been initiated) the timeout value updates
-the timeout interval for the queue. Is this last point different from
-the "early reply" update?
-
-The 'pb_service_time' value is zero in a request. In a reply it
-indicates how long this particular operation actually took from the
-time it first arrived in the request queue (at the service) to the
-time the server replied. Note that the client can use this value and
-the local elapsed time for the operation to calculate network latency.
-
-The 'pb_limit' value is zero in a request. In a reply it is a value
-sent from a lock service to a client to set the maximum number of
-locks available to the client. When dynamic lock LRU's are enabled
-this allows for managing the size of the LRU.
-
-The 'pb_slv' value is zero in a request. On a DLM service, the "server
-lock volume" is a value that characterizes (estimates) the amount of
-traffic, or load, on that lock service. It is calculated as the
-product of the number of locks and their age. In a reply, the 'pb_slv'
-value indicates to the client the available share of the total lock
-load on the server that the client is allowed to consume. The client
-is then responsible for reducing its number or (or age) of locks to
-stay within this limit.
-
-The array of 'pb_pre_versions' values has four entries. They are
-always zero in a new request message. They are also zero in replies to
-operations that do not modify the file system. For an operation that
-does modify the file system, the reply encodes the most recent
-transaction numbers for the objects modified by this operation, and
-the 'pb_pre_versions' values are copied into the original request when
-the reply arrives. If the request needs to be replayed then the
-updated 'pb_pre_versions' values accompany the replayed request.
-
-'pb_padding' is reserved for future use.
-
-The 'pb_jobid' (string) value gives a unique identifier associated
-with the process on behalf of which this message was generated. The
-identifier is assigned to the user process by a job scheduler, if any.
+include::ptlrpc_body.txt[]
 
 Object Based Disk UUID
 ^^^^^^^^^^^^^^^^^^^^^^
@@ -557,3 +230,5 @@ include::mdt_structs.txt[]
 include::mds_reint_structs.txt[]
 
 include::ost_setattr_structs.txt[]
+
+include::statfs_structs.txt[]