case LOV_MAGIC_JOIN:
return &lsm_join_ops;
default:
- CERROR("Cannot recognize lsm_magic %d", magic);
+ CERROR("Cannot recognize lsm_magic %d\n", magic);
return NULL;
}
}
int rc;
ENTRY;
+ if (spec->sp_cr_flags & MDS_OPEN_DELAY_CREATE ||
+ !(spec->sp_cr_flags & FMODE_WRITE))
+ RETURN(0);
rc = mdd_lov_create(ctxt, mdd, mdd_pobj, son, &lmm, &lmm_size, spec,
attr);
if (rc)
* but setting the attr is locked? */
/* replay creates has objects already */
- if (spec->u.sp_ea.no_lov_create)
+ if (spec->u.sp_ea.no_lov_create) {
+ CDEBUG(D_INFO, "we already have lov ea\n");
rc = mdd_lov_set_md(ctxt, mdd_pobj, son,
(struct lov_mds_md *)spec->u.sp_ea.eadata,
spec->u.sp_ea.eadatalen, handle, 0);
- else
+ } else
rc = mdd_lov_set_md(ctxt, mdd_pobj, son, lmm,
lmm_size, handle, 0);
inserted = 1;
/* replay creates has objects already */
- if (spec->u.sp_ea.no_lov_create)
+ if (spec->u.sp_ea.no_lov_create) {
+ CDEBUG(D_INFO, "we already have lov ea\n");
rc = mdd_lov_set_md(ctxt, mdd_pobj, son,
(struct lov_mds_md *)spec->u.sp_ea.eadata,
spec->u.sp_ea.eadatalen, handle, 0);
- else
+ } else
rc = mdd_lov_set_md(ctxt, mdd_pobj, son, lmm,
lmm_size, handle, 0);
if (rc) {
const struct md_attr *);
void mdt_reconstruct_open(struct mdt_thread_info *);
-void mdt_dump_lmm(int level, struct lov_mds_md *lmm);
+void mdt_dump_lmm(int level, const struct lov_mds_md *lmm);
extern struct lu_context_key mdt_thread_key;
/* debug issues helper starts here*/
/* copied from lov/lov_ea.c, just for debugging, will be removed later */
-void mdt_dump_lmm(int level, struct lov_mds_md *lmm)
+void mdt_dump_lmm(int level, const struct lov_mds_md *lmm)
{
- struct lov_ost_data_v1 *lod;
+ const struct lov_ost_data_v1 *lod;
int i;
__s16 stripe_count =
le16_to_cpu(((struct lov_user_md*)lmm)->lmm_stripe_count);
static int mdt_create_data(struct mdt_thread_info *info,
struct mdt_object *p, struct mdt_object *o)
{
- struct md_attr *ma = &info->mti_attr;
- /* XXX: md_create_spec using should be made clear
- * struct mdt_reint_record *mrr = &info->mti_rr;
- */
struct md_create_spec *spec = &info->mti_spec;
+ struct md_attr *ma = &info->mti_attr;
+ int rc;
+ ENTRY;
+
+ if (spec->sp_cr_flags & MDS_OPEN_DELAY_CREATE ||
+ !(spec->sp_cr_flags & FMODE_WRITE))
+ RETURN(0);
ma->ma_need = MA_INODE | MA_LOV;
- return mdo_create_data(info->mti_ctxt, p ? mdt_object_child(p) : NULL,
- mdt_object_child(o), spec, ma);
+ rc = mdo_create_data(info->mti_ctxt, p ? mdt_object_child(p) : NULL,
+ mdt_object_child(o), spec, ma);
+ RETURN(rc);
}
}
CDEBUG(D_INODE, "I am going to create "DFID"/("DFID":%s) "
- "cr_flag=%x mode=%06o replay=%d\n",
+ "cr_flag=%o mode=%06o replay=%d\n",
PFID(rr->rr_fid1), PFID(rr->rr_fid2),
rr->rr_name, create_flags, la->la_mode,
lustre_msg_get_flags(req->rq_reqmsg) & MSG_REPLAY);
DEBUG_REQ(D_ERROR, req,"OPEN_CREAT not in open replay");
GOTO(out, result = -EFAULT);
}
- CERROR("RRRRPPPPPP failed, continue to regular open\n");
+ CDEBUG(D_INFO, "open replay failed to find object, "
+ "continue as regular open\n");
}
if (MDT_FAIL_CHECK(OBD_FAIL_MDS_OPEN_PACK))
*/
mdt_object_put(mti->mti_ctxt, obj);
}
+static void mdt_reconstruct_unlink(struct mdt_thread_info *mti)
+{
+ mdt_reconstruct_generic(mti);
+ mdt_shrink_reply(mti, REPLY_REC_OFF + 1);
+}
typedef void (*mdt_reconstructor)(struct mdt_thread_info *mti);
[REINT_SETATTR] = mdt_reconstruct_setattr,
[REINT_CREATE] = mdt_reconstruct_create,
[REINT_LINK] = mdt_reconstruct_generic,
- [REINT_UNLINK] = mdt_reconstruct_generic,
+ [REINT_UNLINK] = mdt_reconstruct_unlink,
[REINT_RENAME] = mdt_reconstruct_generic,
[REINT_OPEN] = mdt_reconstruct_open
};