-----------------------------------
[[ldlm]]
-The discussion of the LDLM is deferred for now. We'll get into it soon
-enough.
+Details about the operation of the LDLM will be introduced as they
+become relevant to the discussion of various file system operations.
LDLM Structures
~~~~~~~~~~~~~~~
-Lock Modes
-^^^^^^^^^^
+include::layout_intent.txt[]
-----
-typedef enum {
- LCK_MINMODE = 0,
- LCK_EX = 1,
- LCK_PW = 2,
- LCK_PR = 4,
- LCK_CW = 8,
- LCK_CR = 16,
- LCK_NL = 32,
- LCK_GROUP = 64,
- LCK_COS = 128,
- LCK_MAXMODE
-} ldlm_mode_t;
-----
+include::ldlm_resource_id.txt[]
-LDLM Extent
-^^^^^^^^^^^
+include::ldlm_intent.txt[]
-----
-struct ldlm_extent {
- __u64 start;
- __u64 end;
- __u64 gid;
-};
-----
+include::ldlm_resource_desc.txt[]
-LDLM Flock Wire
-^^^^^^^^^^^^^^^
+include::ldlm_lock_desc.txt[]
-----
-struct ldlm_flock_wire {
- __u64 lfw_start;
- __u64 lfw_end;
- __u64 lfw_owner;
- __u32 lfw_padding;
- __u32 lfw_pid;
-};
-----
+include::ldlm_request.txt[]
-LDLM Inode Bits
-^^^^^^^^^^^^^^^
+include::ldlm_reply.txt[]
-----
-struct ldlm_inodebits {
- __u64 bits;
-};
-----
+include::ost_lvb.txt[]
-LDLM Wire Policy Data
-^^^^^^^^^^^^^^^^^^^^^
-
-----
-typedef union {
- struct ldlm_extent l_extent;
- struct ldlm_flock_wire l_flock;
- struct ldlm_inodebits l_inodebits;
-} ldlm_wire_policy_data_t;
-----
-
-Resource Descriptor
-^^^^^^^^^^^^^^^^^^^
-
-----
-struct ldlm_resource_desc {
- ldlm_type_t lr_type;
- __u32 lr_padding; /* also fix lustre_swab_ldlm_resource_desc */
- struct ldlm_res_id lr_name;
-};
-----
-
-The 'ldlm_type_t' is given by one of these values:
-----
-typedef enum {
- LDLM_PLAIN = 10,
- LDLM_EXTENT = 11,
- LDLM_FLOCK = 12,
- LDLM_IBITS = 13
-} ldlm_type_t;
-----
-
-Lock Descriptor
-^^^^^^^^^^^^^^^
-
-----
-struct ldlm_lock_desc {
- struct ldlm_resource_desc l_resource;
- ldlm_mode_t l_req_mode;
- ldlm_mode_t l_granted_mode;
- ldlm_wire_policy_data_t l_policy_data;
-};
-----
-
-Lock Request
-^^^^^^^^^^^^
-
-----
-#define LDLM_LOCKREQ_HANDLES 2
-struct ldlm_request {
- __u32 lock_flags;
- __u32 lock_count;
- struct ldlm_lock_desc lock_desc;
- struct lustre_handle lock_handle[LDLM_LOCKREQ_HANDLES];
-};
-----
-
-Lock Reply
-^^^^^^^^^^
-
-----
-struct ldlm_reply {
- __u32 lock_flags;
- __u32 lock_padding; /* also fix lustre_swab_ldlm_reply */
- struct ldlm_lock_desc lock_desc;
- struct lustre_handle lock_handle;
- __u64 lock_policy_res1;
- __u64 lock_policy_res2;
-};
-----
-
-Lock Value Block
-^^^^^^^^^^^^^^^^
-
-A lock value block is part of reply messages from servers when an
-LDLM_ENQUEUE command has been issued. There are two varieties. Which
-is chosen depends on the target.
-
-----
-struct ost_lvb_v1 {
- __u64 lvb_size;
- obd_time lvb_mtime;
- obd_time lvb_atime;
- obd_time lvb_ctime;
- __u64 lvb_blocks;
-};
-struct ost_lvb {
- __u64 lvb_size;
- obd_time lvb_mtime;
- obd_time lvb_atime;
- obd_time lvb_ctime;
- __u64 lvb_blocks;
- __u32 lvb_mtime_ns;
- __u32 lvb_atime_ns;
- __u32 lvb_ctime_ns;
- __u32 lvb_padding;
-};
-----
+include::lov_mds_md.txt[]