From d7073b8a33864e10d1656c9244a90f82a669520c Mon Sep 17 00:00:00 2001 From: Jinshan Xiong Date: Tue, 25 Sep 2018 12:13:48 -0700 Subject: [PATCH] LU-11427 lod: create layout in mdo_create() 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 Change-Id: Id11ac79c89d12bbe0e925fbc89417fca3e72e479 Reviewed-on: https://review.whamcloud.com/33233 Tested-by: Jenkins Reviewed-by: Mike Pershin Tested-by: Maloo Reviewed-by: Andreas Dilger Reviewed-by: Oleg Drokin --- lustre/lod/lod_object.c | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/lustre/lod/lod_object.c b/lustre/lod/lod_object.c index 69da6a3..ce578bc 100644 --- a/lustre/lod/lod_object.c +++ b/lustre/lod/lod_object.c @@ -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); } -- 1.8.3.1