Whamcloud - gitweb
add ->{dt,md}_attr_{get,set}
authornikita <nikita>
Sun, 16 Apr 2006 19:48:05 +0000 (19:48 +0000)
committernikita <nikita>
Sun, 16 Apr 2006 19:48:05 +0000 (19:48 +0000)
lustre/cmm/cmm_object.c
lustre/include/linux/lu_object.h
lustre/include/linux/md_object.h
lustre/mdd/mdd_handler.c
lustre/osd/osd_handler.c

index cc4a165..06fe7ef 100644 (file)
@@ -150,19 +150,21 @@ int cmm_mkdir(struct lu_context *ctxt, struct md_object *md_parent,
         return next->mo_ops->moo_mkdir(ctxt, next, name, md_child);
 }
 
-int cmm_xattr_get(struct lu_context *ctxt, struct md_object *obj,
-                  void *buf, int size, const char *name, struct md_params *arg)
+int cmm_attr_get(struct lu_context *ctxt, struct md_object *obj,
+                 struct lu_attr *attr)
 {
         struct md_object *next = cmm2child_obj(md2cmm_obj(obj));
 
-        return next->mo_ops->moo_xattr_get(ctxt, next, buf, size, name, arg);
+        return next->mo_ops->moo_attr_get(ctxt, next, attr);
 }
 
 static struct md_object_operations cmm_mo_ops = {
         .moo_mkdir      = cmm_mkdir,
-        .moo_xattr_get   = cmm_xattr_get,
+        .moo_attr_get   = cmm_attr_get,
+//        .moo_attr_set   = cmm_attr_set,
 //        .moo_rename     = cmm_rename,
 //        .moo_link       = cmm_link,
+//        .moo_xattr_get   = cmm_xattr_get,
 //        .moo_xattr_set   = cmm_xattr_set,
 //        .moo_index_insert = cmm_index_insert,
 //        .moo_index_delete = cmm_index_delete,
index 1834708..becdc08 100644 (file)
@@ -540,6 +540,11 @@ struct dt_object_operations {
                                    struct dt_object *dt,
                                    struct thandle *th);
 
+        int   (*do_attr_get)(struct lu_context *ctxt, struct dt_object *dt,
+                             struct lu_attr *attr);
+        int   (*do_attr_set)(struct lu_context *ctxt, struct dt_object *dt,
+                             struct lu_attr *attr, struct thandle *handle);
+
         int   (*do_xattr_get)(struct lu_context *ctxt, struct dt_object *dt,
                               void *buf, int buf_len, const char *name,
                               struct md_params *arg);
index f9dd38d..0de87aa 100644 (file)
@@ -51,6 +51,11 @@ struct md_object_operations {
                         struct md_object *sobj, const char *name,
                         struct md_params *arg);
 
+        int (*moo_attr_get)(struct lu_context *ctxt, struct md_object *dt,
+                            struct lu_attr *attr);
+        int (*moo_attr_set)(struct lu_context *ctxt, struct md_object *dt,
+                            struct lu_attr *attr);
+
         int (*moo_xattr_get)(struct lu_context *ctxt, struct md_object *obj,
                              void *buf, int buf_len, const char *name,
                              struct md_params *arg);
index 101f9d1..378aa01 100644 (file)
@@ -144,6 +144,20 @@ static void mdd_object_free(struct lu_context *ctxt, struct lu_object *o)
 }
 
 static int
+mdd_attr_get(struct lu_context *ctxt,
+             struct md_object *obj, struct lu_attr *attr)
+{
+        struct mdd_object *mdd_obj = mdo2mddo(obj);
+        struct dt_object  *next = mdd_object_child(mdd_obj);
+        int rc;
+
+        ENTRY;
+
+        rc = next->do_ops->do_attr_get(ctxt, next, attr);
+        RETURN(rc);
+}
+
+static int
 mdd_xattr_get(struct lu_context *ctxt, struct md_object *obj, void *buf,
               int buf_len, const char *name,
               struct md_params *arg)
