From: huanghua Date: Tue, 29 Aug 2006 10:09:36 +0000 (+0000) Subject: (1) close continue even if we can not pack reply; X-Git-Tag: v1_8_0_110~486^2~1071 X-Git-Url: https://git.whamcloud.com/?a=commitdiff_plain;h=dc4a582fd56259e882c572eced7fb4e5eb1d05b9;p=fs%2Flustre-release.git (1) close continue even if we can not pack reply; (2) some other small fixes. --- diff --git a/lustre/mdt/mdt_handler.c b/lustre/mdt/mdt_handler.c index 15e00aa..c4116eb 100644 --- a/lustre/mdt/mdt_handler.c +++ b/lustre/mdt/mdt_handler.c @@ -1206,7 +1206,7 @@ static int mdt_req_handle(struct mdt_thread_info *info, if (h->mh_opc != MDS_DISCONNECT && h->mh_opc != MDS_READPAGE && h->mh_opc != LDLM_ENQUEUE) { - mdt_finish_reply(info, result); + mdt_finish_reply(info, req->rq_status); } RETURN(result); } diff --git a/lustre/mdt/mdt_lib.c b/lustre/mdt/mdt_lib.c index b71aaea..b0b41d23 100644 --- a/lustre/mdt/mdt_lib.c +++ b/lustre/mdt/mdt_lib.c @@ -95,6 +95,7 @@ int mdt_handle_last_unlink(struct mdt_thread_info *info, struct mdt_object *mo, ENTRY; repbody = req_capsule_server_get(&info->mti_pill, &RMF_MDT_BODY); + LASSERT(repbody != NULL); if (ma->ma_valid & MA_INODE) mdt_pack_attr2body(repbody, la, mdt_object_fid(mo)); diff --git a/lustre/mdt/mdt_open.c b/lustre/mdt/mdt_open.c index 0e0f0de..5eb92ba 100644 --- a/lustre/mdt/mdt_open.c +++ b/lustre/mdt/mdt_open.c @@ -592,7 +592,7 @@ int mdt_close(struct mdt_thread_info *info) struct mdt_file_data *mfd; struct mdt_object *o; struct md_attr *ma = &info->mti_attr; - struct mdt_body *repbody; + struct mdt_body *repbody = NULL; int rc; ENTRY; @@ -601,12 +601,13 @@ int mdt_close(struct mdt_thread_info *info) req_capsule_set_size(&info->mti_pill, &RMF_LOGCOOKIES, RCL_SERVER, info->mti_mdt->mdt_max_cookiesize); rc = req_capsule_pack(&info->mti_pill); - if (rc) - RETURN(rc); - - repbody = req_capsule_server_get(&info->mti_pill, &RMF_MDT_BODY); - repbody->eadatasize = 0; - repbody->aclsize = 0; + /* Continue to close handle even if we can not pack reply */ + if (rc == 0) { + repbody = req_capsule_server_get(&info->mti_pill, + &RMF_MDT_BODY); + repbody->eadatasize = 0; + repbody->aclsize = 0; + } med = &mdt_info_req(info)->rq_export->exp_mdt_data; @@ -623,25 +624,33 @@ int mdt_close(struct mdt_thread_info *info) list_del_init(&mfd->mfd_list); spin_unlock(&med->med_open_lock); - ma->ma_lmm = req_capsule_server_get(&info->mti_pill, - &RMF_MDT_MD); - ma->ma_lmm_size = req_capsule_get_size(&info->mti_pill, - &RMF_MDT_MD, - RCL_SERVER); - - ma->ma_cookie = req_capsule_server_get(&info->mti_pill, - &RMF_LOGCOOKIES); - ma->ma_cookie_size = req_capsule_get_size(&info->mti_pill, - &RMF_LOGCOOKIES, - RCL_SERVER); - ma->ma_need = MA_INODE; + if (repbody != NULL) { + ma->ma_lmm = + req_capsule_server_get(&info->mti_pill, + &RMF_MDT_MD); + ma->ma_lmm_size = + req_capsule_get_size(&info->mti_pill, + &RMF_MDT_MD, + RCL_SERVER); + ma->ma_cookie = + req_capsule_server_get(&info->mti_pill, + &RMF_LOGCOOKIES); + ma->ma_cookie_size = + req_capsule_get_size(&info->mti_pill, + &RMF_LOGCOOKIES, + RCL_SERVER); + ma->ma_need = MA_INODE; + } o = mfd->mfd_object; mdt_mfd_close(info->mti_ctxt, info->mti_mdt, mfd, ma); - rc = mdt_handle_last_unlink(info, o, ma); + if (repbody != NULL) + rc = mdt_handle_last_unlink(info, o, ma); + /* release reference on this object. */ mdt_object_put(info->mti_ctxt, o); } - mdt_shrink_reply(info, REPLY_REC_OFF + 1); + if (repbody != NULL) + mdt_shrink_reply(info, REPLY_REC_OFF + 1); if (MDT_FAIL_CHECK(OBD_FAIL_MDS_CLOSE_PACK)) RETURN(-ENOMEM); diff --git a/lustre/mdt/mdt_recovery.c b/lustre/mdt/mdt_recovery.c index 4263f21..3cf8fb2 100644 --- a/lustre/mdt/mdt_recovery.c +++ b/lustre/mdt/mdt_recovery.c @@ -237,7 +237,7 @@ static int mdt_init_server_data(const struct lu_context *ctx, msd->msd_feature_incompat = cpu_to_le32(OBD_INCOMPAT_MDT | OBD_INCOMPAT_COMMON_LR); } else { - rc = mdt_read_last_rcvd_header(mti->mti_ctxt, mdt, msd); + rc = mdt_read_last_rcvd_header(ctx, mdt, msd); if (rc) { CERROR("error reading MDS %s: rc %d\n", LAST_RCVD, rc); GOTO(out, rc);