+ LASSERT(new_parent != NULL);
+ memset(ma, 0, sizeof(*ma));
+ memset(spec, 0, sizeof(*spec));
+ echo_set_lmm_size(env, ld, ma);
+ if (stripe_count != 0) {
+ spec->sp_cr_flags |= MDS_FMODE_WRITE;
+ if (stripe_count != -1) {
+ if (S_ISDIR(mode)) {
+ struct lmv_user_md *lmu;
+
+ lmu = (struct lmv_user_md *)&info->eti_lum;
+ lmu->lum_magic = LMV_USER_MAGIC;
+ lmu->lum_stripe_offset = stripe_offset;
+ lmu->lum_stripe_count = stripe_count;
+ lmu->lum_hash_type = LMV_HASH_TYPE_FNV_1A_64;
+ spec->u.sp_ea.eadata = lmu;
+ spec->u.sp_ea.eadatalen = sizeof(*lmu);
+ } else {
+ struct lov_user_md_v3 *lum = &info->eti_lum;
+
+ lum->lmm_magic = LOV_USER_MAGIC_V3;
+ lum->lmm_stripe_count = stripe_count;
+ lum->lmm_stripe_offset = stripe_offset;
+ lum->lmm_pattern = LOV_PATTERN_NONE;
+ spec->u.sp_ea.eadata = lum;
+ spec->u.sp_ea.eadatalen = sizeof(*lum);
+ }
+ spec->sp_cr_flags |= MDS_OPEN_HAS_EA;
+ }
+ }
+
+ ma->ma_attr.la_mode = mode;
+ ma->ma_attr.la_valid = LA_CTIME | LA_MODE;
+ ma->ma_attr.la_ctime = ktime_get_real_seconds();
+
+ if (name) {
+ lname->ln_name = name;
+ lname->ln_namelen = namelen;
+ /* If name is specified, only create one object by name */
+ rc = echo_md_create_internal(env, ed, lu2md(new_parent), fid,
+ lname, spec, ma);
+ GOTO(out_put, rc);
+ }
+
+ /* Create multiple object sequenced by id */
+ for (i = 0; i < count; i++) {
+ char *tmp_name = info->eti_name;
+
+ echo_md_build_name(lname, tmp_name, id);