Whamcloud - gitweb
LU-3285 llite: check layout size after cl_object_layout_get 10/29810/4
authorMikhal Pershin <mike.pershin@intel.com>
Thu, 26 Oct 2017 19:13:32 +0000 (22:13 +0300)
committerMike Pershin <mike.pershin@intel.com>
Mon, 30 Oct 2017 15:43:47 +0000 (15:43 +0000)
Check that layout size is not zero before doing flush for
DoM object. Also patch does that:
- initializes all values in cl_layout explicitly
  in lov_object_layout_get().
- changes cl_dom_comp_size to u64 for future needs, e.g.
  importing an existing filesystem image directly.

Test-Parameters: mdssizegb=20 testlist=sanity-dom,dom-performance
Signed-off-by: Mikhal Pershin <mike.pershin@intel.com>
Change-Id: Ic6ff06ad4022f85686fda238eae34ad38ff2dcd0
Reviewed-on: https://review.whamcloud.com/29810
Tested-by: Jenkins
Reviewed-by: Andreas Dilger <andreas.dilger@intel.com>
Tested-by: Maloo <hpdd-maloo@intel.com>
lustre/include/cl_object.h
lustre/llite/namei.c
lustre/lov/lov_object.c

index a5c302d..fbaabf6 100644 (file)
@@ -290,7 +290,7 @@ struct cl_layout {
        /** size of layout in lov_mds_md format. */
        size_t          cl_size;
        /** size of DoM component if exists or zero otherwise */
-       u32             cl_dom_comp_size;
+       u64             cl_dom_comp_size;
        /** Layout generation. */
        u32             cl_layout_gen;
        /** whether layout is a composite one */
index 8e71233..f4f8911 100644 (file)
@@ -207,10 +207,9 @@ int ll_dom_lock_cancel(struct inode *inode, struct ldlm_lock *lock)
                CDEBUG(D_INODE, "Cannot get layout for "DFID"\n",
                       PFID(ll_inode2fid(inode)));
                rc = -ENODATA;
-       } else if (clt.cl_dom_comp_size == 0) {
+       } else if (clt.cl_size == 0 || clt.cl_dom_comp_size == 0) {
                CDEBUG(D_INODE, "DOM lock without DOM layout for "DFID"\n",
                       PFID(ll_inode2fid(inode)));
-               rc = -EINVAL;
        } else {
                enum cl_fsync_mode mode;
                loff_t end = clt.cl_dom_comp_size - 1;
index 0b65bc7..5c52b2c 100644 (file)
@@ -1886,6 +1886,7 @@ static int lov_object_layout_get(const struct lu_env *env,
 
        cl->cl_size = lov_comp_md_size(lsm);
        cl->cl_layout_gen = lsm->lsm_layout_gen;
+       cl->cl_dom_comp_size = 0;
        if (lsm_is_composite(lsm->lsm_magic)) {
                struct lov_stripe_md_entry *lsme = lsm->lsm_entries[0];
 
@@ -1893,7 +1894,10 @@ static int lov_object_layout_get(const struct lu_env *env,
 
                if (lsme_is_dom(lsme))
                        cl->cl_dom_comp_size = lsme->lsme_extent.e_end;
+       } else {
+               cl->cl_is_composite = false;
        }
+
        rc = lov_lsm_pack(lsm, buf->lb_buf, buf->lb_len);
        lov_lsm_put(lsm);