#include "cmm_internal.h"
static struct md_object_operations cmm_mo_ops;
+static struct md_dir_operations cmm_dir_ops;
static struct lu_object_operations cmm_obj_ops;
static int cmm_fld_lookup(struct lu_fid *fid)
o = &mo->cmo_obj.mo_lu;
lu_object_init(o, NULL, d);
mo->cmo_obj.mo_ops = &cmm_mo_ops;
+ mo->cmo_obj.mo_dir_ops = &cmm_dir_ops;
o->lo_ops = &cmm_obj_ops;
RETURN(o);
} else
struct cmm_object *cmm_parent = md2cmm_obj(md_parent);
struct md_object *next = cmm2child_obj(cmm_parent);
- return next->mo_ops->moo_mkdir(ctxt, attr, next, name, md_child);
+ return next->mo_dir_ops->mdo_mkdir(ctxt, attr, next, name, md_child);
}
int cmm_attr_get(struct lu_context *ctxt, struct md_object *obj,
return next->mo_ops->moo_attr_get(ctxt, next, attr);
}
+static struct md_dir_operations cmm_dir_ops = {
+ .mdo_mkdir = cmm_mkdir
+// .mdo_rename = cmm_rename,
+// .mdo_link = cmm_link,
+};
+
static struct md_object_operations cmm_mo_ops = {
- .moo_mkdir = cmm_mkdir,
.moo_attr_get = cmm_attr_get,
// .moo_attr_set = cmm_attr_set,
-// .moo_rename = cmm_rename,
-// .moo_link = cmm_link,
// .moo_xattr_get = cmm_xattr_get,
// .moo_xattr_set = cmm_xattr_set,
};
struct fld_info fld_info;
-int fld_handle_insert(struct fld_info *fld_info, fidseq_t seq_num, mdsno_t mdsno)
+int fld_handle_insert(struct fld_info *fld_info,
+ fidseq_t seq_num, mdsno_t mdsno)
{
handle_t *handle = NULL;
+ return 0;
return iam_insert(handle, fld_info->fi_container,
(struct iam_key *)&seq_num, (struct iam_rec *)&mdsno);
}
-int fld_handle_delete(struct fld_info *fld_info, fidseq_t seq_num, mdsno_t mds_num)
+int fld_handle_delete(struct fld_info *fld_info,
+ fidseq_t seq_num, mdsno_t mds_num)
{
handle_t *handle = NULL;
+ return 0;
return iam_delete(handle, fld_info->fi_container,
(struct iam_key *)&seq_num);
}
-int fld_handle_lookup(struct fld_info *fld_info, fidseq_t seq_num, mdsno_t *mds_num)
+int fld_handle_lookup(struct fld_info *fld_info,
+ fidseq_t seq_num, mdsno_t *mds_num)
{
mdsno_t mdsno;
int result;
+ return 0;
result = iam_lookup(fld_info->fi_container, (struct iam_key *)&seq_num,
(struct iam_rec *)&mdsno);
if (result == 0)
int rc;
ENTRY;
- fld_file = filp_open("/fld", O_RDWR, S_IRWXU);
+ fld_file = filp_open("/dev/null", O_RDWR, S_IRWXU);
/* sanity and security checks... */
OBD_ALLOC(fld_info->fi_container, sizeof(struct iam_container));
if (!fld_info->fi_container)
RETURN(-ENOMEM);
- rc =iam_container_init(fld_info->fi_container, &fld_param,
- fld_file->f_dentry->d_inode);
+ rc = iam_container_init(fld_info->fi_container, &fld_param,
+ fld_file->f_dentry->d_inode);
RETURN(rc);
}
void fld_info_fini(struct fld_info *fld_info)
{
iam_container_fini(fld_info->fi_container);
- OBD_FREE(fld_info->fi_container, sizeof(struct iam_container));
+ OBD_FREE(fld_info->fi_container, sizeof(struct iam_container));
OBD_FREE_PTR(fld_info);
}
struct md_device_operations;
struct md_object;
+/*
+ * Operations implemented for each md object (both directory and leaf).
+ */
struct md_object_operations {
-
- /* meta-data object operations related handlers */
- int (*moo_mkdir)(struct lu_context *ctxt, struct lu_attr*,
- struct md_object *obj,
- const char *name, struct md_object *child);
-
- int (*moo_rename)(struct lu_context *ctxt, struct md_object *spobj,
- struct md_object *tpobj, struct md_object *sobj,
- const char *sname, struct md_object *tobj,
- const char *tname);
-
- int (*moo_link)(struct lu_context *ctxt, struct md_object *tobj,
- struct md_object *sobj, const char *name);
-
int (*moo_attr_get)(struct lu_context *ctxt, struct md_object *dt,
struct lu_attr *attr);
int (*moo_attr_set)(struct lu_context *ctxt, struct md_object *dt,
void *buf, int buf_len, const char *name);
};
+/*
+ * Operations implemented for each directory object.
+ */
+struct md_dir_operations {
+ int (*mdo_mkdir)(struct lu_context *ctxt, struct lu_attr *attr,
+ struct md_object *obj,
+ const char *name, struct md_object *child);
+
+ int (*mdo_rename)(struct lu_context *ctxt, struct md_object *spobj,
+ struct md_object *tpobj, struct md_object *sobj,
+ const char *sname, struct md_object *tobj,
+ const char *tname);
+
+ int (*mdo_link)(struct lu_context *ctxt, struct md_object *tobj,
+ struct md_object *sobj, const char *name);
+
+};
+
struct md_device_operations {
/* method for getting/setting device wide back stored config data, like
* last used meta-sequence, etc. */
struct md_object {
struct lu_object mo_lu;
struct md_object_operations *mo_ops;
+ struct md_dir_operations *mo_dir_ops;
};
static inline int lu_device_is_md(const struct lu_device *d)
struct mdd_object *obj, enum dt_lock_mode mode);
static struct md_object_operations mdd_obj_ops;
+static struct md_dir_operations mdd_dir_ops;
static struct lu_object_operations mdd_lu_obj_ops;
static int lu_device_is_mdd(struct lu_device *d)
o = &mdo->mod_obj.mo_lu;
lu_object_init(o, NULL, d);
mdo->mod_obj.mo_ops = &mdd_obj_ops;
+ mdo->mod_obj.mo_dir_ops = &mdd_dir_ops;
o->lo_ops = &mdd_lu_obj_ops;
return &mdo->mod_obj.mo_lu;
} else
.mdo_statfs = mdd_statfs
};
+static struct md_dir_operations mdd_dir_ops = {
+ .mdo_mkdir = mdd_mkdir,
+ .mdo_rename = mdd_rename,
+ .mdo_link = mdd_link
+};
+
static struct md_object_operations mdd_obj_ops = {
- .moo_mkdir = mdd_mkdir,
- .moo_rename = mdd_rename,
- .moo_link = mdd_link,
.moo_attr_get = mdd_attr_get,
.moo_attr_set = mdd_attr_set,
.moo_xattr_get = mdd_xattr_get,
if (!IS_ERR(child)) {
struct md_object *next = mdt_object_child(parent);
- result = next->mo_ops->moo_mkdir(info->mti_ctxt,
- &info->mti_attr,
- next, info->mti_rr.rr_name,
- mdt_object_child(child));
+ result = next->mo_dir_ops->mdo_mkdir(info->mti_ctxt,
+ &info->mti_attr,
+ next, info->mti_rr.rr_name,
+ mdt_object_child(child));
mdt_object_put(info->mti_ctxt, child);
} else
result = PTR_ERR(child);