Whamcloud - gitweb
LU-5560 obd: reserve connection flag OBD_CONNECT2_FILE_SECCTX
[fs/lustre-release.git] / libcfs / libcfs / libcfs_lock.c
index 747337f..c6ba9e7 100644 (file)
@@ -21,7 +21,7 @@
  * GPL HEADER END
  */
 /* Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
- * Copyright (c) 2012, Intel Corporation.
+ * Copyright (c) 2012, 2015, Intel Corporation.
  */
 /*
  * This file is part of Lustre, http://www.lustre.org/
@@ -54,7 +54,8 @@ EXPORT_SYMBOL(cfs_percpt_lock_free);
  * reason we always allocate cacheline-aligned memory block.
  */
 struct cfs_percpt_lock *
-cfs_percpt_lock_alloc(struct cfs_cpt_table *cptab)
+cfs_percpt_lock_create(struct cfs_cpt_table *cptab,
+                      struct lock_class_key *keys)
 {
        struct cfs_percpt_lock  *pcl;
        spinlock_t              *lock;
@@ -72,12 +73,20 @@ cfs_percpt_lock_alloc(struct cfs_cpt_table *cptab)
                return NULL;
        }
 
-       cfs_percpt_for_each(lock, i, pcl->pcl_locks)
+       if (keys == NULL) {
+               CWARN("Cannot setup class key for percpt lock, you may see "
+                     "recursive locking warnings which are actually fake.\n");
+       }
+
+       cfs_percpt_for_each(lock, i, pcl->pcl_locks) {
                spin_lock_init(lock);
+               if (keys != NULL)
+                       lockdep_set_class(lock, &keys[i]);
+       }
 
        return pcl;
 }
-EXPORT_SYMBOL(cfs_percpt_lock_alloc);
+EXPORT_SYMBOL(cfs_percpt_lock_create);
 
 /**
  * lock a CPU partition
@@ -146,44 +155,3 @@ __releases(pcl->pcl_locks)
        }
 }
 EXPORT_SYMBOL(cfs_percpt_unlock);
-
-/** free cpu-partition refcount */
-void
-cfs_percpt_atomic_free(atomic_t **refs)
-{
-       cfs_percpt_free(refs);
-}
-EXPORT_SYMBOL(cfs_percpt_atomic_free);
-
-/** allocate cpu-partition refcount with initial value @init_val */
-atomic_t **
-cfs_percpt_atomic_alloc(struct cfs_cpt_table *cptab, int init_val)
-{
-       atomic_t        **refs;
-       atomic_t        *ref;
-       int             i;
-
-       refs = cfs_percpt_alloc(cptab, sizeof(*ref));
-       if (refs == NULL)
-               return NULL;
-
-       cfs_percpt_for_each(ref, i, refs)
-               atomic_set(ref, init_val);
-       return refs;
-}
-EXPORT_SYMBOL(cfs_percpt_atomic_alloc);
-
-/** return sum of cpu-partition refs */
-int
-cfs_percpt_atomic_summary(atomic_t **refs)
-{
-       atomic_t        *ref;
-       int             i;
-       int             val = 0;
-
-       cfs_percpt_for_each(ref, i, refs)
-               val += atomic_read(ref);
-
-       return val;
-}
-EXPORT_SYMBOL(cfs_percpt_atomic_summary);