Whamcloud - gitweb
LU-11427 lod: create layout in mdo_create() 33/33233/3
authorJinshan Xiong <jinshan.xiong@uber.com>
Tue, 25 Sep 2018 19:13:48 +0000 (12:13 -0700)
committerOleg Drokin <green@whamcloud.com>
Mon, 29 Oct 2018 16:01:42 +0000 (16:01 +0000)
This patch will create MDT layout in the path of mdo_create() before
mdt_object_open_lock() is invoked. The previous implementation created
layout in mdt_create_data() that caused the problem that layout lock
couldn't be packed in the reply of the open request. Later on an extra
layout request has to be issued for layout lock, which kills all
performance gains by DoM for small files write.

Signed-off-by: Jinshan Xiong <jinshan.xiong@uber.com>
Change-Id: Id11ac79c89d12bbe0e925fbc89417fca3e72e479
Reviewed-on: https://review.whamcloud.com/33233
Tested-by: Jenkins
Reviewed-by: Mike Pershin <mpershin@whamcloud.com>
Tested-by: Maloo <hpdd-maloo@intel.com>
Reviewed-by: Andreas Dilger <adilger@whamcloud.com>
Reviewed-by: Oleg Drokin <green@whamcloud.com>
lustre/lod/lod_object.c

index 69da6a3..ce578bc 100644 (file)
@@ -5326,6 +5326,23 @@ out:
        RETURN(rc);
 }
 
+static inline bool lod_obj_is_dom(struct dt_object *dt)
+{
+       struct lod_object *lo = lod_dt_obj(dt);
+
+       if (!dt_object_exists(dt_object_child(dt)))
+               return false;
+
+       if (S_ISDIR(dt->do_lu.lo_header->loh_attr))
+               return false;
+
+       if (!lo->ldo_comp_cnt)
+               return false;
+
+       return (lov_pattern(lo->ldo_comp_entries[0].llc_pattern) ==
+               LOV_PATTERN_MDT);
+}
+
 /**
  * Implementation of dt_object_operations::do_create.
  *
@@ -5348,7 +5365,8 @@ static int lod_create(const struct lu_env *env, struct dt_object *dt,
                RETURN(rc);
 
        if (S_ISREG(dt->do_lu.lo_header->loh_attr) &&
-           lod_obj_is_striped(dt) && dof->u.dof_reg.striped != 0) {
+           (lod_obj_is_striped(dt) || lod_obj_is_dom(dt)) &&
+           dof->u.dof_reg.striped != 0) {
                LASSERT(lod_dt_obj(dt)->ldo_comp_cached == 0);
                rc = lod_striped_create(env, dt, attr, dof, th);
        }