57 lines
1 KiB
C
57 lines
1 KiB
C
![]() |
#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 */
|
||
|
|