Whamcloud - gitweb
change child getting from macros to inline
authortappro <tappro>
Wed, 12 Apr 2006 13:33:51 +0000 (13:33 +0000)
committertappro <tappro>
Wed, 12 Apr 2006 13:33:51 +0000 (13:33 +0000)
add attr_get support

lustre/cmm/cmm_device.c
lustre/cmm/cmm_internal.h
lustre/cmm/cmm_object.c

index ff1e9da..24d3f71 100644 (file)
@@ -60,6 +60,7 @@ static struct md_device_operations cmm_md_ops = {
         .mdo_config     = cmm_config,
         .mdo_statfs     = cmm_statfs,
         .mdo_mkdir      = cmm_mkdir,
+        .mdo_attr_get   = cmm_attr_get,
 //        .mdo_rename     = cmm_rename,
 //        .mdo_link       = cmm_link,
 //        .mdo_attr_get   = cmm_attr_get,
@@ -145,7 +146,6 @@ void cmm_device_free(struct lu_device *d)
 
        LASSERT(atomic_read(&d->ld_ref) == 0);
        md_device_fini(&m->cmm_md_dev);
-        //cmm_fini(m);
         OBD_FREE_PTR(m);
 }
 
@@ -190,6 +190,8 @@ static int __init cmm_mod_init(void)
 {
         struct lprocfs_static_vars lvars;
 
+        printk(KERN_INFO "Lustre: Clustered Metadata Manager; info@clusterfs.com\n");
+
         lprocfs_init_vars(cmm, &lvars);
         return class_register_type(&cmm_obd_device_ops, lvars.module_vars,
                                    LUSTRE_CMM0_NAME, &cmm_device_type);
@@ -204,4 +206,4 @@ MODULE_AUTHOR("Cluster File Systems, Inc. <info@clusterfs.com>");
 MODULE_DESCRIPTION("Lustre Clustered Meta-data Manager Prototype ("LUSTRE_CMM0_NAME")");
 MODULE_LICENSE("GPL");
 
-cfs_module(cmm, "0.0.1", cmm_mod_init, cmm_mod_exit);
+cfs_module(cmm, "0.0.3", cmm_mod_init, cmm_mod_exit);
index bfc6eff..53226a7 100644 (file)
@@ -37,7 +37,10 @@ struct cmm_device {
 };
 
 
-#define CMM_CHILD_OPS(d) (d->cmm_child->md_ops)
+static inline struct md_device_operations *cmm_child_ops(struct cmm_device *d)
+{
+        return (d->cmm_child->md_ops);
+}
 
 static inline struct cmm_device *md2cmm_dev(struct md_device *m)
 {
@@ -97,6 +100,8 @@ int cmm_root_get(struct md_device *m, struct lu_fid *f);
 int cmm_statfs(struct md_device *m, struct kstatfs *sfs);
 int cmm_mkdir(struct md_object *o, const char *name,
               struct md_object *child);
+int cmm_attr_get(struct md_object *obj, void *buf, int size,
+                 const char *name, struct context *ctxt);
 
 #endif /* __KERNEL__ */
 #endif /* _CMM_INTERNAL_H */
index 202531e..3fceb2d 100644 (file)
@@ -53,15 +53,16 @@ void cmm_object_put(struct cmm_object *o)
 struct lu_object *cmm_object_alloc(struct lu_device *d)
 {
        struct cmm_object *mo;
-
+        ENTRY;
+        
        OBD_ALLOC_PTR(mo);
        if (mo != NULL) {
                struct lu_object *o;
                o = &mo->cmo_obj.mo_lu;
                 lu_object_init(o, NULL, d);
-               return o;
+               RETURN(o);
        } else
-               return NULL;
+               RETURN(NULL);
 }
 
 int cmm_object_init(struct lu_object *o)
@@ -69,14 +70,15 @@ int cmm_object_init(struct lu_object *o)
        struct cmm_device *d = lu2cmm_dev(o->lo_dev);
        struct lu_device  *under;
        struct lu_object  *below;
+        ENTRY;
 
        under = &d->cmm_child->md_lu_dev;
        below = under->ld_ops->ldo_object_alloc(under);
        if (below != NULL) {
                lu_object_add(o, below);
-               return 0;
+               RETURN(0);
        } else
-               return -ENOMEM;
+               RETURN(-ENOMEM);
 }
 
 void cmm_object_free(struct lu_object *o)
@@ -121,8 +123,8 @@ int cmm_root_get(struct md_device *md, struct lu_fid *fid) {
         struct cmm_device *cmm_dev = md2cmm_dev(md);
        int result = -EOPNOTSUPP;
 
-        if (CMM_CHILD_OPS(cmm_dev) && CMM_CHILD_OPS(cmm_dev)->mdo_root_get) {
-               result = CMM_CHILD_OPS(cmm_dev)->mdo_root_get(
+        if (cmm_child_ops(cmm_dev)->mdo_root_get) {
+               result = cmm_child_ops(cmm_dev)->mdo_root_get(
                                                   cmm_dev->cmm_child, fid);
         }       
         
@@ -136,8 +138,8 @@ int cmm_config(struct md_device *md, const char *name,
         int result = -EOPNOTSUPP;
         ENTRY;
         
-        if (CMM_CHILD_OPS(cmm_dev) && CMM_CHILD_OPS(cmm_dev)->mdo_statfs)
-               result = CMM_CHILD_OPS(cmm_dev)->mdo_config(cmm_dev->cmm_child,
+        if (cmm_child_ops(cmm_dev)->mdo_config)
+               result = cmm_child_ops(cmm_dev)->mdo_config(cmm_dev->cmm_child,
                                                             name, buf, size, mode);
 
         RETURN(result);
@@ -149,8 +151,8 @@ int cmm_statfs(struct md_device *md, struct kstatfs *sfs) {
         
         ENTRY;
         
-        if (CMM_CHILD_OPS(cmm_dev) && CMM_CHILD_OPS(cmm_dev)->mdo_statfs) {
-               result = CMM_CHILD_OPS(cmm_dev)->mdo_statfs(
+        if (cmm_child_ops(cmm_dev)->mdo_statfs) {
+               result = cmm_child_ops(cmm_dev)->mdo_statfs(
                                                   cmm_dev->cmm_child, sfs);
         }            
         
@@ -164,8 +166,8 @@ int cmm_mkdir(struct md_object *md_parent, const char *name,
         struct cmm_device *cmm_dev = cmm_obj2dev(cmm_parent);
        int result = -EOPNOTSUPP;
 
-        if (CMM_CHILD_OPS(cmm_dev) && CMM_CHILD_OPS(cmm_dev)->mdo_mkdir) {
-               result = CMM_CHILD_OPS(cmm_dev)->mdo_mkdir(
+        if (cmm_child_ops(cmm_dev)->mdo_mkdir) {
+               result = cmm_child_ops(cmm_dev)->mdo_mkdir(
                                                   cmm2child_obj(cmm_parent),
                                                   name, md_child);
         }       
@@ -173,4 +175,20 @@ int cmm_mkdir(struct md_object *md_parent, const char *name,
        return result;
 }
 
+int cmm_attr_get(struct md_object *obj, void *buf, int size,
+                 const char *name, struct context *ctxt)
+{
+        struct cmm_object *co  = md2cmm_obj(obj);
+        struct cmm_device *dev = cmm_obj2dev(co);
+        struct md_object *next = cmm2child_obj(co);
+       int result = -EOPNOTSUPP;
+        
+        LASSERT(cmm_child_ops(dev)>0x100);
+        if (cmm_child_ops(dev)->mdo_attr_get) {
+               result = cmm_child_ops(dev)->mdo_attr_get(next, buf, size,
+                                                         name, ctxt);
+        }
+
+        return result;
+}