diff options
author | Frederic Weisbecker <fweisbec@gmail.com> | 2009-12-30 03:20:19 +0100 |
---|---|---|
committer | Frederic Weisbecker <fweisbec@gmail.com> | 2010-01-02 01:54:37 +0100 |
commit | c4a62ca362258d98f42efb282cfbf9b61caffdbe (patch) | |
tree | 017484107efa26789ddd96579fcef09d874333c0 /fs/reiserfs | |
parent | 0719d3434747889b314a1e8add776418c4148bcf (diff) | |
download | linux-stable-c4a62ca362258d98f42efb282cfbf9b61caffdbe.tar.gz linux-stable-c4a62ca362258d98f42efb282cfbf9b61caffdbe.tar.bz2 linux-stable-c4a62ca362258d98f42efb282cfbf9b61caffdbe.zip |
reiserfs: Warn on lock relax if taken recursively
When we relax the reiserfs lock to avoid creating unwanted
dependencies against others locks while grabbing these,
we want to ensure it has not been taken recursively, otherwise
the lock won't be really relaxed. Only its depth will be decreased.
The unwanted dependency would then actually happen.
To prevent from that, add a reiserfs_lock_check_recursive() call
in the places that need it.
Signed-off-by: Frederic Weisbecker <fweisbec@gmail.com>
Cc: Alexander Beregalov <a.beregalov@gmail.com>
Cc: Chris Mason <chris.mason@oracle.com>
Cc: Ingo Molnar <mingo@elte.hu>
Diffstat (limited to 'fs/reiserfs')
-rw-r--r-- | fs/reiserfs/lock.c | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/fs/reiserfs/lock.c b/fs/reiserfs/lock.c index ee2cfc0fd8a7..b87aa2c1afc1 100644 --- a/fs/reiserfs/lock.c +++ b/fs/reiserfs/lock.c @@ -86,3 +86,12 @@ void reiserfs_check_lock_depth(struct super_block *sb, char *caller) reiserfs_panic(sb, "%s called without kernel lock held %d", caller); } + +#ifdef CONFIG_REISERFS_CHECK +void reiserfs_lock_check_recursive(struct super_block *sb) +{ + struct reiserfs_sb_info *sb_i = REISERFS_SB(sb); + + WARN_ONCE((sb_i->lock_depth > 0), "Unwanted recursive reiserfs lock!\n"); +} +#endif |