Whamcloud - gitweb
Branch: b_new_cmd
authorwangdi <wangdi>
Mon, 3 Apr 2006 10:36:45 +0000 (10:36 +0000)
committerwangdi <wangdi>
Mon, 3 Apr 2006 10:36:45 +0000 (10:36 +0000)
update mdd prototype

lustre/mdd/mdd_handler.c
lustre/mdd/mdd_internal.h

index 2586a29..84527ac 100644 (file)
@@ -27,7 +27,7 @@
 #ifndef EXPORT_SYMTAB
 # define EXPORT_SYMTAB
 #endif
-#define DEBUG_SUBSYSTEM S_MDD
+#define DEBUG_SUBSYSTEM S_MDS
 
 #include <linux/module.h>
 
 
 #include "mdd_internal.h"
 
-static int 
-mdd_init(struct lu_device *lu)
-{
-        return 0;
-}
-
-static int
-mdd_fini(struct lu_device *lu)
-{
-        return 0;
-}
-
 static struct lu_device_operations mdd_lu_ops;
 
 static int lu_device_is_mdd(struct lu_device *d)
@@ -66,15 +54,25 @@ static struct mdd_object *mdd_obj(struct lu_object *o)
        return container_of(o, struct mdd_object, mod_obj.mo_lu);
 }
 
-static struct mdd_device *mdd_dev(struct lu_device *d)
+static struct mdd_devicemdd_dev(struct lu_device *d)
 {
        LASSERT(lu_device_is_mdd(d));
        return container_of(d, struct mdd_device, mdd_md_dev.md_lu_dev);
 }
 
-static struct mdd_device* mdo2mdd(struct mdd_object *mdo)
+static struct mdd_device* mdo2mdd(struct md_object *mdo)
 {
-        return mdd_dev(mdo->mo_lu->lu_device);
+        return mdd_dev(mdo->mo_lu.lo_dev);
+}
+
+static struct mdd_object* mdo2mddo(struct md_object *mdo)
+{
+        return container_of(mdo, struct mdd_object, mod_obj);
+}
+
+static inline struct osd_device_operations *mdd_child_ops(struct mdd_device *d)
+{
+        return d->mdd_child->osd_ops;
 }
 
 struct lu_object *mdd_object_alloc(struct lu_device *d)
@@ -84,8 +82,11 @@ struct lu_object *mdd_object_alloc(struct lu_device *d)
 
         OBD_ALLOC_PTR(mdo);
         if (mdo != NULL) {
-               lu_object_init(o, NULL, d);
-                return (&mdo->mod_obj);
+                struct lu_object *o;
+               
+                o = &mdo->mod_obj.mo_lu; 
+                lu_object_init(o, NULL, d);
+                return (&mdo->mod_obj.mo_lu);
         } else
                 return(NULL);
 }
@@ -93,20 +94,19 @@ struct lu_object *mdd_object_alloc(struct lu_device *d)
 int mdd_object_init(struct lu_object *o)
 {
        struct mdd_device *d = mdd_dev(o->lo_dev);
-       struct lu_object_header *loh;
-       struct lu_object  *below, *upper;
+       struct lu_object  *below;
         struct lu_device  *under;
         ENTRY;
 
-       under = &d->mdd_child->md_lu_dev;
+       under = &d->mdd_child->osd_lu_dev;
        below = under->ld_ops->ldo_object_alloc(under);
 
         if (below == NULL)
                RETURN(-ENOMEM);
-        
-        if (o->lo_header) 
+
+        if (o->lo_header)
                 lu_object_add_top(o->lo_header, o);
-       
+
         lu_object_add(o, below);
         RETURN(0);
 }
@@ -123,69 +123,71 @@ void mdd_object_free(struct lu_object *o)
 
 void mdd_object_release(struct lu_object *o)
 {
-        struct mdt_device *d = mdt_dev(o->lo_dev); 
+        struct mdd_device *d = mdd_dev(o->lo_dev);
+}
 
