diff options
Diffstat (limited to 'include/linux/locks.h')
-rw-r--r-- | include/linux/locks.h | 56 |
1 files changed, 56 insertions, 0 deletions
diff --git a/include/linux/locks.h b/include/linux/locks.h new file mode 100644 index 000000000..ac9b29076 --- /dev/null +++ b/include/linux/locks.h @@ -0,0 +1,56 @@ +#ifndef _LINUX_LOCKS_H +#define _LINUX_LOCKS_H + +/* + * Buffer cache locking - note that interrupts may only unlock, not + * lock buffers. + */ +extern void __wait_on_buffer(struct buffer_head *); + +extern inline void wait_on_buffer(struct buffer_head * bh) +{ + if (bh->b_lock) + __wait_on_buffer(bh); +} + +extern inline void lock_buffer(struct buffer_head * bh) +{ + if (bh->b_lock) + __wait_on_buffer(bh); + bh->b_lock = 1; +} + +extern inline void unlock_buffer(struct buffer_head * bh) +{ + bh->b_lock = 0; + wake_up(&bh->b_wait); +} + +/* + * super-block locking. Again, interrupts may only unlock + * a super-block (although even this isn't done right now. + * nfs may need it). + */ +extern void __wait_on_super(struct super_block *); + +extern inline void wait_on_super(struct super_block * sb) +{ + if (sb->s_lock) + __wait_on_super(sb); +} + +extern inline void lock_super(struct super_block * sb) +{ + if (sb->s_lock) + __wait_on_super(sb); + sb->s_lock = 1; +} + +extern inline void unlock_super(struct super_block * sb) +{ + sb->s_lock = 0; + wake_up(&sb->s_wait); +} + +#endif /* _LINUX_LOCKS_H */ + |