diff options
author | Linus Torvalds <torvalds@g5.osdl.org> | 2006-01-09 20:31:38 -0500 |
---|---|---|
committer | Linus Torvalds <torvalds@g5.osdl.org> | 2006-01-09 20:31:38 -0500 |
commit | 80c0531514516e43ae118ddf38424e06e5c3cb3c (patch) | |
tree | 2eef8cf8fdf505b18f83078d1eb41167e98f5b54 /include/linux | |
parent | a457aa6c2bdd743bbbffd3f9e4fdbd8c71f8af1b (diff) | |
parent | 11b751ae8c8ca3fa24c85bd5a3e51dd9f95cda17 (diff) |
Merge master.kernel.org:/pub/scm/linux/kernel/git/mingo/mutex-2.6
Diffstat (limited to 'include/linux')
-rw-r--r-- | include/linux/ext3_fs_i.h | 2 | ||||
-rw-r--r-- | include/linux/fs.h | 13 | ||||
-rw-r--r-- | include/linux/ide.h | 5 | ||||
-rw-r--r-- | include/linux/jffs2_fs_i.h | 4 | ||||
-rw-r--r-- | include/linux/kernel.h | 9 | ||||
-rw-r--r-- | include/linux/loop.h | 4 | ||||
-rw-r--r-- | include/linux/mm.h | 4 | ||||
-rw-r--r-- | include/linux/mutex-debug.h | 21 | ||||
-rw-r--r-- | include/linux/mutex.h | 119 | ||||
-rw-r--r-- | include/linux/nfsd/nfsfh.h | 6 | ||||
-rw-r--r-- | include/linux/pipe_fs_i.h | 2 | ||||
-rw-r--r-- | include/linux/reiserfs_fs.h | 2 | ||||
-rw-r--r-- | include/linux/sched.h | 5 |
13 files changed, 178 insertions, 18 deletions
diff --git a/include/linux/ext3_fs_i.h b/include/linux/ext3_fs_i.h index 2914f7b07156..e71dd98dbcae 100644 --- a/include/linux/ext3_fs_i.h +++ b/include/linux/ext3_fs_i.h | |||
@@ -87,7 +87,7 @@ struct ext3_inode_info { | |||
87 | #ifdef CONFIG_EXT3_FS_XATTR | 87 | #ifdef CONFIG_EXT3_FS_XATTR |
88 | /* | 88 | /* |
89 | * Extended attributes can be read independently of the main file | 89 | * Extended attributes can be read independently of the main file |
90 | * data. Taking i_sem even when reading would cause contention | 90 | * data. Taking i_mutex even when reading would cause contention |
91 | * between readers of EAs and writers of regular file data, so | 91 | * between readers of EAs and writers of regular file data, so |
92 | * instead we synchronize on xattr_sem when reading or changing | 92 | * instead we synchronize on xattr_sem when reading or changing |
93 | * EAs. | 93 | * EAs. |
diff --git a/include/linux/fs.h b/include/linux/fs.h index 4c82219b0fae..92ae3e2067b0 100644 --- a/include/linux/fs.h +++ b/include/linux/fs.h | |||
@@ -219,6 +219,7 @@ extern int dir_notify_enable; | |||
219 | #include <linux/prio_tree.h> | 219 | #include <linux/prio_tree.h> |
220 | #include <linux/init.h> | 220 | #include <linux/init.h> |
221 | #include <linux/sched.h> | 221 | #include <linux/sched.h> |
222 | #include <linux/mutex.h> | ||
222 | 223 | ||
223 | #include <asm/atomic.h> | 224 | #include <asm/atomic.h> |
224 | #include <asm/semaphore.h> | 225 | #include <asm/semaphore.h> |
@@ -484,7 +485,7 @@ struct inode { | |||
484 | unsigned long i_blocks; | 485 | unsigned long i_blocks; |
485 | unsigned short i_bytes; | 486 | unsigned short i_bytes; |
486 | spinlock_t i_lock; /* i_blocks, i_bytes, maybe i_size */ | 487 | spinlock_t i_lock; /* i_blocks, i_bytes, maybe i_size */ |
487 | struct semaphore i_sem; | 488 | struct mutex i_mutex; |
488 | struct rw_semaphore i_alloc_sem; | 489 | struct rw_semaphore i_alloc_sem; |
489 | struct inode_operations *i_op; | 490 | struct inode_operations *i_op; |
490 | struct file_operations *i_fop; /* former ->i_op->default_file_ops */ | 491 | struct file_operations *i_fop; /* former ->i_op->default_file_ops */ |
@@ -820,7 +821,7 @@ struct super_block { | |||
820 | unsigned long s_magic; | 821 | unsigned long s_magic; |
821 | struct dentry *s_root; | 822 | struct dentry *s_root; |
822 | struct rw_semaphore s_umount; | 823 | struct rw_semaphore s_umount; |
823 | struct semaphore s_lock; | 824 | struct mutex s_lock; |
824 | int s_count; | 825 | int s_count; |
825 | int s_syncing; | 826 | int s_syncing; |
826 | int s_need_sync_fs; | 827 | int s_need_sync_fs; |
@@ -892,13 +893,13 @@ static inline int has_fs_excl(void) | |||
892 | static inline void lock_super(struct super_block * sb) | 893 | static inline void lock_super(struct super_block * sb) |
893 | { | 894 | { |
894 | get_fs_excl(); | 895 | get_fs_excl(); |
895 | down(&sb->s_lock); | 896 | mutex_lock(&sb->s_lock); |
896 | } | 897 | } |
897 | 898 | ||
898 | static inline void unlock_super(struct super_block * sb) | 899 | static inline void unlock_super(struct super_block * sb) |
899 | { | 900 | { |
900 | put_fs_excl(); | 901 | put_fs_excl(); |
901 | up(&sb->s_lock); | 902 | mutex_unlock(&sb->s_lock); |
902 | } | 903 | } |
903 | 904 | ||
904 | /* | 905 | /* |
@@ -1191,7 +1192,7 @@ int sync_inode(struct inode *inode, struct writeback_control *wbc); | |||
1191 | * directory. The name should be stored in the @name (with the | 1192 | * directory. The name should be stored in the @name (with the |
1192 | * understanding that it is already pointing to a a %NAME_MAX+1 sized | 1193 | * understanding that it is already pointing to a a %NAME_MAX+1 sized |
1193 | * buffer. get_name() should return %0 on success, a negative error code | 1194 | * buffer. get_name() should return %0 on success, a negative error code |
1194 | * or error. @get_name will be called without @parent->i_sem held. | 1195 | * or error. @get_name will be called without @parent->i_mutex held. |
1195 | * | 1196 | * |
1196 | * get_parent: | 1197 | * get_parent: |
1197 | * @get_parent should find the parent directory for the given @child which | 1198 | * @get_parent should find the parent directory for the given @child which |
@@ -1213,7 +1214,7 @@ int sync_inode(struct inode *inode, struct writeback_control *wbc); | |||
1213 | * nfsd_find_fh_dentry() in either the @obj or @parent parameters. | 1214 | * nfsd_find_fh_dentry() in either the @obj or @parent parameters. |
1214 | * | 1215 | * |
1215 | * Locking rules: | 1216 | * Locking rules: |
1216 | * get_parent is called with child->d_inode->i_sem down | 1217 | * get_parent is called with child->d_inode->i_mutex down |
1217 | * get_name is not (which is possibly inconsistent) | 1218 | * get_name is not (which is possibly inconsistent) |
1218 | */ | 1219 | */ |
1219 | 1220 | ||
diff --git a/include/linux/ide.h b/include/linux/ide.h index ef8d0cbb832f..9a8c05dbe4f3 100644 --- a/include/linux/ide.h +++ b/include/linux/ide.h | |||
@@ -18,6 +18,7 @@ | |||
18 | #include <linux/bio.h> | 18 | #include <linux/bio.h> |
19 | #include <linux/device.h> | 19 | #include <linux/device.h> |
20 | #include <linux/pci.h> | 20 | #include <linux/pci.h> |
21 | #include <linux/completion.h> | ||
21 | #include <asm/byteorder.h> | 22 | #include <asm/byteorder.h> |
22 | #include <asm/system.h> | 23 | #include <asm/system.h> |
23 | #include <asm/io.h> | 24 | #include <asm/io.h> |
@@ -638,7 +639,7 @@ typedef struct ide_drive_s { | |||
638 | int crc_count; /* crc counter to reduce drive speed */ | 639 | int crc_count; /* crc counter to reduce drive speed */ |
639 | struct list_head list; | 640 | struct list_head list; |
640 | struct device gendev; | 641 | struct device gendev; |
641 | struct semaphore gendev_rel_sem; /* to deal with device release() */ | 642 | struct completion gendev_rel_comp; /* to deal with device release() */ |
642 | } ide_drive_t; | 643 | } ide_drive_t; |
643 | 644 | ||
644 | #define to_ide_device(dev)container_of(dev, ide_drive_t, gendev) | 645 | #define to_ide_device(dev)container_of(dev, ide_drive_t, gendev) |
@@ -794,7 +795,7 @@ typedef struct hwif_s { | |||
794 | unsigned sg_mapped : 1; /* sg_table and sg_nents are ready */ | 795 | unsigned sg_mapped : 1; /* sg_table and sg_nents are ready */ |
795 | 796 | ||
796 | struct device gendev; | 797 | struct device gendev; |
797 | struct semaphore gendev_rel_sem; /* To deal with device release() */ | 798 | struct completion gendev_rel_comp; /* To deal with device release() */ |
798 | 799 | ||
799 | void *hwif_data; /* extra hwif data */ | 800 | void *hwif_data; /* extra hwif data */ |
800 | 801 | ||
diff --git a/include/linux/jffs2_fs_i.h b/include/linux/jffs2_fs_i.h index ef85ab56302b..ad565bf9dcc1 100644 --- a/include/linux/jffs2_fs_i.h +++ b/include/linux/jffs2_fs_i.h | |||
@@ -8,11 +8,11 @@ | |||
8 | #include <asm/semaphore.h> | 8 | #include <asm/semaphore.h> |
9 | 9 | ||
10 | struct jffs2_inode_info { | 10 | struct jffs2_inode_info { |
11 | /* We need an internal semaphore similar to inode->i_sem. | 11 | /* We need an internal mutex similar to inode->i_mutex. |
12 | Unfortunately, we can't used the existing one, because | 12 | Unfortunately, we can't used the existing one, because |
13 | either the GC would deadlock, or we'd have to release it | 13 | either the GC would deadlock, or we'd have to release it |
14 | before letting GC proceed. Or we'd have to put ugliness | 14 | before letting GC proceed. Or we'd have to put ugliness |
15 | into the GC code so it didn't attempt to obtain the i_sem | 15 | into the GC code so it didn't attempt to obtain the i_mutex |
16 | for the inode(s) which are already locked */ | 16 | for the inode(s) which are already locked */ |
17 | struct semaphore sem; | 17 | struct semaphore sem; |
18 | 18 | ||
diff --git a/include/linux/kernel.h b/include/linux/kernel.h index ca7ff8fdd090..d0e6ca3b00ef 100644 --- a/include/linux/kernel.h +++ b/include/linux/kernel.h | |||
@@ -286,6 +286,15 @@ extern void dump_stack(void); | |||
286 | 1; \ | 286 | 1; \ |
287 | }) | 287 | }) |
288 | 288 | ||
289 | /* | ||
290 | * Check at compile time that 'function' is a certain type, or is a pointer | ||
291 | * to that type (needs to use typedef for the function type.) | ||
292 | */ | ||
293 | #define typecheck_fn(type,function) \ | ||
294 | ({ typeof(type) __tmp = function; \ | ||
295 | (void)__tmp; \ | ||
296 | }) | ||
297 | |||
289 | #endif /* __KERNEL__ */ | 298 | #endif /* __KERNEL__ */ |
290 | 299 | ||
291 | #define SI_LOAD_SHIFT 16 | 300 | #define SI_LOAD_SHIFT 16 |
diff --git a/include/linux/loop.h b/include/linux/loop.h index 40f63c9879d2..f96506782ebe 100644 --- a/include/linux/loop.h +++ b/include/linux/loop.h | |||
@@ -58,9 +58,9 @@ struct loop_device { | |||
58 | struct bio *lo_bio; | 58 | struct bio *lo_bio; |
59 | struct bio *lo_biotail; | 59 | struct bio *lo_biotail; |
60 | int lo_state; | 60 | int lo_state; |
61 | struct semaphore lo_sem; | 61 | struct completion lo_done; |
62 | struct completion lo_bh_done; | ||
62 | struct semaphore lo_ctl_mutex; | 63 | struct semaphore lo_ctl_mutex; |
63 | struct semaphore lo_bh_mutex; | ||
64 | int lo_pending; | 64 | int lo_pending; |
65 | 65 | ||
66 | request_queue_t *lo_queue; | 66 | request_queue_t *lo_queue; |
diff --git a/include/linux/mm.h b/include/linux/mm.h index df80e63903b5..3f1fafc0245e 100644 --- a/include/linux/mm.h +++ b/include/linux/mm.h | |||
@@ -13,6 +13,7 @@ | |||
13 | #include <linux/rbtree.h> | 13 | #include <linux/rbtree.h> |
14 | #include <linux/prio_tree.h> | 14 | #include <linux/prio_tree.h> |
15 | #include <linux/fs.h> | 15 | #include <linux/fs.h> |
16 | #include <linux/mutex.h> | ||
16 | 17 | ||
17 | struct mempolicy; | 18 | struct mempolicy; |
18 | struct anon_vma; | 19 | struct anon_vma; |
@@ -1024,6 +1025,9 @@ static inline void vm_stat_account(struct mm_struct *mm, | |||
1024 | static inline void | 1025 | static inline void |
1025 | kernel_map_pages(struct page *page, int numpages, int enable) | 1026 | kernel_map_pages(struct page *page, int numpages, int enable) |
1026 | { | 1027 | { |
1028 | if (!PageHighMem(page) && !enable) | ||
1029 | mutex_debug_check_no_locks_freed(page_address(page), | ||
1030 | page_address(page + numpages)); | ||
1027 | } | 1031 | } |
1028 | #endif | 1032 | #endif |
1029 | 1033 | ||
diff --git a/include/linux/mutex-debug.h b/include/linux/mutex-debug.h new file mode 100644 index 000000000000..0ccd8f983b50 --- /dev/null +++ b/include/linux/mutex-debug.h | |||
@@ -0,0 +1,21 @@ | |||
1 | #ifndef __LINUX_MUTEX_DEBUG_H | ||
2 | #define __LINUX_MUTEX_DEBUG_H | ||
3 | |||
4 | /* | ||
5 | * Mutexes - debugging helpers: | ||
6 | */ | ||
7 | |||
8 | #define __DEBUG_MUTEX_INITIALIZER(lockname) \ | ||
9 | , .held_list = LIST_HEAD_INIT(lockname.held_list), \ | ||
10 | .name = #lockname , .magic = &lockname | ||
11 | |||
12 | #define mutex_init(sem) __mutex_init(sem, __FUNCTION__) | ||
13 | |||
14 | extern void FASTCALL(mutex_destroy(struct mutex *lock)); | ||
15 | |||
16 | extern void mutex_debug_show_all_locks(void); | ||
17 | extern void mutex_debug_show_held_locks(struct task_struct *filter); | ||
18 | extern void mutex_debug_check_no_locks_held(struct task_struct *task); | ||
19 | extern void mutex_debug_check_no_locks_freed(const void *from, const void *to); | ||
20 | |||
21 | #endif | ||
diff --git a/include/linux/mutex.h b/include/linux/mutex.h new file mode 100644 index 000000000000..9bce0fee68d4 --- /dev/null +++ b/include/linux/mutex.h | |||
@@ -0,0 +1,119 @@ | |||
1 | /* | ||
2 | * Mutexes: blocking mutual exclusion locks | ||
3 | * | ||
4 | * started by Ingo Molnar: | ||
5 | * | ||
6 | * Copyright (C) 2004, 2005, 2006 Red Hat, Inc., Ingo Molnar <mingo@redhat.com> | ||
7 | * | ||
8 | * This file contains the main data structure and API definitions. | ||
9 | */ | ||
10 | #ifndef __LINUX_MUTEX_H | ||
11 | #define __LINUX_MUTEX_H | ||
12 | |||
13 | #include <linux/list.h> | ||
14 | #include <linux/spinlock_types.h> | ||
15 | |||
16 | #include <asm/atomic.h> | ||
17 | |||
18 | /* | ||
19 | * Simple, straightforward mutexes with strict semantics: | ||
20 | * | ||
21 | * - only one task can hold the mutex at a time | ||
22 | * - only the owner can unlock the mutex | ||
23 | * - multiple unlocks are not permitted | ||
24 | * - recursive locking is not permitted | ||
25 | * - a mutex object must be initialized via the API | ||
26 | * - a mutex object must not be initialized via memset or copying | ||
27 | * - task may not exit with mutex held | ||
28 | * - memory areas where held locks reside must not be freed | ||
29 | * - held mutexes must not be reinitialized | ||
30 | * - mutexes may not be used in irq contexts | ||
31 | * | ||
32 | * These semantics are fully enforced when DEBUG_MUTEXES is | ||
33 | * enabled. Furthermore, besides enforcing the above rules, the mutex | ||
34 | * debugging code also implements a number of additional features | ||
35 | * that make lock debugging easier and faster: | ||
36 | * | ||
37 | * - uses symbolic names of mutexes, whenever they are printed in debug output | ||
38 | * - point-of-acquire tracking, symbolic lookup of function names | ||
39 | * - list of all locks held in the system, printout of them | ||
40 | * - owner tracking | ||
41 | * - detects self-recursing locks and prints out all relevant info | ||
42 | * - detects multi-task circular deadlocks and prints out all affected | ||
43 | * locks and tasks (and only those tasks) | ||
44 | */ | ||
45 | struct mutex { | ||
46 | /* 1: unlocked, 0: locked, negative: locked, possible waiters */ | ||
47 | atomic_t count; | ||
48 | spinlock_t wait_lock; | ||
49 | struct list_head wait_list; | ||
50 | #ifdef CONFIG_DEBUG_MUTEXES | ||
51 | struct thread_info *owner; | ||
52 | struct list_head held_list; | ||
53 | unsigned long acquire_ip; | ||
54 | const char *name; | ||
55 | void *magic; | ||
56 | #endif | ||
57 | }; | ||
58 | |||
59 | /* | ||
60 | * This is the control structure for tasks blocked on mutex, | ||
61 | * which resides on the blocked task's kernel stack: | ||
62 | */ | ||
63 | struct mutex_waiter { | ||
64 | struct list_head list; | ||
65 | struct task_struct *task; | ||
66 | #ifdef CONFIG_DEBUG_MUTEXES | ||
67 | struct mutex *lock; | ||
68 | void *magic; | ||
69 | #endif | ||
70 | }; | ||
71 | |||
72 | #ifdef CONFIG_DEBUG_MUTEXES | ||
73 | # include <linux/mutex-debug.h> | ||
74 | #else | ||
75 | # define __DEBUG_MUTEX_INITIALIZER(lockname) | ||
76 | # define mutex_init(mutex) __mutex_init(mutex, NULL) | ||
77 | # define mutex_destroy(mutex) do { } while (0) | ||
78 | # define mutex_debug_show_all_locks() do { } while (0) | ||
79 | # define mutex_debug_show_held_locks(p) do { } while (0) | ||
80 | # define mutex_debug_check_no_locks_held(task) do { } while (0) | ||
81 | # define mutex_debug_check_no_locks_freed(from, to) do { } while (0) | ||
82 | #endif | ||
83 | |||
84 | #define __MUTEX_INITIALIZER(lockname) \ | ||
85 | { .count = ATOMIC_INIT(1) \ | ||
86 | , .wait_lock = SPIN_LOCK_UNLOCKED \ | ||
87 | , .wait_list = LIST_HEAD_INIT(lockname.wait_list) \ | ||
88 | __DEBUG_MUTEX_INITIALIZER(lockname) } | ||
89 | |||
90 | #define DEFINE_MUTEX(mutexname) \ | ||
91 | struct mutex mutexname = __MUTEX_INITIALIZER(mutexname) | ||
92 | |||
93 | extern void fastcall __mutex_init(struct mutex *lock, const char *name); | ||
94 | |||
95 | /*** | ||
96 | * mutex_is_locked - is the mutex locked | ||
97 | * @lock: the mutex to be queried | ||
98 | * | ||
99 | * Returns 1 if the mutex is locked, 0 if unlocked. | ||
100 | */ | ||
101 | static inline int fastcall mutex_is_locked(struct mutex *lock) | ||
102 | { | ||
103 | return atomic_read(&lock->count) != 1; | ||
104 | } | ||
105 | |||
106 | /* | ||
107 | * See kernel/mutex.c for detailed documentation of these APIs. | ||
108 | * Also see Documentation/mutex-design.txt. | ||
109 | */ | ||
110 | extern void fastcall mutex_lock(struct mutex *lock); | ||
111 | extern int fastcall mutex_lock_interruptible(struct mutex *lock); | ||
112 | /* | ||
113 | * NOTE: mutex_trylock() follows the spin_trylock() convention, | ||
114 | * not the down_trylock() convention! | ||
115 | */ | ||
116 | extern int fastcall mutex_trylock(struct mutex *lock); | ||
117 | extern void fastcall mutex_unlock(struct mutex *lock); | ||
118 | |||
119 | #endif | ||
diff --git a/include/linux/nfsd/nfsfh.h b/include/linux/nfsd/nfsfh.h index bb842ea41033..0798b7781a6e 100644 --- a/include/linux/nfsd/nfsfh.h +++ b/include/linux/nfsd/nfsfh.h | |||
@@ -294,7 +294,7 @@ fill_post_wcc(struct svc_fh *fhp) | |||
294 | /* | 294 | /* |
295 | * Lock a file handle/inode | 295 | * Lock a file handle/inode |
296 | * NOTE: both fh_lock and fh_unlock are done "by hand" in | 296 | * NOTE: both fh_lock and fh_unlock are done "by hand" in |
297 | * vfs.c:nfsd_rename as it needs to grab 2 i_sem's at once | 297 | * vfs.c:nfsd_rename as it needs to grab 2 i_mutex's at once |
298 | * so, any changes here should be reflected there. | 298 | * so, any changes here should be reflected there. |
299 | */ | 299 | */ |
300 | static inline void | 300 | static inline void |
@@ -317,7 +317,7 @@ fh_lock(struct svc_fh *fhp) | |||
317 | } | 317 | } |
318 | 318 | ||
319 | inode = dentry->d_inode; | 319 | inode = dentry->d_inode; |
320 | down(&inode->i_sem); | 320 | mutex_lock(&inode->i_mutex); |
321 | fill_pre_wcc(fhp); | 321 | fill_pre_wcc(fhp); |
322 | fhp->fh_locked = 1; | 322 | fhp->fh_locked = 1; |
323 | } | 323 | } |
@@ -333,7 +333,7 @@ fh_unlock(struct svc_fh *fhp) | |||
333 | 333 | ||
334 | if (fhp->fh_locked) { | 334 | if (fhp->fh_locked) { |
335 | fill_post_wcc(fhp); | 335 | fill_post_wcc(fhp); |
336 | up(&fhp->fh_dentry->d_inode->i_sem); | 336 | mutex_unlock(&fhp->fh_dentry->d_inode->i_mutex); |
337 | fhp->fh_locked = 0; | 337 | fhp->fh_locked = 0; |
338 | } | 338 | } |
339 | } | 339 | } |
diff --git a/include/linux/pipe_fs_i.h b/include/linux/pipe_fs_i.h index 1767073df26f..b12e59c75752 100644 --- a/include/linux/pipe_fs_i.h +++ b/include/linux/pipe_fs_i.h | |||
@@ -37,7 +37,7 @@ struct pipe_inode_info { | |||
37 | memory allocation, whereas PIPE_BUF makes atomicity guarantees. */ | 37 | memory allocation, whereas PIPE_BUF makes atomicity guarantees. */ |
38 | #define PIPE_SIZE PAGE_SIZE | 38 | #define PIPE_SIZE PAGE_SIZE |
39 | 39 | ||
40 | #define PIPE_SEM(inode) (&(inode).i_sem) | 40 | #define PIPE_MUTEX(inode) (&(inode).i_mutex) |
41 | #define PIPE_WAIT(inode) (&(inode).i_pipe->wait) | 41 | #define PIPE_WAIT(inode) (&(inode).i_pipe->wait) |
42 | #define PIPE_READERS(inode) ((inode).i_pipe->readers) | 42 | #define PIPE_READERS(inode) ((inode).i_pipe->readers) |
43 | #define PIPE_WRITERS(inode) ((inode).i_pipe->writers) | 43 | #define PIPE_WRITERS(inode) ((inode).i_pipe->writers) |
diff --git a/include/linux/reiserfs_fs.h b/include/linux/reiserfs_fs.h index 001ab82df051..e276c5ba2bb7 100644 --- a/include/linux/reiserfs_fs.h +++ b/include/linux/reiserfs_fs.h | |||
@@ -1857,7 +1857,7 @@ void padd_item(char *item, int total_length, int length); | |||
1857 | #define GET_BLOCK_CREATE 1 /* add anything you need to find block */ | 1857 | #define GET_BLOCK_CREATE 1 /* add anything you need to find block */ |
1858 | #define GET_BLOCK_NO_HOLE 2 /* return -ENOENT for file holes */ | 1858 | #define GET_BLOCK_NO_HOLE 2 /* return -ENOENT for file holes */ |
1859 | #define GET_BLOCK_READ_DIRECT 4 /* read the tail if indirect item not found */ | 1859 | #define GET_BLOCK_READ_DIRECT 4 /* read the tail if indirect item not found */ |
1860 | #define GET_BLOCK_NO_ISEM 8 /* i_sem is not held, don't preallocate */ | 1860 | #define GET_BLOCK_NO_IMUX 8 /* i_mutex is not held, don't preallocate */ |
1861 | #define GET_BLOCK_NO_DANGLE 16 /* don't leave any transactions running */ | 1861 | #define GET_BLOCK_NO_DANGLE 16 /* don't leave any transactions running */ |
1862 | 1862 | ||
1863 | int restart_transaction(struct reiserfs_transaction_handle *th, | 1863 | int restart_transaction(struct reiserfs_transaction_handle *th, |
diff --git a/include/linux/sched.h b/include/linux/sched.h index 78eb92ae4d94..85b53f87c703 100644 --- a/include/linux/sched.h +++ b/include/linux/sched.h | |||
@@ -817,6 +817,11 @@ struct task_struct { | |||
817 | /* Protection of proc_dentry: nesting proc_lock, dcache_lock, write_lock_irq(&tasklist_lock); */ | 817 | /* Protection of proc_dentry: nesting proc_lock, dcache_lock, write_lock_irq(&tasklist_lock); */ |
818 | spinlock_t proc_lock; | 818 | spinlock_t proc_lock; |
819 | 819 | ||
820 | #ifdef CONFIG_DEBUG_MUTEXES | ||
821 | /* mutex deadlock detection */ | ||
822 | struct mutex_waiter *blocked_on; | ||
823 | #endif | ||
824 | |||
820 | /* journalling filesystem info */ | 825 | /* journalling filesystem info */ |
821 | void *journal_info; | 826 | void *journal_info; |
822 | 827 | ||