-        lu_object_release(o);        
+int mdd_object_print(struct seq_file *f, const struct lu_object *o)
+{
+        return seq_printf(f, LUSTRE_MDD_NAME"-object@%p", o);
 }
 
 static struct lu_device_operations mdd_lu_ops = {
-       .ldo_init           = mdd_init,
-       .ldo_fini           = mdd_fini,
        .ldo_object_alloc   = mdd_object_alloc,
        .ldo_object_init    = mdd_object_init,
        .ldo_object_free    = mdd_object_free,
        .ldo_object_release = mdd_object_release,
        .ldo_object_print   = mdd_object_print
-}
+};
 
 struct lu_object* mdd_object_child(struct mdd_object *o)
 {
        return lu_object_next(&o->mod_obj.mo_lu);
 }
 
-static void 
-mdd_lock(struct mdd_device *mdd, struct mdd_obj *obj, __u32 mode)
+static void
+mdd_lock(struct mdd_device *mdd, struct mdd_object *obj, __u32 mode)
 {
-        mdd->mdd_child->osd_ops->osd_lock_obj(osd, mdd_object_child(obj), mode);
+        mdd_child_ops(mdd)->osd_object_lock(mdd_object_child(obj), mode);
 }
 
 static void
-mdd_unlock(struct mdd_device *mdd, struct mdd_obj *obj, __u32 mode)
+mdd_unlock(struct mdd_device *mdd, struct mdd_object *obj, __u32 mode)
 {
-        mdd->mdd_child->osd_ops->osd_unlock_obj(osd, mdd_object_child(obj),
-                                                mode);
+        mdd_child_ops(mdd)->osd_object_unlock(mdd_object_child(obj), mode);
 }
 
 static void* mdd_trans_start(struct mdd_device *mdd, struct mdd_object *obj)
 {
-        return mdd->mdd_child->osd_ops->osd_trans_start(obj);
+        return mdd_child_ops(mdd)->osd_trans_start(mdd_object_child(obj));
 }
 
 static void mdd_trans_stop(struct mdd_device *mdd, void *handle)
 {
-        mdd->mdd_child->osd_ops->osd_trans_stop(handle);
+        mdd_child_ops(mdd)->osd_trans_stop(handle);
 }
 
 static int
 __mdd_object_create(struct mdd_device *mdd, struct mdd_object *pobj,
-                    struct context *uc_context, void *handle)
+                    struct mdd_object *child, struct context *uctxt,
+                    void *handle)
 {
         struct mdd_object *mdd_obj;
         struct lu_object *lu;
         int rc;
         ENTRY;
 
-        rc = mdd->mdd_child->osd_ops->osd_create_obj(mdd->mdd_child, mdd_obj_child(pobj),
-                                                     &lu, uctxt, handle);
+        rc = mdd_child_ops(mdd)->osd_object_create(mdd_object_child(pobj),
+                                                   mdd_object_child(child),
+                                                   uctxt, handle);
         /*XXX increase the refcount of the object or not?*/
-exit:
         RETURN(rc);
 }
 
 static int
-mdd_object_create(struct mdd_obj *pobj, struct context *uc_context)
+mdd_object_create(struct mdd_object *pobj, struct mdd_object *child,
+                  struct context *uctxt)
 {
-        struct mdd_device *mdd = mdo2mdd(pobj); 
+        struct mdd_device *mdd = mdo2mdd(pobj);
         void *handle = NULL;
         int rc;
         ENTRY;
@@ -194,14 +196,14 @@ mdd_object_create(struct mdd_obj *pobj, struct context *uc_context)
         if (!handle)
                 RETURN(-ENOMEM);
 
-        rc = __mdd_object_create(mdd, obj, uc_context, handle);
+        rc = __mdd_object_create(mdd, pobj, child, uctxt, handle);
 
         mdd_trans_stop(handle);
 
         RETURN(rc);
 }
 
