Whamcloud - gitweb
LU-666 mdd depends on ldiskfs-only dynlocks feature
authorBrian Behlendorf <behlendorf1@llnl.gov>
Wed, 24 Aug 2011 17:22:27 +0000 (10:22 -0700)
committerOleg Drokin <green@whamcloud.com>
Thu, 13 Oct 2011 19:31:29 +0000 (15:31 -0400)
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 <behlendorf1@llnl.gov>
Reviewed-on: http://review.whamcloud.com/1348
Reviewed-by: wangdi <di.wang@whamcloud.com>
Reviewed-by: Liang Zhen <liang@whamcloud.com>
Reviewed-by: Mikhail Pershin <tappro@whamcloud.com>
Tested-by: Hudson
Reviewed-by: Andreas Dilger <adilger@whamcloud.com>
Tested-by: Maloo <whamcloud.maloo@gmail.com>
lustre/mdd/mdd_internal.h
lustre/mdd/mdd_lock.c

index d436a3e..36bede9 100644 (file)
@@ -48,7 +48,6 @@
 #include <dt_object.h>
 #include <linux/sched.h>
 #include <linux/capability.h>
-#include <linux/dynlocks.h>
 #ifdef HAVE_QUOTA_SUPPORT
 # include <lustre_quota.h>
 #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);
index f126cc1..af762e4 100644 (file)
@@ -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);