From 69efa174743f5ad2425c0ccd951961ae356fed0d Mon Sep 17 00:00:00 2001 From: Brian Behlendorf Date: Wed, 24 Aug 2011 10:22:27 -0700 Subject: [PATCH] LU-666 mdd depends on ldiskfs-only dynlocks feature As discussed in Lustre bugzilla 22435 dynlocks are provided by the ldiskfs and are not a generic facility. They should be removed from the mdd-level to allow building --without-ldiskfs per Andreas's comment in 22435: https://bugzilla.lustre.org/show_bug.cgi?id=22435#c3 This change converts the instances of "struct dynlock_handle *" to a "void *" pointer which is safe because they are never dereferenced at this level. It also wraps the "struct dynlock" entry in the mdd_object with MDD_DISABLE_PDO_LOCK. This effectively limits all direct dynlock usage to the !MDD_DISABLE_PDO_LOCK case which is unconditionally disabled in the code. Presumable this code will simply be removed at some point which will fully resolve the issue. Change-Id: I7c8d2fb04b31736782e5f6ea2ff6b631b475fb91 Signed-off-by: Brian Behlendorf Reviewed-on: http://review.whamcloud.com/1348 Reviewed-by: wangdi Reviewed-by: Liang Zhen Reviewed-by: Mikhail Pershin Tested-by: Hudson Reviewed-by: Andreas Dilger Tested-by: Maloo --- lustre/mdd/mdd_internal.h | 19 ++++++++----------- lustre/mdd/mdd_lock.c | 34 +++++++++++++--------------------- 2 files changed, 21 insertions(+), 32 deletions(-) diff --git a/lustre/mdd/mdd_internal.h b/lustre/mdd/mdd_internal.h index d436a3e..36bede9 100644 --- a/lustre/mdd/mdd_internal.h +++ b/lustre/mdd/mdd_internal.h @@ -48,7 +48,6 @@ #include #include #include -#include #ifdef HAVE_QUOTA_SUPPORT # include #endif @@ -164,7 +163,9 @@ struct mdd_object { __u32 mod_valid; __u64 mod_cltime; unsigned long mod_flags; +#ifndef MDD_DISABLE_PDO_LOCK struct dynlock mod_pdlock; +#endif #ifdef CONFIG_LOCKDEP /* "dep_map" name is assumed by lockdep.h macros. */ struct lockdep_map dep_map; @@ -282,18 +283,14 @@ int mdd_write_locked(const struct lu_env *env, struct mdd_object *obj); void mdd_pdlock_init(struct mdd_object *obj); unsigned long mdd_name2hash(const char *name); -struct dynlock_handle *mdd_pdo_write_lock(const struct lu_env *env, - struct mdd_object *obj, - const char *name, - enum mdd_object_role role); -struct dynlock_handle *mdd_pdo_read_lock(const struct lu_env *env, - struct mdd_object *obj, - const char *name, - enum mdd_object_role role); +void *mdd_pdo_write_lock(const struct lu_env *env, struct mdd_object *obj, + const char *name, enum mdd_object_role role); +void *mdd_pdo_read_lock(const struct lu_env *env, struct mdd_object *obj, + const char *name, enum mdd_object_role role); void mdd_pdo_write_unlock(const struct lu_env *env, struct mdd_object *obj, - struct dynlock_handle *dlh); + void *dlh); void mdd_pdo_read_unlock(const struct lu_env *env, struct mdd_object *obj, - struct dynlock_handle *dlh); + void *dlh); /* mdd_dir.c */ int mdd_is_subdir(const struct lu_env *env, struct md_object *mo, const struct lu_fid *fid, struct lu_fid *sfid); diff --git a/lustre/mdd/mdd_lock.c b/lustre/mdd/mdd_lock.c index f126cc1..af762e4 100644 --- a/lustre/mdd/mdd_lock.c +++ b/lustre/mdd/mdd_lock.c @@ -94,36 +94,32 @@ unsigned long mdd_name2hash(const char *name) /* Methods for parallel directory locking */ #if MDD_DISABLE_PDO_LOCK -static struct dynlock_handle *pdo_handle = (struct dynlock_handle *)0xbabecafe; +static void *pdo_handle = (void *)0xbabecafe; void mdd_pdlock_init(struct mdd_object *obj) { } -struct dynlock_handle *mdd_pdo_write_lock(const struct lu_env *env, - struct mdd_object *obj, - const char *name, - enum mdd_object_role role) +void *mdd_pdo_write_lock(const struct lu_env *env, struct mdd_object *obj, + const char *name, enum mdd_object_role role) { return pdo_handle; } -struct dynlock_handle *mdd_pdo_read_lock(const struct lu_env *env, - struct mdd_object *obj, - const char *name, - enum mdd_object_role role) +void *mdd_pdo_read_lock(const struct lu_env *env, struct mdd_object *obj, + const char *name, enum mdd_object_role role) { return pdo_handle; } void mdd_pdo_write_unlock(const struct lu_env *env, struct mdd_object *obj, - struct dynlock_handle *dlh) + void *dlh) { LASSERT(dlh == pdo_handle); } void mdd_pdo_read_unlock(const struct lu_env *env, struct mdd_object *obj, - struct dynlock_handle *dlh) + void *dlh) { LASSERT(dlh == pdo_handle); } @@ -177,10 +173,8 @@ void mdd_pdlock_init(struct mdd_object *obj) mdd_lockdep_init(obj); } -struct dynlock_handle *mdd_pdo_write_lock(const struct lu_env *env, - struct mdd_object *obj, - const char *name, - enum mdd_object_role role) +void *mdd_pdo_write_lock(const struct lu_env *env, struct mdd_object *obj, + const char *name, enum mdd_object_role role) { struct dynlock_handle *handle; unsigned long value = mdd_name2hash(name); @@ -191,10 +185,8 @@ struct dynlock_handle *mdd_pdo_write_lock(const struct lu_env *env, return handle; } -struct dynlock_handle *mdd_pdo_read_lock(const struct lu_env *env, - struct mdd_object *obj, - const char *name, - enum mdd_object_role role) +void *mdd_pdo_read_lock(const struct lu_env *env, struct mdd_object *obj, + const char *name, enum mdd_object_role role) { struct dynlock_handle *handle; unsigned long value = mdd_name2hash(name); @@ -205,14 +197,14 @@ struct dynlock_handle *mdd_pdo_read_lock(const struct lu_env *env, } void mdd_pdo_write_unlock(const struct lu_env *env, struct mdd_object *obj, - struct dynlock_handle *dlh) + void *dlh) { mdd_lockdep_pd_release(obj); return dynlock_unlock(&obj->mod_pdlock, dlh); } void mdd_pdo_read_unlock(const struct lu_env *env, struct mdd_object *obj, - struct dynlock_handle *dlh) + void *dlh) { mdd_lockdep_pd_release(obj); return dynlock_unlock(&obj->mod_pdlock, dlh); -- 1.8.3.1