From: wangdi Date: Tue, 1 Aug 2006 08:29:52 +0000 (+0000) Subject: Branch: b_new_cmd X-Git-Tag: v1_8_0_110~486^2~1308 X-Git-Url: https://git.whamcloud.com/gitweb?a=commitdiff_plain;h=7d40a5d8f7fce48fe31fc179101e3eda7f69af81;p=fs%2Flustre-release.git Branch: b_new_cmd fix lov set md problems --- diff --git a/lustre/mdd/mdd_handler.c b/lustre/mdd/mdd_handler.c index 464a207..f5a8407 100644 --- a/lustre/mdd/mdd_handler.c +++ b/lustre/mdd/mdd_handler.c @@ -914,7 +914,7 @@ static int mdd_create(const struct lu_context *ctxt, struct md_object *pobj, struct lu_fid *fid; struct lov_mds_md *lmm = NULL; struct thandle *handle; - int rc, created = 0, inserted = 0, lmm_size; + int rc, created = 0, inserted = 0, lmm_size = 0; ENTRY; /* sanity checks before big job */ @@ -932,7 +932,7 @@ static int mdd_create(const struct lu_context *ctxt, struct md_object *pobj, if (rc) RETURN(rc); } - + mdd_txn_param_build(ctxt, &MDD_TXN_MKDIR); handle = mdd_trans_start(ctxt, mdd); if (IS_ERR(handle)) @@ -983,8 +983,10 @@ static int mdd_create(const struct lu_context *ctxt, struct md_object *pobj, */ rc = __mdd_object_create(ctxt, son, ma, handle); + if (rc) GOTO(cleanup, rc); + created = 1; rc = __mdd_object_initialize(ctxt, mdo, son, ma, handle); @@ -1003,7 +1005,7 @@ static int mdd_create(const struct lu_context *ctxt, struct md_object *pobj, inserted = 1; - rc = mdd_lov_set_md(ctxt, pobj, child, lmm, lmm_size); + rc = mdd_lov_set_md(ctxt, pobj, child, lmm, lmm_size, attr->la_mode); if (rc == 0) rc = mdd_attr_get(ctxt, child, ma); else diff --git a/lustre/mdd/mdd_lov.c b/lustre/mdd/mdd_lov.c index 6a28665..692447e 100644 --- a/lustre/mdd/mdd_lov.c +++ b/lustre/mdd/mdd_lov.c @@ -273,13 +273,18 @@ int mdd_get_md(const struct lu_context *ctxt, struct md_object *obj, int mdd_lov_set_md(const struct lu_context *ctxt, struct md_object *pobj, struct md_object *child, struct lov_mds_md *lmmp, - int lmm_size) + int lmm_size, int mode) { - struct dt_object *next = mdd_object_child(md2mdd_obj(child)); int rc = 0; ENTRY; - if (dt_try_as_dir(ctxt, next)) { + if (S_ISREG(mode) && lmm_size > 0) { + LASSERT(lmmp != NULL); + rc = mdd_xattr_set(ctxt, child, lmmp, lmm_size, + MDS_LOV_MD_NAME, 0); + if (rc) + CERROR("error on set stripe info: rc = %d\n", rc); + }else if (S_ISDIR(mode)) { struct lov_mds_md *lmm = &mdd_ctx_info(ctxt)->mti_lmm; int size = sizeof(lmm); rc = mdd_get_md(ctxt, pobj, &lmm, &size, 1); @@ -295,14 +300,8 @@ int mdd_lov_set_md(const struct lu_context *ctxt, struct md_object *pobj, CERROR("error on copy stripe info: rc = %d\n", rc); } - } else if (lmmp) { - LASSERT(lmm_size > 0); - rc = mdd_xattr_set(ctxt, child, lmmp, lmm_size, - MDS_LOV_MD_NAME, 0); - if (rc) - CERROR("error on copy stripe info: rc = %d\n", - rc); } + RETURN(rc); }