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 */
if (rc)
RETURN(rc);
}
-
+
mdd_txn_param_build(ctxt, &MDD_TXN_MKDIR);
handle = mdd_trans_start(ctxt, mdd);
if (IS_ERR(handle))
*/
rc = __mdd_object_create(ctxt, son, ma, handle);
+
if (rc)
GOTO(cleanup, rc);
+
created = 1;
rc = __mdd_object_initialize(ctxt, mdo, son, ma, handle);
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
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);
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);
}