Whamcloud - gitweb
(1) don't create object as required;
authorhuanghua <huanghua>
Fri, 15 Sep 2006 16:47:42 +0000 (16:47 +0000)
committerhuanghua <huanghua>
Fri, 15 Sep 2006 16:47:42 +0000 (16:47 +0000)
(2) shrink unlink reply message;

lustre/include/obd.h
lustre/mdd/mdd_handler.c
lustre/mdt/mdt_internal.h
lustre/mdt/mdt_lib.c
lustre/mdt/mdt_open.c
lustre/mdt/mdt_recovery.c

index d9750d7..38ece9f 100644 (file)
@@ -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;
         }
 }
index 539d4a6..60e3429 100644 (file)
@@ -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) {
index 7e925db..1bfc51f 100644 (file)
@@ -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*/
index b6e4080..a9e8c23 100644 (file)
@@ -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);
index 298617e..c2a1fdf 100644 (file)
@@ -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))
index f0d08ff..f291c9f 100644 (file)
@@ -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
 };