Whamcloud - gitweb
(1) close continue even if we can not pack reply;
authorhuanghua <huanghua>
Tue, 29 Aug 2006 10:09:36 +0000 (10:09 +0000)
committerhuanghua <huanghua>
Tue, 29 Aug 2006 10:09:36 +0000 (10:09 +0000)
(2) some other small fixes.

lustre/mdt/mdt_handler.c
lustre/mdt/mdt_lib.c
lustre/mdt/mdt_open.c
lustre/mdt/mdt_recovery.c

index 15e00aa..c4116eb 100644 (file)
@@ -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);
 }
index b71aaea..b0b41d2 100644 (file)
@@ -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));
index 0e0f0de..5eb92ba 100644 (file)
@@ -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);
index 4263f21..3cf8fb2 100644 (file)
@@ -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);