Whamcloud - gitweb
update CMM device
authortappro <tappro>
Fri, 7 Apr 2006 14:28:07 +0000 (14:28 +0000)
committertappro <tappro>
Fri, 7 Apr 2006 14:28:07 +0000 (14:28 +0000)
lustre/cmm/cmm_device.c
lustre/cmm/cmm_internal.h
lustre/cmm/cmm_object.c

index 64deb07..d9743c7 100644 (file)
@@ -62,6 +62,19 @@ static struct lu_device_operations cmm_lu_ops = {
        .ldo_object_release = cmm_object_release,
        .ldo_object_print   = cmm_object_print
 };
+
+static struct md_device_operations cmm_md_ops = {
+        .mdo_root_get   = cmm_root_get,
+        .mdo_mkdir      = cmm_mkdir,
+//        .mdo_rename     = cmm_rename,
+//        .mdo_link       = cmm_link,
+//        .mdo_attr_get   = cmm_attr_get,
+//        .mdo_attr_set   = cmm_attr_set,
+//        .mdo_index_insert = cmm_index_insert,
+//       .mdo_index_delete = cmm_index_delete,
+//        .mdo_object_create = cmm_object_create,
+};
+
 #if 0
 int mds_md_connect(struct obd_device *obd, char *md_name)
 {
@@ -217,16 +230,14 @@ int mds_md_disconnect(struct obd_device *obd, int flags)
 static int cmm_init(struct cmm_device *m,
                     struct lu_device_type *t, struct lustre_cfg *cfg)
 {
-        char   ns_name[48];
         struct lu_device *lu_dev = cmm2lu_dev(m);
         ENTRY;
 
        md_device_init(&m->cmm_md_dev, t);
-
+        
+        m->cmm_md_dev.md_ops = &cmm_md_ops;
        lu_dev->ld_ops = &cmm_lu_ops;
 
-        snprintf(ns_name, sizeof ns_name, LUSTRE_CMM0_NAME"-%p", m);
-
        return 0;
 }
 
@@ -235,20 +246,44 @@ struct lu_device *cmm_device_alloc(struct lu_device_type *t,
 {
         struct lu_device  *l;
         struct cmm_device *m;
-
+        int err;
+        
+        ENTRY;
+        
         OBD_ALLOC_PTR(m);
         if (m == NULL) {
-                l = ERR_PTR(-ENOMEM);
-        } else {
-                int err;
-
-                err = cmm_init(m, t, cfg);
-                if (!err)
-                        l = cmm2lu_dev(m);
-                else
-                        l = ERR_PTR(err);
+                return ERR_PTR(-ENOMEM);
+        } 
+        
+        err = cmm_init(m, t, cfg);
+        if (err) {
+                return ERR_PTR(err);
+        }
+
+        for (err = 0; err < cfg->lcfg_bufcount; err++) {
+                char * name = lustre_cfg_string(cfg, err);
+                if (name) {
+                        name = "NULL"; 
+                }
+                CDEBUG(D_INFO, "lcfg#%i: %s\n", err, name);
+                
+        }
+        /* get next layer from mountopt */
+        if (LUSTRE_CFG_BUFLEN(cfg, 2)) {
+                struct obd_device * obd = NULL;
+                char * child = lustre_cfg_string(cfg, 2);
+                
+                obd = class_name2obd(child);
+                if (obd && obd->obd_lu_dev) {
+                        CDEBUG(D_INFO, "Child device is %s\n", child);
+                        m->cmm_child = lu2md_dev(obd->obd_lu_dev);
+                } else {
+                        CDEBUG(D_INFO, "Child device %s not found\n", child);
+                }
         }
+        l = cmm2lu_dev(m);
 
+        EXIT;
         return l;
 }
 
@@ -285,6 +320,7 @@ static struct lu_device_type_operations cmm_device_type_ops = {
 };
 
 static struct lu_device_type cmm_device_type = {
+        .ldt_tags = LU_DEVICE_MD,
         .ldt_name = LUSTRE_CMM0_NAME,
         .ldt_ops  = &cmm_device_type_ops
 };
index 9a7690e..01c5d13 100644 (file)
@@ -37,7 +37,7 @@ struct cmm_device {
 };
 
 
-#define CMM_DO_CHILD(d) (d->cmm_child->md_ops)
+#define CMM_CHILD_OPS(d) (d->cmm_child->md_ops)
 
 static inline struct cmm_device *md2cmm_dev(struct md_device *m)
 {
index 07602cc..58041b0 100644 (file)
@@ -116,17 +116,22 @@ static void cmm_unlock(struct md_object *obj, __u32 mode)
 /* Llog API */
 /* Object API */
 /* Metadata API */
+int cmm_root_get(struct md_device *md, struct lu_fid *fid) {
+        return 0;
+}
+
 int cmm_mkdir(struct md_object *md_parent, const char *name, 
               struct md_object *md_child)
 {
        struct cmm_object *cmm_parent = md2cmm_obj(md_parent);
         struct cmm_device *cmm_dev = cmm_obj2dev(cmm_parent);
-       int result;
+       int result = -EOPNOTSUPP;
 
-       result = CMM_DO_CHILD(cmm_dev)->mdo_mkdir(cmm2child_obj(cmm_parent),
+        if (CMM_CHILD_OPS(cmm_dev) && CMM_CHILD_OPS(cmm_dev)->mdo_mkdir) {
+               result = CMM_CHILD_OPS(cmm_dev)->mdo_mkdir(
+                                                  cmm2child_obj(cmm_parent),
                                                   name, md_child);
-
-        
+        }       
         
        return result;
 }