Whamcloud - gitweb
b=20595
[fs/lustre-release.git] / lustre / lov / lov_cl_internal.h
index 90f53fb..8da51aa 100644 (file)
  *       cl_lock::cll_guard, and will be automatically cleared by the sub-lock
  *       when the latter is destroyed. When a sub-lock is canceled, a
  *       reference to it is removed from the top-lock array, and top-lock is
- *       moved into CLS_NEW state. It is guaranteed that all sub-locks exits
+ *       moved into CLS_NEW state. It is guaranteed that all sub-locks exist
  *       while their top-lock is in CLS_HELD or CLS_CACHED states.
  *
  *     - IO's are not reference counted.
  *
  * To implement a connection between top and sub entities, lov layer is split
  * into two pieces: lov ("upper half"), and lovsub ("bottom half"), both
- * implementing full set of cl-interfaces. For example, top-object has clu and
+ * implementing full set of cl-interfaces. For example, top-object has vvp and
  * lov layers, and it's sub-object has lovsub and osc layers. lovsub layer is
  * used to track child-parent relationship.
  *
@@ -396,6 +396,15 @@ struct lovsub_lock {
         struct cl_lock       *lss_active;
 };
 
+/**
+ * Describe the environment settings for sublocks.
+ */
+struct lov_sublock_env {
+        const struct lu_env *lse_env;
+        struct cl_io        *lse_io;
+        struct lov_io_sub   *lse_sub;
+};
+
 struct lovsub_page {
         struct cl_page_slice lsb_cl;
 };
@@ -507,7 +516,8 @@ struct lov_io {
 };
 
 struct lov_session {
-        struct lov_io ls_io;
+        struct lov_io          ls_io;
+        struct lov_sublock_env ls_subenv;
 };
 
 /**
@@ -564,7 +574,9 @@ int   lov_io_init_empty   (const struct lu_env *env, struct cl_object *obj,
 void  lov_lock_unlink     (const struct lu_env *env, struct lov_lock_link *link,
                            struct lovsub_lock *sub);
 
-void  lov_sub_put         (struct lov_io_sub *sub);
+struct lov_io_sub *lov_sub_get(const struct lu_env *env, struct lov_io *lio,
+                               int stripe);
+void  lov_sub_put             (struct lov_io_sub *sub);
 int   lov_sublock_modify  (const struct lu_env *env, struct lov_lock *lov,
                            struct lovsub_lock *sublock,
                            const struct cl_lock_descr *d, int idx);
@@ -788,7 +800,8 @@ static inline struct lov_layout_raid0 *lov_r0(struct lov_object *lov)
 
         LASSERT(lov->lo_type == LLT_RAID0);
         raid0 = &lov->u.raid0;
-        LASSERT(raid0->lo_lsm->lsm_wire.lw_magic == LOV_MAGIC);
+        LASSERT(raid0->lo_lsm->lsm_wire.lw_magic == LOV_MAGIC ||
+                raid0->lo_lsm->lsm_wire.lw_magic == LOV_MAGIC_V3);
         return raid0;
 }