X-Git-Url: https://git.whamcloud.com/?a=blobdiff_plain;f=lustre%2Fosd-ldiskfs%2Fosd_iam.h;h=b4ee34d82fe1143f007c3ee1c8c01a95e7141283;hb=a2e38010077df3d95c9942d4f9cde829f75e7267;hp=67364e3dcb9181a730e2cd8c1c2aebb41722a3da;hpb=08aa217ce49aba1ded52e0f7adb8a607035123fd;p=fs%2Flustre-release.git diff --git a/lustre/osd-ldiskfs/osd_iam.h b/lustre/osd-ldiskfs/osd_iam.h index 67364e3..b4ee34d 100644 --- a/lustre/osd-ldiskfs/osd_iam.h +++ b/lustre/osd-ldiskfs/osd_iam.h @@ -14,12 +14,8 @@ * 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 */ @@ -27,7 +23,7 @@ * 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/ @@ -45,13 +41,12 @@ #include #include -#include + +#include "osd_dynlocks.h" /* - * linux/include/linux/osd_iam.h + * osd_iam.h */ -#ifndef CLASSERT -#define CLASSERT(cond) do {switch(42) {case (cond): case 0: break;}} while (0) -#endif + /* implication */ #define ergo(a, b) (!(a) || (b)) /* logical equivalence */ @@ -91,7 +86,6 @@ enum { DX_FMT_NAME_LEN = 16, }; -#ifdef __KERNEL__ /* * Debugging. @@ -484,10 +478,8 @@ struct iam_container { */ 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 */ @@ -592,11 +584,11 @@ enum iam_it_flags { /* * this iterator will move (iam_it_next() will be called on it) */ - IAM_IT_MOVE = (1 << 0), + IAM_IT_MOVE = BIT(0), /* * tree can be updated through this iterator. */ - IAM_IT_WRITE = (1 << 1) + IAM_IT_WRITE = BIT(1) }; /* @@ -937,7 +929,7 @@ static inline struct iam_entry *dx_node_get_entries(struct iam_path *path, static inline struct iam_ikey *iam_path_ikey(const struct iam_path *path, int nr) { - assert(0 <= nr && nr < ARRAY_SIZE(path->ip_data->ipd_key_scratch)); + LASSERT(0 <= nr && nr < ARRAY_SIZE(path->ip_data->ipd_key_scratch)); return path->ip_data->ipd_key_scratch[nr]; } @@ -974,8 +966,6 @@ int dx_index_is_compat(struct iam_path *path); int ldiskfs_htree_next_block(struct inode *dir, __u32 hash, struct iam_path *path, __u32 *start_hash); -struct buffer_head *ldiskfs_append(handle_t *handle, struct inode *inode, - u32 *block, int *err); int split_index_node(handle_t *handle, struct iam_path *path, struct dynlock_handle **lh); struct ldiskfs_dir_entry_2 *split_entry(struct inode *dir, @@ -1024,7 +1014,7 @@ int iam_lvar_create(struct inode *obj, #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 { @@ -1042,7 +1032,7 @@ static inline void iam_lock_bh(struct buffer_head volatile *bh) { 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(); @@ -1053,8 +1043,7 @@ static inline void iam_lock_bh(struct buffer_head volatile *bh) 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 } @@ -1097,7 +1086,7 @@ struct iam_format { /* * Linkage into global list of container formats. */ - cfs_list_t if_linkage; + struct list_head if_linkage; }; void iam_format_register(struct iam_format *fmt); @@ -1121,6 +1110,7 @@ int iam_uapi_ioctl(struct inode * inode, struct file * filp, unsigned int cmd, extern int ldiskfs_check_dir_entry(const char *, struct inode *, struct ldiskfs_dir_entry_2 *, struct buffer_head *, unsigned long); +extern int dx_node_check(struct iam_path *p, struct iam_frame *f); #else static inline int ldiskfs_check_dir_entry(const char * function, struct inode * dir, @@ -1134,7 +1124,6 @@ static inline int ldiskfs_check_dir_entry(const char * function, */ /* __KERNEL__ */ -#endif /* * User level API. Copy exists in lustre/lustre/tests/iam_ut.c