~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~ [ freetext search ] ~ [ file search ] ~

Linux Cross Reference
Linux/include/linux/locks.h

Version: ~ [ 2.4.0 ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

  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 extern 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 extern 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 inline void unlock_buffer(struct buffer_head *bh)
 30 {
 31         clear_bit(BH_Lock, &bh->b_state);
 32         smp_mb__after_clear_bit();
 33         if (waitqueue_active(&bh->b_wait))
 34                 wake_up(&bh->b_wait);
 35 }
 36 
 37 /*
 38  * super-block locking. Again, interrupts may only unlock
 39  * a super-block (although even this isn't done right now.
 40  * nfs may need it).
 41  */
 42 extern void __wait_on_super(struct super_block *);
 43 
 44 extern inline void wait_on_super(struct super_block * sb)
 45 {
 46         if (sb->s_lock)
 47                 __wait_on_super(sb);
 48 }
 49 
 50 extern inline void lock_super(struct super_block * sb)
 51 {
 52         if (sb->s_lock)
 53                 __wait_on_super(sb);
 54         sb->s_lock = 1;
 55 }
 56 
 57 extern inline void unlock_super(struct super_block * sb)
 58 {
 59         sb->s_lock = 0;
 60         /*
 61          * No need of any barrier, we're protected by
 62          * the big kernel lock here... unfortunately :)
 63          */
 64         if (waitqueue_active(&sb->s_wait))
 65                 wake_up(&sb->s_wait);
 66 }
 67 
 68 #endif /* _LINUX_LOCKS_H */
 69 
 70 

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~ [ freetext search ] ~ [ file search ] ~

This page was automatically generated by the LXR engine.
Visit the LXR main site for more information.