Whamcloud - gitweb
attr_get is changed. It takes now md_attr() and does 'lov' getting inside
authortappro <tappro>
Mon, 31 Jul 2006 05:56:33 +0000 (05:56 +0000)
committertappro <tappro>
Mon, 31 Jul 2006 05:56:33 +0000 (05:56 +0000)
lustre/cmm/cmm_object.c
lustre/include/md_object.h
lustre/mdd/mdd_handler.c
lustre/mdd/mdd_lov.c
lustre/mdt/mdt_fs.c
lustre/mdt/mdt_handler.c
lustre/mdt/mdt_open.c
lustre/mdt/mdt_reint.c

index 99586d1..6944976 100644 (file)
@@ -221,7 +221,7 @@ static int cml_object_create(const struct lu_context *ctx,
 }
 
 static int cml_attr_get(const struct lu_context *ctx, struct md_object *mo,
-                        struct lu_attr *attr)
+                        struct md_attr *attr)
 {
         int rc;
         ENTRY;
@@ -529,7 +529,7 @@ static int cmr_object_create(const struct lu_context *ctx,
 }
 
 static int cmr_attr_get(const struct lu_context *ctx, struct md_object *mo,
-                        struct lu_attr *attr)
+                        struct md_attr *attr)
 {
         RETURN(-EREMOTE);
 }
