File: /usr/src/linux/include/linux/locks.h

1     #ifndef _LINUX_LOCKS_H
2     #define _LINUX_LOCKS_H
3     
4     #ifndef _LINUX_MM_H
5     #include <linux/mm.h>
6     #endif
7     #ifndef _LINUX_PAGEMAP_H
8     #include <linux/pagemap.h>
9     #endif
10     
11     /*
12      * Buffer cache locking - note that interrupts may only unlock, not
13      * lock buffers.
14      */
15     extern void __wait_on_buffer(struct buffer_head *);
16     
17     static inline void wait_on_buffer(struct buffer_head * bh)
18     {
19     	if (test_bit(BH_Lock, &bh->b_state))
20     		__wait_on_buffer(bh);
21     }
22     
23     static inline void lock_buffer(struct buffer_head * bh)
24     {
25     	while (test_and_set_bit(BH_Lock, &bh->b_state))
26     		__wait_on_buffer(bh);
27     }
28     
29     extern void unlock_buffer(struct buffer_head *bh);
30     
31     /*
32      * super-block locking. Again, interrupts may only unlock
33      * a super-block (although even this isn't done right now.
34      * nfs may need it).
35      */
36     
37     static inline void lock_super(struct super_block * sb)
38     {
39     	down(&sb->s_lock);
40     }
41     
42     static inline void unlock_super(struct super_block * sb)
43     {
44     	up(&sb->s_lock);
45     }
46     
47     #endif /* _LINUX_LOCKS_H */
48     
49