From: tappro Date: Fri, 7 Apr 2006 14:28:07 +0000 (+0000) Subject: update CMM device X-Git-Tag: v1_8_0_110~486^2~2075 X-Git-Url: https://git.whamcloud.com/?a=commitdiff_plain;h=44fba671c66e2602b72e8ffb8327172edb283398;p=fs%2Flustre-release.git update CMM device --- diff --git a/lustre/cmm/cmm_device.c b/lustre/cmm/cmm_device.c index 64deb07..d9743c7 100644 --- a/lustre/cmm/cmm_device.c +++ b/lustre/cmm/cmm_device.c @@ -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 }; diff --git a/lustre/cmm/cmm_internal.h b/lustre/cmm/cmm_internal.h index 9a7690e..01c5d13 100644 --- a/lustre/cmm/cmm_internal.h +++ b/lustre/cmm/cmm_internal.h @@ -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) { diff --git a/lustre/cmm/cmm_object.c b/lustre/cmm/cmm_object.c index 07602cc..58041b0 100644 --- a/lustre/cmm/cmm_object.c +++ b/lustre/cmm/cmm_object.c @@ -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; }