From 99c584ddf3121e98ca49578f81b4c635fadb9f56 Mon Sep 17 00:00:00 2001 From: "John L. Hammond" Date: Wed, 13 Jun 2012 11:20:12 -0500 Subject: [PATCH] LU-1518 mdd: Fixup mdd_{obf,dot_lustre}_obj_ops. Define several missing md_object ops for .lustre/fid. Unify attribute handling for .lustre with that of normal md_objects. Change-Id: I892904af4ef01b3687e60a41250b018d67c86734 Signed-off-by: John L. Hammond Reviewed-on: http://review.whamcloud.com/3103 Tested-by: Hudson Reviewed-by: Andreas Dilger Reviewed-by: wangdi Reviewed-by: Lai Siyao Reviewed-by: Alex Zhuravlev Tested-by: Maloo --- lustre/mdd/mdd_device.c | 67 +++++++++++++++++++++++++++++------------------ lustre/mdd/mdd_internal.h | 4 +++ lustre/mdd/mdd_object.c | 8 +++--- 3 files changed, 49 insertions(+), 30 deletions(-) diff --git a/lustre/mdd/mdd_device.c b/lustre/mdd/mdd_device.c index 75abe60..5b1c230 100644 --- a/lustre/mdd/mdd_device.c +++ b/lustre/mdd/mdd_device.c @@ -459,21 +459,6 @@ static int dot_lustre_mdd_permission(const struct lu_env *env, return 0; } -static int dot_lustre_mdd_attr_get(const struct lu_env *env, - struct md_object *obj, struct md_attr *ma) -{ - struct mdd_object *mdd_obj = md2mdd_obj(obj); - - return mdd_attr_get_internal_locked(env, mdd_obj, ma); -} - -static int dot_lustre_mdd_attr_set(const struct lu_env *env, - struct md_object *obj, - const struct md_attr *ma) -{ - return -EPERM; -} - static int dot_lustre_mdd_xattr_get(const struct lu_env *env, struct md_object *obj, struct lu_buf *buf, const char *name) @@ -581,8 +566,8 @@ static int dot_file_unlock(const struct lu_env *env, struct md_object *obj, static struct md_object_operations mdd_dot_lustre_obj_ops = { .moo_permission = dot_lustre_mdd_permission, - .moo_attr_get = dot_lustre_mdd_attr_get, - .moo_attr_set = dot_lustre_mdd_attr_set, + .moo_attr_get = mdd_attr_get, + .moo_attr_set = mdd_attr_set, .moo_xattr_get = dot_lustre_mdd_xattr_get, .moo_xattr_list = dot_lustre_mdd_xattr_list, .moo_xattr_set = dot_lustre_mdd_xattr_set, @@ -723,8 +708,7 @@ static int obf_attr_get(const struct lu_env *env, struct md_object *obj, /* "fid" is a virtual object and hence does not have any "real" * attributes. So we reuse attributes of .lustre for "fid" dir */ ma->ma_need |= MA_INODE; - rc = dot_lustre_mdd_attr_get(env, &mdd->mdd_dot_lustre->mod_obj, - ma); + rc = mdd_attr_get(env, &mdd->mdd_dot_lustre->mod_obj, ma); if (rc) return rc; ma->ma_valid |= MA_INODE; @@ -760,6 +744,12 @@ static int obf_attr_set(const struct lu_env *env, struct md_object *obj, return -EPERM; } +static int obf_xattr_list(const struct lu_env *env, + struct md_object *obj, struct lu_buf *buf) +{ + return 0; +} + static int obf_xattr_get(const struct lu_env *env, struct md_object *obj, struct lu_buf *buf, const char *name) @@ -767,6 +757,21 @@ static int obf_xattr_get(const struct lu_env *env, return 0; } +static int obf_xattr_set(const struct lu_env *env, + struct md_object *obj, + const struct lu_buf *buf, const char *name, + int fl) +{ + return -EPERM; +} + +static int obf_xattr_del(const struct lu_env *env, + struct md_object *obj, + const char *name) +{ + return -EPERM; +} + static int obf_mdd_open(const struct lu_env *env, struct md_object *obj, int flags) { @@ -804,14 +809,24 @@ static int obf_path(const struct lu_env *env, struct md_object *obj, return -ENOSYS; } +static dt_obj_version_t obf_version_get(const struct lu_env *env, + struct md_object *obj) +{ + return 0; +} + static struct md_object_operations mdd_obf_obj_ops = { - .moo_attr_get = obf_attr_get, - .moo_attr_set = obf_attr_set, - .moo_xattr_get = obf_xattr_get, - .moo_open = obf_mdd_open, - .moo_close = obf_mdd_close, - .moo_readpage = obf_mdd_readpage, - .moo_path = obf_path + .moo_attr_get = obf_attr_get, + .moo_attr_set = obf_attr_set, + .moo_xattr_list = obf_xattr_list, + .moo_xattr_get = obf_xattr_get, + .moo_xattr_set = obf_xattr_set, + .moo_xattr_del = obf_xattr_del, + .moo_open = obf_mdd_open, + .moo_close = obf_mdd_close, + .moo_readpage = obf_mdd_readpage, + .moo_version_get = obf_version_get, + .moo_path = obf_path }; /** diff --git a/lustre/mdd/mdd_internal.h b/lustre/mdd/mdd_internal.h index bdeb805..d2ab7b82 100644 --- a/lustre/mdd/mdd_internal.h +++ b/lustre/mdd/mdd_internal.h @@ -219,6 +219,10 @@ int mdd_get_md_locked(const struct lu_env *env, struct mdd_object *obj, int mdd_data_get(const struct lu_env *env, struct mdd_object *obj, void **data); int mdd_la_get(const struct lu_env *env, struct mdd_object *obj, struct lu_attr *la, struct lustre_capa *capa); +int mdd_attr_get(const struct lu_env *env, struct md_object *obj, + struct md_attr *ma); +int mdd_attr_set(const struct lu_env *env, struct md_object *obj, + const struct md_attr *ma); int mdd_attr_set_internal(const struct lu_env *env, struct mdd_object *obj, struct lu_attr *attr, diff --git a/lustre/mdd/mdd_object.c b/lustre/mdd/mdd_object.c index ccea39b..a8dbadb 100644 --- a/lustre/mdd/mdd_object.c +++ b/lustre/mdd/mdd_object.c @@ -851,8 +851,8 @@ int mdd_attr_get_internal_locked(const struct lu_env *env, /* * No permission check is needed. */ -static int mdd_attr_get(const struct lu_env *env, struct md_object *obj, - struct md_attr *ma) +int mdd_attr_get(const struct lu_env *env, struct md_object *obj, + struct md_attr *ma) { struct mdd_object *mdd_obj = md2mdd_obj(obj); int rc; @@ -1633,8 +1633,8 @@ static int mdd_declare_attr_set(const struct lu_env *env, } /* set attr and LOV EA at once, return updated attr */ -static int mdd_attr_set(const struct lu_env *env, struct md_object *obj, - const struct md_attr *ma) +int mdd_attr_set(const struct lu_env *env, struct md_object *obj, + const struct md_attr *ma) { struct mdd_object *mdd_obj = md2mdd_obj(obj); struct mdd_device *mdd = mdo2mdd(obj); -- 1.8.3.1