Whamcloud - gitweb
LU-2792 fld: add dot_seq into in_fldb check
[fs/lustre-release.git] / lustre / include / lu_ref.h
index 4125930..1797b0d 100644 (file)
@@ -1,9 +1,9 @@
-/* -*- mode: c; c-basic-offset: 8; indent-tabs-mode: nil; -*-
- * vim:expandtab:shiftwidth=8:tabstop=8:
- *
- * Copyright 2008 Sun Microsystems, Inc.  All rights reserved.
+/*
+ * Copyright (c) 2008, 2010, Oracle and/or its affiliates. All rights reserved.
  * Use is subject to license terms.
  *
+ * Copyright (c) 2012, Intel Corporation.
+ *
  *   Author: Nikita Danilov <nikita.danilov@sun.com>
  *
  *   This file is part of Lustre, http://www.lustre.org.
@@ -120,13 +120,42 @@ struct lu_ref_link;
  * etc.) refer to.
  */
 struct lu_ref {
-        spinlock_t       lf_guard;
-        struct list_head lf_list;
-        int              lf_failed;
+       /**
+        * Spin-lock protecting lu_ref::lf_list.
+        */
+       spinlock_t              lf_guard;
+        /**
+         * List of all outstanding references (each represented by struct
+         * lu_ref_link), pointing to this object.
+         */
+        cfs_list_t           lf_list;
+        /**
+         * # of links.
+         */
+        short                lf_refs;
+        /**
+         * Flag set when lu_ref_add() failed to allocate lu_ref_link. It is
+         * used to mask spurious failure of the following lu_ref_del().
+         */
+        short                lf_failed;
+        /**
+         * flags - attribute for the lu_ref, for pad and future use.
+         */
+        short                lf_flags;
+        /**
+         * Where was I initialized?
+         */
+        short                lf_line;
+        const char          *lf_func;
+        /**
+         * Linkage into a global list of all lu_ref's (lu_ref_refs).
+         */
+        cfs_list_t           lf_linkage;
 };
 
-void lu_ref_init(struct lu_ref *ref);
-void lu_ref_fini(struct lu_ref *ref);
+void lu_ref_init_loc(struct lu_ref *ref, const char *func, const int line);
+void lu_ref_fini    (struct lu_ref *ref);
+#define lu_ref_init(ref) lu_ref_init_loc(ref, __FUNCTION__, __LINE__)
 
 struct lu_ref_link *lu_ref_add       (struct lu_ref *ref, const char *scope,
                                       const void *source);
@@ -142,6 +171,8 @@ void lu_ref_del_at                   (struct lu_ref *ref,
                                       struct lu_ref_link *link,
                                       const char *scope, const void *source);
 void lu_ref_print                    (const struct lu_ref *ref);
+void lu_ref_print_all                (void);
+
 #else /* !USE_LU_REF */
 
 struct lu_ref  {};
@@ -196,6 +227,10 @@ static inline void lu_ref_global_fini(void)
 static inline void lu_ref_print(const struct lu_ref *ref)
 {
 }
+
+static inline void lu_ref_print_all(void)
+{
+}
 #endif /* USE_LU_REF */
 
 /** @} lu */