aboutsummaryrefslogtreecommitdiffstats
path: root/fs/reiserfs
diff options
context:
space:
mode:
Diffstat (limited to 'fs/reiserfs')
-rw-r--r--fs/reiserfs/lock.c26
1 files changed, 26 insertions, 0 deletions
diff --git a/fs/reiserfs/lock.c b/fs/reiserfs/lock.c
index cdd8d9ef048e..cb1bba3802dd 100644
--- a/fs/reiserfs/lock.c
+++ b/fs/reiserfs/lock.c
@@ -50,6 +50,32 @@ void reiserfs_write_unlock(struct super_block *s)
50} 50}
51 51
52/* 52/*
53 * If we already own the lock, just exit and don't increase the depth.
54 * Useful when we don't want to lock more than once.
55 *
56 * We always return the lock_depth we had before calling
57 * this function.
58 */
59int reiserfs_write_lock_once(struct super_block *s)
60{
61 struct reiserfs_sb_info *sb_i = REISERFS_SB(s);
62
63 if (sb_i->lock_owner != current) {
64 mutex_lock(&sb_i->lock);
65 sb_i->lock_owner = current;
66 return sb_i->lock_depth++;
67 }
68
69 return sb_i->lock_depth;
70}
71
72void reiserfs_write_unlock_once(struct super_block *s, int lock_depth)
73{
74 if (lock_depth == -1)
75 reiserfs_write_unlock(s);
76}
77
78/*
53 * Utility function to force a BUG if it is called without the superblock 79 * Utility function to force a BUG if it is called without the superblock
54 * write lock held. caller is the string printed just before calling BUG() 80 * write lock held. caller is the string printed just before calling BUG()
55 */ 81 */