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>
/** 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 */
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;
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];
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);