--- /dev/null
+
+LDLM Request
+^^^^^^^^^^^^
+[[struct-ldlm-request]]
+
+The 'ldlm_request' structure describes the details of a lock request.
+
+----
+struct ldlm_request {
+ __u32 lock_flags;
+ __u32 lock_count;
+ struct ldlm_lock_desc lock_desc;
+ struct lustre_handle lock_handle[2];
+};
+----
+
+The 'lock_flags' field governs how the lock request is to be
+interpreted. The flags are:
+
+----
+#define LDLM_FL_LOCK_CHANGED 0x0000000000000001ULL // bit 0
+#define LDLM_FL_BLOCK_GRANTED 0x0000000000000002ULL // bit 1
+#define LDLM_FL_BLOCK_CONV 0x0000000000000004ULL // bit 2
+#define LDLM_FL_BLOCK_WAIT 0x0000000000000008ULL // bit 3
+#define LDLM_FL_AST_SENT 0x0000000000000020ULL // bit 5
+#define LDLM_FL_REPLAY 0x0000000000000100ULL // bit 8
+#define LDLM_FL_INTENT_ONLY 0x0000000000000200ULL // bit 9
+#define LDLM_FL_HAS_INTENT 0x0000000000001000ULL // bit 12
+#define LDLM_FL_FLOCK_DEADLOCK 0x0000000000008000ULL // bit 15
+#define LDLM_FL_DISCARD_DATA 0x0000000000010000ULL // bit 16
+#define LDLM_FL_NO_TIMEOUT 0x0000000000020000ULL // bit 17
+#define LDLM_FL_BLOCK_NOWAIT 0x0000000000040000ULL // bit 18
+#define LDLM_FL_TEST_LOCK 0x0000000000080000ULL // bit 19
+#define LDLM_FL_CANCEL_ON_BLOCK 0x0000000000800000ULL // bit 23
+#define LDLM_FL_DENY_ON_CONTENTION 0x0000000040000000ULL // bit 30
+#define LDLM_FL_AST_DISCARD_DATA 0x0000000080000000ULL // bit 31
+#define LDLM_FL_FAIL_LOC 0x0000000100000000ULL // bit 32
+#define LDLM_FL_SKIPPED 0x0000000200000000ULL // bit 33
+#define LDLM_FL_CBPENDING 0x0000000400000000ULL // bit 34
+#define LDLM_FL_WAIT_NOREPROC 0x0000000800000000ULL // bit 35
+#define LDLM_FL_CANCEL 0x0000001000000000ULL // bit 36
+#define LDLM_FL_LOCAL_ONLY 0x0000002000000000ULL // bit 37
+#define LDLM_FL_FAILED 0x0000004000000000ULL // bit 38
+#define LDLM_FL_CANCELING 0x0000008000000000ULL // bit 39
+#define LDLM_FL_LOCAL 0x0000010000000000ULL // bit 40
+#define LDLM_FL_LVB_READY 0x0000020000000000ULL // bit 41
+#define LDLM_FL_KMS_IGNORE 0x0000040000000000ULL // bit 42
+#define LDLM_FL_CP_REQD 0x0000080000000000ULL // bit 43
+#define LDLM_FL_CLEANED 0x0000100000000000ULL // bit 44
+#define LDLM_FL_ATOMIC_CB 0x0000200000000000ULL // bit 45
+#define LDLM_FL_BL_AST 0x0000400000000000ULL // bit 46
+#define LDLM_FL_BL_DONE 0x0000800000000000ULL // bit 47
+#define LDLM_FL_NO_LRU 0x0001000000000000ULL // bit 48
+#define LDLM_FL_FAIL_NOTIFIED 0x0002000000000000ULL // bit 49
+#define LDLM_FL_DESTROYED 0x0004000000000000ULL // bit 50
+#define LDLM_FL_SERVER_LOCK 0x0008000000000000ULL // bit 51
+#define LDLM_FL_RES_LOCKED 0x0010000000000000ULL // bit 52
+#define LDLM_FL_WAITED 0x0020000000000000ULL // bit 53
+#define LDLM_FL_NS_SRV 0x0040000000000000ULL // bit 54
+#define LDLM_FL_EXCL 0x0080000000000000ULL // bit 55
+----
+
+The 'lock_count' field represents how many requests are queued on this
+resource.
+
+The 'lock_desc' field holds the lock descriptor as described in
+<<struct-ldlm-lock-desc>.
+
+The 'lock_handle' array's first element holds the handle for the lock
+manager (see the description of <<struct-lustre-handle>>) involved in
+the operation. There is only one lock manager involved in any given
+RPC. The second handle is set to zero except in the rare case that
+there is also an early lock cancellation. The latter case will be
+discussed elsewhere.
+