X-Git-Url: https://git.whamcloud.com/?p=fs%2Flustre-release.git;a=blobdiff_plain;f=lustre%2Finclude%2Flinux%2Fobd.h;h=0be9fa1a8853da3700644bad294455ef8be4cbb1;hp=5ece5fdcd515f3d58fe07c94ca831f10297cff20;hb=b74eb1a08d2a1cc1ee1b5b8aec268c05f8e7ac22;hpb=f5fb215365791507ec98796ea624abeafa31901c diff --git a/lustre/include/linux/obd.h b/lustre/include/linux/obd.h index 5ece5fd..0be9fa1 100644 --- a/lustre/include/linux/obd.h +++ b/lustre/include/linux/obd.h @@ -27,7 +27,7 @@ * Copyright (c) 1999, 2010, Oracle and/or its affiliates. All rights reserved. * Use is subject to license terms. * - * Copyright (c) 2011, Whamcloud, Inc. + * Copyright (c) 2011, 2012, Intel Corporation. */ /* * This file is part of Lustre, http://www.lustre.org/ @@ -52,27 +52,33 @@ # include #endif +struct ll_iattr { + struct iattr iattr; + unsigned int ia_attr_flags; +}; + +#ifdef __KERNEL__ #define CLIENT_OBD_LIST_LOCK_DEBUG 1 +#endif + typedef struct { - cfs_spinlock_t lock; + spinlock_t lock; #ifdef CLIENT_OBD_LIST_LOCK_DEBUG - unsigned long time; - struct task_struct *task; - const char *func; - int line; + unsigned long time; + struct task_struct *task; + const char *func; + int line; #endif - } client_obd_lock_t; #ifdef CLIENT_OBD_LIST_LOCK_DEBUG static inline void __client_obd_list_lock(client_obd_lock_t *lock, - const char *func, - int line) + const char *func, int line) { - unsigned long cur = jiffies; - while (1) { - if (cfs_spin_trylock(&lock->lock)) { + unsigned long cur = jiffies; + while (1) { + if (spin_trylock(&lock->lock)) { LASSERT(lock->task == NULL); lock->task = current; lock->func = func; @@ -83,20 +89,26 @@ static inline void __client_obd_list_lock(client_obd_lock_t *lock, if ((jiffies - cur > 5 * CFS_HZ) && (jiffies - lock->time > 5 * CFS_HZ)) { - LCONSOLE_WARN("LOCK UP! the lock %p was acquired" - " by <%s:%d:%s:%d> %lu time, I'm %s:%d\n", - lock, lock->task->comm, lock->task->pid, + struct task_struct *task = lock->task; + + if (task == NULL) + continue; + + LCONSOLE_WARN("%s:%d: lock %p was acquired" + " by <%s:%d:%s:%d> for %lu seconds.\n", + current->comm, current->pid, + lock, task->comm, task->pid, lock->func, lock->line, - (jiffies - lock->time), - current->comm, current->pid); + (jiffies - lock->time) / CFS_HZ); LCONSOLE_WARN("====== for process holding the " "lock =====\n"); - libcfs_debug_dumpstack(lock->task); + libcfs_debug_dumpstack(task); LCONSOLE_WARN("====== for current process =====\n"); libcfs_debug_dumpstack(NULL); LCONSOLE_WARN("====== end =======\n"); cfs_pause(1000 * CFS_HZ); } + cpu_relax(); } } @@ -105,28 +117,28 @@ static inline void __client_obd_list_lock(client_obd_lock_t *lock, static inline void client_obd_list_unlock(client_obd_lock_t *lock) { - LASSERT(lock->task != NULL); - lock->task = NULL; - lock->time = jiffies; - cfs_spin_unlock(&lock->lock); + LASSERT(lock->task != NULL); + lock->task = NULL; + lock->time = jiffies; + spin_unlock(&lock->lock); } #else /* ifdef CLIENT_OBD_LIST_LOCK_DEBUG */ static inline void client_obd_list_lock(client_obd_lock_t *lock) { - cfs_spin_lock(&lock->lock); + spin_lock(&lock->lock); } static inline void client_obd_list_unlock(client_obd_lock_t *lock) { - cfs_spin_unlock(&lock->lock); + spin_unlock(&lock->lock); } #endif /* ifdef CLIENT_OBD_LIST_LOCK_DEBUG */ static inline void client_obd_list_lock_init(client_obd_lock_t *lock) { - cfs_spin_lock_init(&lock->lock); + spin_lock_init(&lock->lock); } static inline void client_obd_list_lock_done(client_obd_lock_t *lock)