From: tappro Date: Wed, 12 Apr 2006 13:33:51 +0000 (+0000) Subject: change child getting from macros to inline X-Git-Tag: v1_8_0_110~486^2~2035 X-Git-Url: https://git.whamcloud.com/?a=commitdiff_plain;h=7082ae940f788c1a546e2ef8442ddfcd4e1a8bd0;p=fs%2Flustre-release.git change child getting from macros to inline add attr_get support --- diff --git a/lustre/cmm/cmm_device.c b/lustre/cmm/cmm_device.c index ff1e9da..24d3f71 100644 --- a/lustre/cmm/cmm_device.c +++ b/lustre/cmm/cmm_device.c @@ -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. "); 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); diff --git a/lustre/cmm/cmm_internal.h b/lustre/cmm/cmm_internal.h index bfc6eff..53226a7 100644 --- a/lustre/cmm/cmm_internal.h +++ b/lustre/cmm/cmm_internal.h @@ -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 */ diff --git a/lustre/cmm/cmm_object.c b/lustre/cmm/cmm_object.c index 202531e..3fceb2d 100644 --- a/lustre/cmm/cmm_object.c +++ b/lustre/cmm/cmm_object.c @@ -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; +}