* in the LICENSE file that accompanied this code).
*
* You should have received a copy of the GNU General Public License
- * version 2 along with this program; If not, see [sun.com URL with a
- * copy of GPLv2].
- *
- * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
- * CA 95054 USA or visit www.sun.com if you need additional information or
- * have any questions.
+ * version 2 along with this program; If not, see
+ * http://www.gnu.org/licenses/gpl-2.0.html
*
* GPL HEADER END
*/
* Copyright (c) 2009, 2010, Oracle and/or its affiliates. All rights reserved.
* Use is subject to license terms.
*
- * Copyright (c) 2011, 2012, Intel Corporation.
+ * Copyright (c) 2011, 2015, Intel Corporation.
*/
/*
* This file is part of Lustre, http://www.lustre.org/
DX_FMT_NAME_LEN = 16,
};
-#ifdef __KERNEL__
/*
* Debugging.
*/
struct rw_semaphore ic_sem;
struct dynlock ic_tree_lock;
- /*
- * Protect ic_idle_bh
- */
- struct semaphore ic_idle_sem;
+ /* Protect ic_idle_bh */
+ struct mutex ic_idle_mutex;
/*
* BH for idle blocks
*/
#define dxtrace(command)
#endif
-#define BH_DXLock 25
+#define BH_DXLock (BH_BITMAP_UPTODATE + 1)
#define DX_DEBUG (0)
#if DX_DEBUG
static struct iam_lock_stats {
{
DX_DEVAL(iam_lock_stats.dls_bh_lock++);
#ifdef CONFIG_SMP
- while (test_and_set_bit(BH_DXLock, &bh->b_state)) {
+ while (test_and_set_bit_lock(BH_DXLock, &bh->b_state)) {
DX_DEVAL(iam_lock_stats.dls_bh_busy++);
while (test_bit(BH_DXLock, &bh->b_state))
cpu_relax();
static inline void iam_unlock_bh(struct buffer_head *bh)
{
#ifdef CONFIG_SMP
- smp_mb__before_clear_bit();
- clear_bit(BH_DXLock, &bh->b_state);
+ clear_bit_unlock(BH_DXLock, &bh->b_state);
#endif
}
int iam_node_read(struct iam_container *c, iam_ptr_t ptr,
handle_t *h, struct buffer_head **bh);
-/*
- * Container format.
- */
-struct iam_format {
- /*
- * Method called to recognize container format. Should return true iff
- * container @c conforms to this format. This method may do IO to read
- * container pages.
- *
- * If container is recognized, this method sets operation vectors
- * ->id_ops and ->id_leaf_ops in container description (c->ic_descr),
- * and fills other description fields.
- */
- int (*if_guess)(struct iam_container *c);
- /*
- * Linkage into global list of container formats.
- */
- cfs_list_t if_linkage;
-};
-
-void iam_format_register(struct iam_format *fmt);
int iam_root_limit(int rootgap, int blocksize, int size);
void iam_lfix_format_init(void);
void iam_lvar_format_init(void);
+int iam_lfix_guess(struct iam_container *c);
+int iam_lvar_guess(struct iam_container *c);
void iam_htree_format_init(void);
int iam_lfix_create(struct inode *obj,
*/
/* __KERNEL__ */
-#endif
/*
* User level API. Copy exists in lustre/lustre/tests/iam_ut.c