From: huanghua Date: Fri, 15 Sep 2006 16:47:42 +0000 (+0000) Subject: (1) don't create object as required; X-Git-Tag: v1_8_0_110~486^2~933 X-Git-Url: https://git.whamcloud.com/?a=commitdiff_plain;h=b3b01f7d8a45777e41788241776473596a5e0f07;p=fs%2Flustre-release.git (1) don't create object as required; (2) shrink unlink reply message; --- diff --git a/lustre/include/obd.h b/lustre/include/obd.h index d9750d7..38ece9f 100644 --- a/lustre/include/obd.h +++ b/lustre/include/obd.h @@ -1203,7 +1203,7 @@ static inline struct lsm_operations *lsm_op_find(int magic) 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; } } diff --git a/lustre/mdd/mdd_handler.c b/lustre/mdd/mdd_handler.c index 539d4a6..60e3429 100644 --- a/lustre/mdd/mdd_handler.c +++ b/lustre/mdd/mdd_handler.c @@ -1633,6 +1633,9 @@ static int mdd_create_data(const struct lu_context *ctxt, 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) @@ -1647,11 +1650,12 @@ static int mdd_create_data(const struct lu_context *ctxt, * 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); @@ -1824,11 +1828,12 @@ static int mdd_create(const struct lu_context *ctxt, struct md_object *pobj, 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) { diff --git a/lustre/mdt/mdt_internal.h b/lustre/mdt/mdt_internal.h index 7e925db..1bfc51f 100644 --- a/lustre/mdt/mdt_internal.h +++ b/lustre/mdt/mdt_internal.h @@ -411,7 +411,7 @@ int mdt_handle_last_unlink(struct mdt_thread_info *, struct mdt_object *, 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*/ diff --git a/lustre/mdt/mdt_lib.c b/lustre/mdt/mdt_lib.c index b6e4080..a9e8c23 100644 --- a/lustre/mdt/mdt_lib.c +++ b/lustre/mdt/mdt_lib.c @@ -42,9 +42,9 @@ /* 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); diff --git a/lustre/mdt/mdt_open.c b/lustre/mdt/mdt_open.c index 298617e..c2a1fdf 100644 --- a/lustre/mdt/mdt_open.c +++ b/lustre/mdt/mdt_open.c @@ -75,15 +75,19 @@ static void mdt_mfd_free(struct mdt_file_data *mfd) 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); } @@ -623,7 +627,7 @@ int mdt_open(struct mdt_thread_info *info) } 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); @@ -641,7 +645,8 @@ int mdt_open(struct mdt_thread_info *info) 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)) diff --git a/lustre/mdt/mdt_recovery.c b/lustre/mdt/mdt_recovery.c index f0d08ff..f291c9f 100644 --- a/lustre/mdt/mdt_recovery.c +++ b/lustre/mdt/mdt_recovery.c @@ -1004,6 +1004,11 @@ static void mdt_reconstruct_setattr(struct mdt_thread_info *mti) */ 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); @@ -1011,7 +1016,7 @@ static mdt_reconstructor reconstructors[REINT_MAX] = { [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 };