Whamcloud - gitweb
Branch: b_new_cmd
authorwangdi <wangdi>
Tue, 1 Aug 2006 08:29:52 +0000 (08:29 +0000)
committerwangdi <wangdi>
Tue, 1 Aug 2006 08:29:52 +0000 (08:29 +0000)
fix lov set md problems

lustre/mdd/mdd_handler.c
lustre/mdd/mdd_lov.c

index 464a207..f5a8407 100644 (file)
@@ -914,7 +914,7 @@ static int mdd_create(const struct lu_context *ctxt, struct md_object *pobj,
         struct lu_fid *fid;
         struct lov_mds_md *lmm = NULL;
         struct thandle *handle;
-        int rc, created = 0, inserted = 0, lmm_size;
+        int rc, created = 0, inserted = 0, lmm_size = 0;
         ENTRY;
 
         /* sanity checks before big job */
@@ -932,7 +932,7 @@ static int mdd_create(const struct lu_context *ctxt, struct md_object *pobj,
                 if (rc)
                         RETURN(rc);
         }
-
+        
         mdd_txn_param_build(ctxt, &MDD_TXN_MKDIR);
         handle = mdd_trans_start(ctxt, mdd);
         if (IS_ERR(handle))
@@ -983,8 +983,10 @@ static int mdd_create(const struct lu_context *ctxt, struct md_object *pobj,
          */
 
         rc = __mdd_object_create(ctxt, son, ma, handle);
+
         if (rc)
                 GOTO(cleanup, rc);
+        
         created = 1;
 
         rc = __mdd_object_initialize(ctxt, mdo, son, ma, handle);
@@ -1003,7 +1005,7 @@ static int mdd_create(const struct lu_context *ctxt, struct md_object *pobj,
 
         inserted = 1;
 
-        rc = mdd_lov_set_md(ctxt, pobj, child, lmm, lmm_size);
+        rc = mdd_lov_set_md(ctxt, pobj, child, lmm, lmm_size, attr->la_mode);
         if (rc == 0) 
                 rc = mdd_attr_get(ctxt, child, ma);
         else 
index 6a28665..692447e 100644 (file)
@@ -273,13 +273,18 @@ int mdd_get_md(const struct lu_context *ctxt, struct md_object *obj,
 
 int mdd_lov_set_md(const struct lu_context *ctxt, struct md_object *pobj,
                    struct md_object *child, struct lov_mds_md *lmmp,
-                   int lmm_size)
+                   int lmm_size, int mode)
 {
-        struct dt_object *next = mdd_object_child(md2mdd_obj(child));
         int rc = 0;
         ENTRY;
 
-        if (dt_try_as_dir(ctxt, next)) {
+        if (S_ISREG(mode) && lmm_size > 0) {
+                LASSERT(lmmp != NULL);
+                rc = mdd_xattr_set(ctxt, child, lmmp, lmm_size,
+                                   MDS_LOV_MD_NAME, 0);
+                if (rc)
+                        CERROR("error on set stripe info: rc = %d\n", rc);
+        }else  if (S_ISDIR(mode)) {
                 struct lov_mds_md *lmm = &mdd_ctx_info(ctxt)->mti_lmm;
                 int size = sizeof(lmm);
                 rc = mdd_get_md(ctxt, pobj, &lmm, &size, 1);
@@ -295,14 +300,8 @@ int mdd_lov_set_md(const struct lu_context *ctxt, struct md_object *pobj,
                                 CERROR("error on copy stripe info: rc = %d\n",
                                         rc);
                 }
-        } else if (lmmp) {
-                LASSERT(lmm_size > 0);
-                rc = mdd_xattr_set(ctxt, child, lmmp, lmm_size,
-                                   MDS_LOV_MD_NAME, 0);
-                if (rc)
-                        CERROR("error on copy stripe info: rc = %d\n",
-                                rc);
         }
+        
         RETURN(rc);
 }