-static int mdd_add_orphan(struct obd_device *obd, struct mdd_object *mdd_obj,
+static int mdd_add_orphan(struct obd_device *obd, struct mdd_object *obj,
                           void *handle)
 {
         int rc = 0;
@@ -211,19 +213,18 @@ static int mdd_add_orphan(struct obd_device *obd, struct mdd_object *mdd_obj,
 }
 
 static int
-_mdd_object_destroy(struct mdd_device *mdd, struct mdd_obj *obj,
+_mdd_object_destroy(struct mdd_device *mdd, struct mdd_object *obj,
                     void *handle)
 {
         int rc = 0;
 
-        rc = mdd->mdd_child->osd_ops->osd_object_destroy(mdd->mdd_child, 
-                                              mdd_object_child(obj), handle);
-
-        RETURN(rc); 
-}                
+        rc = mdd_child_ops(mdd)->osd_object_destroy(mdd_object_child(obj),
+                                                    handle);
+        RETURN(rc);
+}
 
-static int 
-mdd_object_destroy(struct mdd_object *pobj, struct mdd_object *obj)
+static int
+mdd_object_destroy(struct md_object *pobj, struct mdd_object *obj)
 {
         struct mdd_device *mdd = mdo2mdd(pobj);
         void *handle;
@@ -250,42 +251,39 @@ exit:
 }
 
 static void
-mdd_object_get(struct mdd_device *mdd, struct mdd_obj *obj)
+mdd_object_get(struct mdd_device *mdd, struct mdd_object *obj)
 {
-        mdd->mdd_child->osd_ops->osd_object_get(mdd->mdd_child,
-                                                mdd_object_child(obj));
+        mdd_child_ops(mdd)->osd_object_get(mdd_object_child(obj));
 }
 
 static int
-mdd_attr_get(struct mdd_device *mdd, struct mdd_obj *obj, void *buf,
+mdd_attr_get(struct mdd_device *mdd, struct mdd_object *obj, void *buf,
              int buf_len, const char *name, struct context *uc_context)
 {
         int rc;
         ENTRY;
 
         mdd_object_get(mdd, obj);
-        rc = mdd->mdd_child->osd_ops->osd_attr_get(mdd->mdd_child, 
-                                                   mdd_object_child(obj),
-                                                   buf, buf_len, name,
-                                                   uc_context);
+        rc = mdd_child_ops(mdd)->osd_attr_get(mdd_object_child(obj),
+                                              buf, buf_len, name,
+                                              uc_context);
         mdd_object_put(mdd, obj);
         RETURN(rc);
 }
 
 static int
-__mdd_attr_set(struct mdd_device *mdd, struct mdd_obj *obj, void *buf,
+__mdd_attr_set(struct mdd_device *mdd, struct mdd_object *obj, void *buf,
                int buf_len, const char *name, struct context *uc_context,
                void *handle)
 {
-        return mdd->mdd_child->osd_ops->osd_attr_set(mdd->mdd_child, 
-                                                     mdd_object_child(obj),
-                                                     buf, buf_len, 
-                                                     name, uc_context,
-                                                     handle);
+        return mdd_child_ops(ops)->osd_attr_set(mdd_object_child(obj),
+                                                buf, buf_len, 
+                                                name, uc_context,
+                                                handle);
 }
 
 static int 
-mdd_attr_set(struct mdd_device *mdd, struct mdd_obj *obj, void *buf,
+mdd_attr_set(struct mdd_device *mdd, struct mdd_object *obj, void *buf,
              int buf_len, const char *name, struct context *uc_context)
 {
         int  rc;
@@ -303,16 +301,18 @@ mdd_attr_set(struct mdd_device *mdd, struct mdd_obj *obj, void *buf,
         RETURN(rc);
 }
 
-
 static int 
-mdd_object_put(struct mdd_device *mdd, struct mdd_obj *obj)
+mdd_object_dec_check(struct mdd_device *mdd, struct mdd_object *obj)
+{ 
+        return mdd_child_ops(mdd)->osd_object_dec_check(mdd_object_child(obj));
+}
+
+static int
+mdd_object_put(struct mdd_device *mdd, struct mdd_object *obj)
 {
-        int nlink, rc = 0;       
+        int nlink, rc = 0;
  
-        mdd->mdd_child->osd_ops->osd_object_put(mdd->mdd_child,
-                                                mdd_object_child(obj));
-
-        if ((mdd_object_count(obj)) == 0) {
+        if ((mdd_object_dec_check(mdd, obj)) == 0) {
                 rc = mdd_attr_get(mdd, obj, &nlink, sizeof(nlink), 
                                   "NLINK", uc_context);
                 if (!rc)
@@ -320,7 +320,7 @@ mdd_object_put(struct mdd_device *mdd, struct mdd_obj *obj)
         }
         if (nlink == 0)
                 rc = mdd_object_destroy(mdd, obj);
-        
+
         RETURN(rc);
 }
 
@@ -329,27 +329,26 @@ static struct ll_fid *mdd_object_getfid(struct mdd_object *obj)
         return &(obj->mod_obj.mo_lu->lo_header->loh_fid);
 }
 
-static int 
-__mdd_index_insert(struct mdd_device *mdd, struct mdd_obj *obj,
-                   const char *name, struct mdd_obj *obj,
+static int
+__mdd_index_insert(struct mdd_device *mdd, struct mdd_object *pobj,
+                   struct mdd_object *obj, const char *name,
                    struct uc_context *uc_context, void *handle)
 {
-        mdd_object_get(mdd, mdd_pobj);
-        mdd_lock(mdd, mdd_pobj, WRITE_LOCK);
-        mdd_lock(mdd, mdd_obj, WRITE_LOCK);
+        mdd_object_get(mdd, pobj);
+        mdd_lock(mdd, pobj, WRITE_LOCK);
+        mdd_lock(mdd, obj, WRITE_LOCK);
 
-        mdd->mdd_child->osd_ops->osd_insert_index(mdd->mdd_child, 
-                                                  mdd_object_child(obj),
-                                                  name, mdd_object_getfid(obj), 
-                                                  uctxt, handle);
-        mdd_unlock(mdd, mdd_pobj, WRITE_LOCK);
-        mdd_unlock(mdd, mdd_obj, WRITE_LOCK);
-        mdd_put_obj(mdd, mdd_pobj);
+        mdd_child_ops(mdd)->osd_index_insert(mdd_object_child(pobj),
+                                             mdd_object_getfid(obj), name, 
+                                             uctxt, handle);
+        mdd_unlock(mdd, pobj, WRITE_LOCK);
+        mdd_unlock(mdd, obj, WRITE_LOCK);
+        mdd_put_obj(mdd, pobj);
 }
 
 static int
-mdd_index_insert(struct mdd_device *mdd, struct mdd_obj *pobj,
-                 const char *name, struct mdd_obj *obj,
+mdd_index_insert(struct mdd_device *mdd, struct mdd_object *pobj,
+                 struct mdd_object *obj, const char *name,
                  struct uc_context *uc_context)
 {
         void *handle = NULL;
@@ -359,33 +358,32 @@ mdd_index_insert(struct mdd_device *mdd, struct mdd_obj *pobj,
         if (!handle)
                 RETURN(-ENOMEM);
 
-        __mdd_index_insert(mdd, pobj, name, obj, uc_context, handle);
+        __mdd_index_insert(mdd, pobj, obj, name, uc_context, handle);
  
         mdd_trans_stop(mdd, handle);
 }
 
 static int 
 __mdd_index_delete(struct mdd_device *mdd, struct mdd_obj *pobj,
-                   const char *name, struct mdd_obj *obj,
+                   struct mdd_obj *obj, const char *name, 
                    struct uc_context *uc_context, void *handle)
 {
-        mdd_object_get(mdd, mdd_pobj);
-        mdd_lock(mdd, mdd_pobj, WRITE_LOCK);
-        mdd_lock(mdd, mdd_obj, WRITE_LOCK);
+        mdd_object_get(mdd, pobj);
+        mdd_lock(mdd, pobj, WRITE_LOCK);
+        mdd_lock(mdd, obj, WRITE_LOCK);
 
-        mdd->mdd_child->osd_ops->osd_insert_delete(mdd->mdd_child, 
-                                                   mdd_object_child(obj),
-                                                   name, mdd_object_getfid(obj), 
-                                                   uctxt, handle);
-        mdd_unlock(mdd, mdd_pobj, WRITE_LOCK);
-        mdd_unlock(mdd, mdd_obj, WRITE_LOCK);
-        mdd_put_obj(mdd, mdd_pobj);
+        mdd_child_ops(mdd)->osd_insert_delete(mdd_object_child(pobj),
+                                              mdd_object_getfid(obj), name, 
+                                              uctxt, handle);
+        mdd_unlock(mdd, pobj, WRITE_LOCK);
+        mdd_unlock(mdd, obj, WRITE_LOCK);
+        mdd_put_obj(mdd, pobj);
 
 }
 
 static int
 mdd_index_delete(struct mdd_device *obd, struct lustre_obj *pobj,
-                 const char *name, struct lustre_obj *obj,
+                 struct lustre_obj *obj, const char *name, 
                  struct uc_context *uc_context)
 {
         void *handle = NULL;
@@ -395,7 +393,7 @@ mdd_index_delete(struct mdd_device *obd, struct lustre_obj *pobj,
         if (!handle)
                 RETURN(-ENOMEM);
 
-        __mdd_index_delete(mdd, pobj, name, obj, uc_context, handle);
+        __mdd_index_delete(mdd, pobj, obj, name, uc_context, handle);
 
         mdd_trans_stop(handle);
 }
@@ -416,7 +414,7 @@ mdd_link(struct mdd_device *mdd, struct mdd_object *tgt_obj,
         mdd_lock(mdd, tgt_obj, WRITE_LOCK);
         mdd_lock(mdd, src_obj, WRITE_LOCK);
         
-        rc = __mdd_index_insert(mdd, tgt_obj, name, src_obj
+        rc = __mdd_index_insert(mdd, tgt_obj, name, src_obj,
                                 uctxt, handle);
         if (rc)
                 GOTO(trans_exit, rc);
@@ -429,8 +427,8 @@ mdd_link(struct mdd_device *mdd, struct mdd_object *tgt_obj,
                             uc_context, handle);
 
 exit:                          
-        mdd_unlock(tgt_obj->mdd_obj, WRITE_LOCK);
-        mdd_unlock(src_obj->mdd_obj, WRITE_LOCK);
+        mdd_unlock(mdd, tgt_obj, WRITE_LOCK);
+        mdd_unlock(mdd, src_obj, WRITE_LOCK);
         
         mdd_trans_stop(mdd, handle);
         RETURN(rc);
@@ -451,15 +449,16 @@ static void mdd_rename_unlock(struct mdd_device *mdd, struct mdd_object *src_pob
 }
 
 static int 
-int mdd_rename(struct mdd_device *mdd, struct mdd_object *src_pobj,
-               struct lustre_obj *tgt_pobj, struct lustre_obj *sobj,
-               const char *sname, struct lustre_obj, *tobj,
-               const char *tname, struct context *uctxt)
+mdd_rename(struct mdd_device *mdd, struct mdd_object *src_pobj,
+           struct lustre_obj *tgt_pobj, struct lustre_obj *sobj,
+           const char *sname, struct lustre_obj, *tobj,
+           const char *tname, struct context *uctxt)
 {
-        
+        void *handle = NULL;
         handle = mdd_trans_start(mdd, src_pobj);
         if (!handle)
-                GOTO(cleanup, rc);
+                RETURN(-ENOMEM);
         
         mdd_rename_lock(mdd, src_pobj, tgt_pobj, sobj, tobj);
        
@@ -484,74 +483,77 @@ cleanup:
         RETURN(rc);
 }
 
-static int mdd_fs_setup(struct mdd_device *mdd)
+static int
+mdd_mkdir(struct md_object *pobj, const char *name, struct md_object *child)
 {
-        return 0;
-}
-static int mdd_setup(struct mdd_device *mdd, obd_count len, void *buf)
-{
-        struct lprocfs_static_vars lvars;
-        struct lustre_cfg* lcfg = buf;
-        struct mds_obd *mds = &obd->u.mds;
-        struct lustre_mount_info *lmi;
-        struct vfsmount *mnt;
-        struct obd_uuid uuid;
-        __u8 *uuid_ptr;
-        char *options, *str, *label;
-        char ns_name[48];
-        unsigned long page;
+        struct mdd_device *mdd = mdo2mdd(obj);
+        struct context *context;
+        void *handle;
         int rc = 0;
         ENTRY;
 
+        handle = mdd_trans_start(mdd, obj);
+        if (!handle)
+                RETURN(-ENOMEM);
 
-        sema_init(&mdd->mdd_orphan_recovery_sem, 1);
-        sema_init(&mdd->mdd_epoch_sem, 1);
-        spin_lock_init(&mds->mds_transno_lock);
-        mds->mds_max_mdsize = sizeof(struct lov_mds_md);
-        mds->mds_max_cookiesize = sizeof(struct llog_cookie);
-        mds->mds_atime_diff = MAX_ATIME_DIFF;
+        mdd_lock(mdd, mdo2mddo(obj), WRITE_LOCK);
 
-        rc = mdd_fs_setup(mdd);
-        if (rc) {
-                CERROR("%s: MDS filesystem method init failed: rc = %d\n",
-                       obd->obd_name, rc);
-                GOTO(err_ns, rc);
-        }
+        rc = __mdd_object_create(mdd, mdo2mddo(obj), child, NULL, handle);
+        if (rc)
+                GOTO(cleanup, rc);
 
-        rc = lquota_setup(quota_interface, obd, lcfg);
+        rc = __mdd_index_insert(mdd, mdo2mddo(obj), pobj, child, name,
+                                NULL, handle);
         if (rc)
-                GOTO(err_fs, rc);
+                GOTO(cleanup, rc);
+cleanup:
+        mdd_trans_stop(mdd, obj);
+        mdd_unlock(mdd, md2mdo(obj), WRITE_LOCK);
+        RETURN(rc);
+}
+
+static int mdo_root_get(struct md_device *m, struct ll_fid *f)
+{
+        return 0;
+}
+
+struct md_device_operations mdd_ops{
+        .mdo_root_get   = mdd_root_get;
+        .mdo_mkdir      = mdd_mkdir;
+        .mdo_rename     = mdd_rename;
+        .mdo_link       = mdd_link;
+};
+
+static int mdd_fs_setup(struct mdd_device *mdd)
+{
+        return 0;
+}
 
+static int mdd_fs_cleanup(struct mdd_device *mdd)
+{
+        return 0;
+}
+
+static int mdd_setup(struct mdd_device *mdd, struct lustre_cfg* lcfg)
+{
+        int rc = 0;
+        ENTRY;
+
+        /*XXX should mdd care about this*/
+        mdd->mdd_max_mdsize = sizeof(struct lov_mds_md);
+        mdd->mdd_max_cookiesize = sizeof(struct llog_cookie);
+        mdd->mdd_atime_diff = MAX_ATIME_DIFF;
+
+        rc = mdd_fs_setup(mdd);
+        if (rc) 
+                GOTO(err, rc);
+        
         RETURN(rc);
-err_qctxt:
-        lquota_cleanup(quota_interface, obd);
-err_fs:
-        /* No extra cleanup needed for llog_init_commit_thread() */
+err:
         mdd_fs_cleanup(mdd);
         RETURN(rc);
 }
 
-static struct obd_ops mdt_ops = {
-        .o_owner           = THIS_MODULE,
-        .o_connect         = mdd_connect,
-        .o_reconnect       = mdd_reconnect,
-        .o_init_export     = mdd_init_export,
-        .o_destroy_export  = mdd_destroy_export,
-        .o_disconnect      = mdd_disconnect,
-        .o_setup           = mdd_setup,
-        .o_precleanup      = mdd_precleanup,
-        .o_cleanup         = mdd_cleanup,
-        .o_postrecov       = mdd_postrecov,
-        .o_statfs          = mdd_obd_statfs,
-        .o_iocontrol       = mdd_iocontrol,
-        .o_create          = mdd_obd_create,
-        .o_destroy         = mdd_obd_destroy,
-        .o_llog_init       = mdd_llog_init,
-        .o_llog_finish     = mdd_llog_finish,
-        .o_notify          = mdd_notify,
-        .o_health_check    = mdd_health_check,
-};
-
 static int __init mdd_mod_init(void)
 {
        return 0;
@@ -563,7 +565,7 @@ static void __exit mdd_mod_exit(void)
 }
 
 MODULE_AUTHOR("Cluster File Systems, Inc. <info@clusterfs.com>");
-MODULE_DESCRIPTION("Lustre Meta-data Target Prototype ("LUSTRE_MDD_NAME")");
+MODULE_DESCRIPTION("Lustre Meta-data Device Prototype ("LUSTRE_MDD_NAME")");
 MODULE_LICENSE("GPL");
 
 cfs_module(mdd, "0.0.2", mdd_mod_init, mdd_mod_exit);
index 358d7ee..b652bfd 100644 (file)
@@ -4,23 +4,53 @@
 #ifndef _MDD_INTERNAL_H
 #define _MDD_INTERNAL_H
 
+#define LUSTRE_MDD_NAME "mdd"
+#define LUSTRE_OSD_NAME "osd"
+
+/*the context of the mdd ops*/
+struct context {
+        const char      *name;
+        int             name_len;
+        __u32           mode;
+        int             flags;
+};
+
+struct osd_device_operations {
+        int   (*osd_object_lock)(struct lu_object *lu, __u32 mode);
+        int   (*osd_object_unlock)(struct lu_object *lu, __u32 mode);
+        void* (*osd_trans_start)(struct lu_object *lu); 
+        void  (*osd_trans_stop)(struct lu_object *lu);
+        int   (*osd_object_create)(struct lu_object *plu, struct lu_object *child,
+                                   struct context *context, void *handle);
+        int   (*osd_object_destroy)(struct lu_object *lu, void *handle); 
+        void  (*osd_object_get)(struct lu_object *lu);
+        int   (*osd_attr_get)(struct lu_object *lu, void *buf, int buf_len, 
+                              const char *name, struct context *context); 
+        int   (*osd_attr_set)(struct lu_object *lu, void *buf, int buf_len,
+                              const char *name, struct context *context,
+                              void *handle);
+        int   (*osd_object_dec_check)(struct lu_object *lu);
+        int   (*osd_index_insert)(struct lu_object *lu, struct ll_fid *fid, 
+                                  const char *name, struct context *uctxt, 
+                                  void *handle);
+        int   (*osd_insert_delete)(struct lu_object *lu, struct ll_fid *fid,
+                                   const char *name,  struct context *uctxt, 
+                                   void *handle);
+};
+
 struct osd_device {
        struct lu_device              osd_lu_dev;
        struct osd_device_operations *osd_ops;
-}
+};
 
-struct osd_device_operations {
-        int (*osd_object_lock)(struct lu_object *lu __u32 mode);
-        int (*osd_object_unlock)(struct lu_object *lu, __32 mode);
-        int (*osd_trans_start)(struct lu_object *lu); 
-        int (*osd_trans_stop)(struct lu_object *lu);
-}
-#define LUSTRE_MDD_NAME "mdd"
-#define LUSTRE_OSD_NAME "osd"
+struct md_device {
+        struct lu_device             md_lu_dev;
+        struct md_device_operations *md_ops;
+};
 
 struct mdd_device {
         /* NB this field MUST be first */
-        struct md_device                 *mdd_md_device;
+        struct md_device                 mdd_md_dev;
         struct osd_device                *mdd_child;
         int                              mdd_max_mddize;
         int                              mdd_max_cookiesize;
@@ -30,7 +60,6 @@ struct mdd_device {
         __u64                            mdd_mount_count;
         __u64                            mdd_io_epoch;
         unsigned long                    mdd_atime_diff;
-        struct semaphore                 mdd_epoch_sem;
         struct ll_fid                    mdd_rootfid;
         struct lr_server_data           *mdd_server_data;
         struct dentry                   *mdd_pending_dir;
@@ -38,11 +67,23 @@ struct mdd_device {
         struct dentry                   *mdd_objects_dir;
         struct llog_handle              *mdd_cfg_llh;
         struct file                     *mdd_health_check_filp;
-        struct lustre_quota_info         mdd_quota_info;
-        struct semaphore                 mdd_qonoff_sem;
         struct semaphore                 mdd_health_sem;
         unsigned long                    mdd_lov_objids_valid:1,
                                          mdd_fl_user_xattr:1,
                                          mdd_fl_acl:1;
 };
+
+struct md_object {
+        struct lu_object mo_lu;
+};
+
+struct mdd_object {
+        struct md_object  mod_obj;
+};
+
+struct osd_object {
+        struct lu_object  oo_lu;
+        struct dentry    *oo_dentry;
+};
+
 #endif