From: wangdi Date: Mon, 3 Apr 2006 10:36:45 +0000 (+0000) Subject: Branch: b_new_cmd X-Git-Tag: v1_8_0_110~486^2~2119 X-Git-Url: https://git.whamcloud.com/?a=commitdiff_plain;h=f523f281c1470e4cbdc5b9bcd160418ea71ad79e;p=fs%2Flustre-release.git Branch: b_new_cmd update mdd prototype --- diff --git a/lustre/mdd/mdd_handler.c b/lustre/mdd/mdd_handler.c index 2586a29..84527ac 100644 --- a/lustre/mdd/mdd_handler.c +++ b/lustre/mdd/mdd_handler.c @@ -27,7 +27,7 @@ #ifndef EXPORT_SYMTAB # define EXPORT_SYMTAB #endif -#define DEBUG_SUBSYSTEM S_MDD +#define DEBUG_SUBSYSTEM S_MDS #include @@ -38,18 +38,6 @@ #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_device* mdd_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. "); -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); diff --git a/lustre/mdd/mdd_internal.h b/lustre/mdd/mdd_internal.h index 358d7ee..b652bfd 100644 --- a/lustre/mdd/mdd_internal.h +++ b/lustre/mdd/mdd_internal.h @@ -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