index d09c49f..36b9384 100644 (file)
@@ -67,7 +67,7 @@ struct md_attr {
  */
 struct md_object_operations {
         int (*moo_attr_get)(const struct lu_context *ctxt, struct md_object *dt,
-                            struct lu_attr *attr);
+                            struct md_attr *attr);
         int (*moo_attr_set)(const struct lu_context *ctxt, struct md_object *dt,
                             const struct lu_attr *attr);
 
@@ -194,7 +194,7 @@ static inline void md_device_fini(struct md_device *md)
 
 /* md operations */
 static inline int mo_attr_get(const struct lu_context *cx, struct md_object *m,
-                              struct lu_attr *at)
+                              struct md_attr *at)
 {
         LASSERT(m->mo_ops->moo_attr_get);
         return m->mo_ops->moo_attr_get(cx, m, at);
index 450f954..6e4967d 100644 (file)
@@ -127,7 +127,7 @@ static void mdd_object_free(const struct lu_context *ctxt, struct lu_object *o)
 }
 
 static int mdd_attr_get(const struct lu_context *ctxt,
-                        struct md_object *obj, struct lu_attr *attr)
+                        struct md_object *obj, struct md_attr *ma)
 {
         struct mdd_object *mdd_obj = md2mdd_obj(obj);
         struct dt_object  *next;
@@ -138,8 +138,19 @@ static int mdd_attr_get(const struct lu_context *ctxt,
         LASSERT(lu_object_exists(ctxt, &obj->mo_lu));
 
         next = mdd_object_child(mdd_obj);
-        rc = next->do_ops->do_attr_get(ctxt, next, attr);
-
+        rc = next->do_ops->do_attr_get(ctxt, next, &ma->ma_attr);
+        if (rc == 0) {
+                ma->ma_valid |= MA_INODE;
+                if (S_ISREG(ma->ma_attr.la_mode) && 
+                    ma->ma_lmm != 0 && ma->ma_lmm_size > 0) {
+                        rc = mdd_get_md(ctxt, obj, ma->ma_lmm, &ma->ma_lmm_size, 0);
+                        if (rc >= 0) {                                
+                                ma->ma_valid |= MA_LOV;
+                                rc = 0;
+                        }
+                }
+                /*TODO: get DIREA for directory */
+        }
         RETURN(rc);
 }
 
@@ -403,11 +414,8 @@ static int __mdd_object_create(const struct lu_context *ctxt,
         if (!lu_object_exists(ctxt, mdd2lu_obj(obj))) {
                 next = mdd_object_child(obj);
                 rc = next->do_ops->do_create(ctxt, next, attr, handle);
-                if (rc == 0) {
-                        rc = mdd_attr_get(ctxt, &obj->mod_obj, &ma->ma_attr);
-                        if (rc == 0)
-                                ma->ma_valid |= MA_INODE;
-                }
+                if (rc == 0)
+                        rc = mdd_attr_get(ctxt, &obj->mod_obj, ma);
         } else
                 rc = -EEXIST;
 
@@ -660,12 +668,6 @@ static int mdd_unlink(const struct lu_context *ctxt, struct md_object *pobj,
         int rc;
         ENTRY;
 
-        rc = mdd_attr_get(ctxt, cobj, &ma->ma_attr);
-        if (rc == 0)
-                ma->ma_valid |= MA_INODE;
-        else
-                RETURN(rc);
-
         /* sanity checks */
         if (dt_try_as_dir(ctxt, dt_cobj)) {
                 if (!S_ISDIR(ma->ma_attr.la_mode))
@@ -673,13 +675,6 @@ static int mdd_unlink(const struct lu_context *ctxt, struct md_object *pobj,
         } else if (S_ISDIR(ma->ma_attr.la_mode))
                         RETURN(rc = -ENOTDIR);
 
-        if (S_ISREG(ma->ma_attr.la_mode) && ma &&
-            ma->ma_lmm != 0 && ma->ma_lmm_size > 0) {
-                rc = mdd_get_md(ctxt, cobj, ma->ma_lmm, &ma->ma_lmm_size, 0);
-                if (rc > 0)
-                        ma->ma_valid |= MA_LOV;
-        }
-
         mdd_txn_param_build(ctxt, &MDD_TXN_UNLINK);
         handle = mdd_trans_start(ctxt, mdd);
         if (IS_ERR(handle))
@@ -1188,11 +1183,8 @@ __mdd_ref_del(const struct lu_context *ctxt, struct mdd_object *obj,
         LASSERT(lu_object_exists(ctxt, mdd2lu_obj(obj)));
 
         next->do_ops->do_ref_del(ctxt, next, handle);
-        if (ma != NULL) {
-                int rc = mdd_attr_get(ctxt, &obj->mod_obj, &ma->ma_attr);
-                if (rc == 0)
-                        ma->ma_valid |= MA_INODE;
-        }
+        if (ma != NULL)
+                mdd_attr_get(ctxt, &obj->mod_obj, ma);
 }
 
 static int mdd_ref_del(const struct lu_context *ctxt, struct md_object *obj,
index 544c5aa..6a28665 100644 (file)
@@ -249,7 +249,6 @@ int mdd_get_md(const struct lu_context *ctxt, struct md_object *obj,
 {
         struct dt_object *next;
         int rc = 0;
-        int lmm_size;
         ENTRY;
 
         next = mdd_object_child(md2mdd_obj(obj));
@@ -265,10 +264,8 @@ int mdd_get_md(const struct lu_context *ctxt, struct md_object *obj,
         } else if (rc < 0) {
                 CERROR("Error %d reading eadata \n", rc);
         } else if (rc > 0) {
-                lmm_size = rc;
                 /*FIXME convert lov EA necessary for this version?*/
-                *md_size = lmm_size;
-                rc = lmm_size;
+                *md_size = rc;
         }
 
         RETURN (rc);
index 8413aac..bf9d7c2 100644 (file)
@@ -6,6 +6,7 @@
  *
  *  Copyright (C) 2002-2006 Cluster File Systems, Inc.
  *   Author: Huang Hua <huanghua@clusterfs.com>
+ *   Author; Pershin Mike <tappro@clusterfs.com>
  *
  *   This file is part of the Lustre file system, http://www.lustre.org
  *   Lustre is a trademark of Cluster File Systems, Inc.
index 0ca29fa..727c2a5 100644 (file)
@@ -223,7 +223,7 @@ static int mdt_getattr_internal(struct mdt_thread_info *info,
                 RETURN(-ENOMEM);
         }
 
-        rc = mo_attr_get(ctxt, next, la);
+        rc = mo_attr_get(ctxt, next, &info->mti_attr);
         if (rc == -EREMOTE) {
                 /* FIXME: This object is located on remote node.
                  * What value should we return to client?
@@ -413,7 +413,7 @@ static int mdt_getattr_name_lock(struct mdt_thread_info *info,
 
         intent_set_disposition(ldlm_rep, DISP_LOOKUP_EXECD);
         if (strlen(name) == 0) {
-                /* only open the child. parent is on another node. */
+                /* only getattr on the child. parent is on another node. */
                 intent_set_disposition(ldlm_rep, DISP_LOOKUP_POS);
                 child = parent;
                 CDEBUG(D_INODE, "partial getattr_name child_fid = "DFID3
@@ -761,7 +761,7 @@ static int mdt_sync(struct mdt_thread_info *info)
                                 next = mdt_object_child(info->mti_object);
                                 fid = mdt_object_fid(info->mti_object);
                                 rc = mo_attr_get(info->mti_ctxt,
-                                                 next, &info->mti_attr.ma_attr);
+                                                 next, &info->mti_attr);
                                 if (rc == 0) {
                                         body = req_capsule_server_get(pill,
                                                                 &RMF_MDT_BODY);
index 5940fb4..6592783 100644 (file)
@@ -88,22 +88,7 @@ static int mdt_mfd_open(struct mdt_thread_info *info,
 
         if (!created) {
                 /* we have to get attr & lov ea for this object*/
-                rc = mo_attr_get(info->mti_ctxt, mdt_object_child(o), la);
-                if (rc == 0) {
-                        ma->ma_valid |= MA_INODE;
-                        if (S_ISREG(la->la_mode)) {
-                                rc = mo_xattr_get(info->mti_ctxt,
-                                                  mdt_object_child(o),
-                                                  ma->ma_lmm,
-                                                  ma->ma_lmm_size,
-                                                  XATTR_NAME_LOV);
-                                if (rc >= 0) {
-                                        ma->ma_lmm_size = rc;
-                                        rc = 0;
-                                        ma->ma_valid |= MA_LOV;
-                                }
-                        }
-                }
+                rc = mo_attr_get(info->mti_ctxt, mdt_object_child(o), ma);
         }
         if (rc == 0){
                 if (!S_ISREG(la->la_mode) &&
@@ -352,7 +337,6 @@ void mdt_mfd_close(const struct lu_context *ctxt,
 int mdt_close(struct mdt_thread_info *info)
 {
         struct md_attr         *ma = &info->mti_attr;
-        struct lu_attr         *la = &ma->ma_attr;
         struct mdt_export_data *med;
         struct mdt_file_data   *mfd;
         struct mdt_object      *o;
@@ -379,23 +363,10 @@ int mdt_close(struct mdt_thread_info *info)
                                                     &RMF_MDT_MD);
                 ma->ma_lmm_size = req_capsule_get_size(&info->mti_pill,
                                                        &RMF_MDT_MD, RCL_SERVER);
-                rc = mo_attr_get(info->mti_ctxt, mdt_object_child(o), la);
-                if (rc == 0 && S_ISREG(la->la_mode)) {
-                        ma->ma_valid |= MA_INODE;
-                        rc = mo_xattr_get(info->mti_ctxt,
-                                          mdt_object_child(o),
-                                          ma->ma_lmm,
-                                          ma->ma_lmm_size,
-                                          XATTR_NAME_LOV);
-                        if (rc > 0) {
-                                ma->ma_lmm_size = rc;
-                                rc = 0;
-                                ma->ma_valid |= MA_LOV;
-                        } else if (rc == -ENODATA || rc == -EOPNOTSUPP)
-                                rc = 0;
-                        if (rc == 0)
-                                rc = mdt_handle_last_unlink(info, o);
-                }
+                rc = mo_attr_get(info->mti_ctxt, mdt_object_child(o), ma);
+                if (rc == 0)
+                        rc = mdt_handle_last_unlink(info, o);
+
                 mdt_mfd_close(info->mti_ctxt, mfd);
         }
         mdt_shrink_reply(info);
index 0683bf2..fee76be 100644 (file)
@@ -155,7 +155,7 @@ static int mdt_reint_setattr(struct mdt_thread_info *info)
         if (rc != 0)
                 GOTO(out_unlock, rc);
 
-        rc = mo_attr_get(info->mti_ctxt, next, attr);
+        rc = mo_attr_get(info->mti_ctxt, next,  &info->mti_attr);
         if (rc != 0)
                 GOTO(out_unlock, rc);