diff options
Diffstat (limited to 'fs/btrfs/extent_io.h')
| -rw-r--r-- | fs/btrfs/extent_io.h | 24 | 
1 files changed, 18 insertions, 6 deletions
diff --git a/fs/btrfs/extent_io.h b/fs/btrfs/extent_io.h index b5f120cca91..21a7ca9e728 100644 --- a/fs/btrfs/extent_io.h +++ b/fs/btrfs/extent_io.h @@ -128,14 +128,26 @@ struct extent_buffer {  	struct rcu_head rcu_head;  	atomic_t refs; -	/* the spinlock is used to protect most operations */ -	spinlock_t lock; +	/* count of read lock holders on the extent buffer */ +	atomic_t write_locks; +	atomic_t read_locks; +	atomic_t blocking_writers; +	atomic_t blocking_readers; +	atomic_t spinning_readers; +	atomic_t spinning_writers; + +	/* protects write locks */ +	rwlock_t lock; + +	/* readers use lock_wq while they wait for the write +	 * lock holders to unlock +	 */ +	wait_queue_head_t write_lock_wq; -	/* -	 * when we keep the lock held while blocking, waiters go onto -	 * the wq +	/* writers use read_lock_wq while they wait for readers +	 * to unlock  	 */ -	wait_queue_head_t lock_wq; +	wait_queue_head_t read_lock_wq;  };  static inline void extent_set_compress_type(unsigned long *bio_flags,  |