@@ -200,6 +214,7 @@ enum {
         MDD_OBJECT_DESTROY_CREDITS = 10,
         MDD_OBJECT_CREATE_CREDITS  = 10,
         MDD_ATTR_SET_CREDITS       = 10,
+        MDD_XATTR_SET_CREDITS      = 10,
         MDD_INDEX_INSERT_CREDITS   = 10,
         MDD_INDEX_DELETE_CREDITS   = 10,
         MDD_LINK_CREDITS           = 10,
@@ -238,17 +253,6 @@ mdd_object_destroy(struct lu_context *ctxt, struct md_object *obj)
 
 static void mdd_object_release(struct lu_context *ctxt, struct lu_object *o)
 {
-        struct mdd_object *obj = mdd_obj(o);
-        int rc;
-        int nlink;
-
-        rc = mdd_xattr_get(ctxt, &obj->mod_obj, &nlink,
-                          sizeof(nlink), "NLINK", NULL);
-        if (rc == 0) {
-                if (nlink == 0)
-                        rc = mdd_object_destroy(ctxt, &obj->mod_obj);
-        } else
-                CERROR("Failed to get nlink: %d. Pretending nonzero.\n", rc);
 }
 
 static int mdd_object_print(struct lu_context *ctxt,
@@ -401,6 +405,37 @@ mdd_object_create(struct lu_context *ctxt, struct md_object *pobj,
         RETURN(rc);
 }
 
+
+static int
+__mdd_attr_set(struct lu_context *ctxt, struct md_object *obj,
+               struct lu_attr *attr, struct thandle *handle)
+{
+        struct dt_object *next = mdd_object_child(mdo2mddo(obj));
+        return next->do_ops->do_attr_set(ctxt, next, attr, handle);
+}
+
+static int
+mdd_attr_set(struct lu_context *ctxt,
+             struct md_object *obj, struct lu_attr *attr)
+{
+        struct mdd_device *mdd = mdo2mdd(obj);
+        struct thandle *handle;
+        int  rc;
+        ENTRY;
+
+        handle = mdd_trans_start(ctxt, mdd, &TXN_PARAM(MDD_ATTR_SET_CREDITS));
+        if (!handle)
+                RETURN(-ENOMEM);
+
+        rc = __mdd_attr_set(ctxt, obj, attr, handle);
+
+        mdd_trans_stop(ctxt, mdd, handle);
+
+        RETURN(rc);
+}
+
+
+
 static int
 __mdd_xattr_set(struct lu_context *ctxt, struct mdd_device *mdd,
                 struct mdd_object *obj, void *buf,
@@ -421,7 +456,7 @@ mdd_xattr_set(struct lu_context *ctxt, struct md_object *obj, void *buf,
         int  rc;
         ENTRY;
 
-        handle = mdd_trans_start(ctxt, mdd, &TXN_PARAM(MDD_ATTR_SET_CREDITS));
+        handle = mdd_trans_start(ctxt, mdd, &TXN_PARAM(MDD_XATTR_SET_CREDITS));
         if (!handle)
                 RETURN(-ENOMEM);
 
@@ -689,6 +724,8 @@ static struct md_object_operations mdd_obj_ops = {
         .moo_mkdir      = mdd_mkdir,
         .moo_rename     = mdd_rename,
         .moo_link       = mdd_link,
+        .moo_attr_get   = mdd_attr_get,
+        .moo_attr_set   = mdd_attr_set,
         .moo_xattr_get  = mdd_xattr_get,
         .moo_xattr_set  = mdd_xattr_set,
         .moo_index_insert = mdd_index_insert,
index a687f41..d4abee1 100644 (file)
@@ -74,6 +74,8 @@ static void *osd_key_init      (struct lu_context *ctx);
 static void  osd_key_fini      (struct lu_context *ctx, void *data);
 static int   osd_fid_lookup    (struct lu_context *ctx, struct osd_object *obj,
                                 const struct lu_fid *fid);
+static int   osd_inode_getattr (struct lu_context *ctx,
+                                struct inode *inode, struct lu_attr *attr);
 
 static struct osd_object  *osd_obj          (const struct lu_object *o);
 static struct osd_device  *osd_dev          (const struct lu_device *d);
@@ -96,6 +98,7 @@ static struct lprocfs_vars              lprocfs_osd_module_vars[];
 static struct lprocfs_vars              lprocfs_osd_obd_vars[];
 static struct lu_device_operations      osd_lu_ops;
 static struct lu_context_key            osd_key;
+static struct dt_object_operations      osd_obj_ops;
 
 /*
  * DT methods.
@@ -123,37 +126,15 @@ static struct lu_object *osd_object_alloc(struct lu_context *ctx,
 
                 l = &mo->oo_dt.do_lu;
                 lu_object_init(l, NULL, d);
+                mo->oo_dt.do_ops = &osd_obj_ops;
                 return l;
         } else
                 return NULL;
 }
 
-static int osd_getattr(struct lu_context *ctx,
-                       struct inode *inode, struct lu_attr *attr)
-{
-        //attr->la_atime      = inode->i_atime;
-        //attr->la_mtime      = inode->i_mtime;
-        //attr->la_ctime      = inode->i_ctime;
-        attr->la_mode       = inode->i_mode;
-        attr->la_size       = inode->i_size;
-        attr->la_blocks     = inode->i_blocks;
-        attr->la_uid        = inode->i_uid;
-        attr->la_gid        = inode->i_gid;
-        attr->la_flags      = inode->i_flags;
-        attr->la_nlink      = inode->i_nlink;
-        return 0;
-}
-
 static int osd_object_init(struct lu_context *ctxt, struct lu_object *l)
 {
-        struct osd_object *o = osd_obj(l);
-        int result;
-
-        result = osd_fid_lookup(ctxt, o, lu_object_fid(l));
-        if (result == 0)
-                /* fill lu_attr in ctxt */
-                result = osd_getattr(ctxt, o->oo_inode, &ctxt->lc_attr);
-        return result;
+        return osd_fid_lookup(ctxt, osd_obj(l), lu_object_fid(l));
 }
 
 static void osd_object_free(struct lu_context *ctx, struct lu_object *l)
@@ -222,24 +203,16 @@ static int osd_statfs(struct lu_context *ctx,
         RETURN (result);
 }
 
-static int osd_xattr_get(struct lu_context *ctxt, struct dt_object *dt,
-                         void *buf, int size, const char *name,
-                         struct md_params *arg)
+static int osd_attr_get(struct lu_context *ctxt, struct dt_object *dt,
+                        struct lu_attr *attr)
 {
-       //struct osd_object *o = dt2osd_obj(dt);
-        //struct osd_device *dev = osd_obj2dev(o);
-        //struct super_block *sb = osd_sb(dev);
-        //struct inode *inode = o->oo_inode;
-        int result = -EOPNOTSUPP;
-
-        ENTRY;
-
-        memset(buf, 0, size);
-       //TODO
-        RETURN (result);
-
+        return osd_inode_getattr(ctxt, dt2osd_obj(dt)->oo_inode, attr);
 }
 
+static struct dt_object_operations osd_obj_ops = {
+        .do_attr_get = osd_attr_get
+};
+
 static struct dt_device_operations osd_dt_ops = {
         .dt_root_get = osd_root_get,
         .dt_config   = osd_config,
@@ -481,6 +454,22 @@ static int osd_fid_lookup(struct lu_context *ctx,
         RETURN(result);
 }
 
+static int osd_inode_getattr(struct lu_context *ctx,
+                             struct inode *inode, struct lu_attr *attr)
+{
+        //attr->la_atime      = inode->i_atime;
+        //attr->la_mtime      = inode->i_mtime;
+        //attr->la_ctime      = inode->i_ctime;
+        attr->la_mode       = inode->i_mode;
+        attr->la_size       = inode->i_size;
+        attr->la_blocks     = inode->i_blocks;
+        attr->la_uid        = inode->i_uid;
+        attr->la_gid        = inode->i_gid;
+        attr->la_flags      = inode->i_flags;
+        attr->la_nlink      = inode->i_nlink;
+        return 0;
+}
+
 /*
  * Helpers.
  */