• Home
  • Raw
  • Download

Lines Matching refs:eb

27 static void btrfs_assert_tree_read_locked(struct extent_buffer *eb);
34 void btrfs_set_lock_blocking_rw(struct extent_buffer *eb, int rw) in btrfs_set_lock_blocking_rw() argument
42 if (eb->lock_nested && current->pid == eb->lock_owner) in btrfs_set_lock_blocking_rw()
45 if (atomic_read(&eb->blocking_writers) == 0) { in btrfs_set_lock_blocking_rw()
46 WARN_ON(atomic_read(&eb->spinning_writers) != 1); in btrfs_set_lock_blocking_rw()
47 atomic_dec(&eb->spinning_writers); in btrfs_set_lock_blocking_rw()
48 btrfs_assert_tree_locked(eb); in btrfs_set_lock_blocking_rw()
49 atomic_inc(&eb->blocking_writers); in btrfs_set_lock_blocking_rw()
50 write_unlock(&eb->lock); in btrfs_set_lock_blocking_rw()
53 btrfs_assert_tree_read_locked(eb); in btrfs_set_lock_blocking_rw()
54 atomic_inc(&eb->blocking_readers); in btrfs_set_lock_blocking_rw()
55 WARN_ON(atomic_read(&eb->spinning_readers) == 0); in btrfs_set_lock_blocking_rw()
56 atomic_dec(&eb->spinning_readers); in btrfs_set_lock_blocking_rw()
57 read_unlock(&eb->lock); in btrfs_set_lock_blocking_rw()
66 void btrfs_clear_lock_blocking_rw(struct extent_buffer *eb, int rw) in btrfs_clear_lock_blocking_rw() argument
74 if (eb->lock_nested && current->pid == eb->lock_owner) in btrfs_clear_lock_blocking_rw()
78 BUG_ON(atomic_read(&eb->blocking_writers) != 1); in btrfs_clear_lock_blocking_rw()
79 write_lock(&eb->lock); in btrfs_clear_lock_blocking_rw()
80 WARN_ON(atomic_read(&eb->spinning_writers)); in btrfs_clear_lock_blocking_rw()
81 atomic_inc(&eb->spinning_writers); in btrfs_clear_lock_blocking_rw()
85 if (atomic_dec_and_test(&eb->blocking_writers) && in btrfs_clear_lock_blocking_rw()
86 waitqueue_active(&eb->write_lock_wq)) in btrfs_clear_lock_blocking_rw()
87 wake_up(&eb->write_lock_wq); in btrfs_clear_lock_blocking_rw()
89 BUG_ON(atomic_read(&eb->blocking_readers) == 0); in btrfs_clear_lock_blocking_rw()
90 read_lock(&eb->lock); in btrfs_clear_lock_blocking_rw()
91 atomic_inc(&eb->spinning_readers); in btrfs_clear_lock_blocking_rw()
95 if (atomic_dec_and_test(&eb->blocking_readers) && in btrfs_clear_lock_blocking_rw()
96 waitqueue_active(&eb->read_lock_wq)) in btrfs_clear_lock_blocking_rw()
97 wake_up(&eb->read_lock_wq); in btrfs_clear_lock_blocking_rw()
106 void btrfs_tree_read_lock(struct extent_buffer *eb) in btrfs_tree_read_lock() argument
109 BUG_ON(!atomic_read(&eb->blocking_writers) && in btrfs_tree_read_lock()
110 current->pid == eb->lock_owner); in btrfs_tree_read_lock()
112 read_lock(&eb->lock); in btrfs_tree_read_lock()
113 if (atomic_read(&eb->blocking_writers) && in btrfs_tree_read_lock()
114 current->pid == eb->lock_owner) { in btrfs_tree_read_lock()
121 BUG_ON(eb->lock_nested); in btrfs_tree_read_lock()
122 eb->lock_nested = 1; in btrfs_tree_read_lock()
123 read_unlock(&eb->lock); in btrfs_tree_read_lock()
126 if (atomic_read(&eb->blocking_writers)) { in btrfs_tree_read_lock()
127 read_unlock(&eb->lock); in btrfs_tree_read_lock()
128 wait_event(eb->write_lock_wq, in btrfs_tree_read_lock()
129 atomic_read(&eb->blocking_writers) == 0); in btrfs_tree_read_lock()
132 atomic_inc(&eb->read_locks); in btrfs_tree_read_lock()
133 atomic_inc(&eb->spinning_readers); in btrfs_tree_read_lock()
141 int btrfs_tree_read_lock_atomic(struct extent_buffer *eb) in btrfs_tree_read_lock_atomic() argument
143 if (atomic_read(&eb->blocking_writers)) in btrfs_tree_read_lock_atomic()
146 read_lock(&eb->lock); in btrfs_tree_read_lock_atomic()
147 if (atomic_read(&eb->blocking_writers)) { in btrfs_tree_read_lock_atomic()
148 read_unlock(&eb->lock); in btrfs_tree_read_lock_atomic()
151 atomic_inc(&eb->read_locks); in btrfs_tree_read_lock_atomic()
152 atomic_inc(&eb->spinning_readers); in btrfs_tree_read_lock_atomic()
160 int btrfs_try_tree_read_lock(struct extent_buffer *eb) in btrfs_try_tree_read_lock() argument
162 if (atomic_read(&eb->blocking_writers)) in btrfs_try_tree_read_lock()
165 if (!read_trylock(&eb->lock)) in btrfs_try_tree_read_lock()
168 if (atomic_read(&eb->blocking_writers)) { in btrfs_try_tree_read_lock()
169 read_unlock(&eb->lock); in btrfs_try_tree_read_lock()
172 atomic_inc(&eb->read_locks); in btrfs_try_tree_read_lock()
173 atomic_inc(&eb->spinning_readers); in btrfs_try_tree_read_lock()
181 int btrfs_try_tree_write_lock(struct extent_buffer *eb) in btrfs_try_tree_write_lock() argument
183 if (atomic_read(&eb->blocking_writers) || in btrfs_try_tree_write_lock()
184 atomic_read(&eb->blocking_readers)) in btrfs_try_tree_write_lock()
187 write_lock(&eb->lock); in btrfs_try_tree_write_lock()
188 if (atomic_read(&eb->blocking_writers) || in btrfs_try_tree_write_lock()
189 atomic_read(&eb->blocking_readers)) { in btrfs_try_tree_write_lock()
190 write_unlock(&eb->lock); in btrfs_try_tree_write_lock()
193 atomic_inc(&eb->write_locks); in btrfs_try_tree_write_lock()
194 atomic_inc(&eb->spinning_writers); in btrfs_try_tree_write_lock()
195 eb->lock_owner = current->pid; in btrfs_try_tree_write_lock()
202 void btrfs_tree_read_unlock(struct extent_buffer *eb) in btrfs_tree_read_unlock() argument
210 if (eb->lock_nested && current->pid == eb->lock_owner) { in btrfs_tree_read_unlock()
211 eb->lock_nested = 0; in btrfs_tree_read_unlock()
214 btrfs_assert_tree_read_locked(eb); in btrfs_tree_read_unlock()
215 WARN_ON(atomic_read(&eb->spinning_readers) == 0); in btrfs_tree_read_unlock()
216 atomic_dec(&eb->spinning_readers); in btrfs_tree_read_unlock()
217 atomic_dec(&eb->read_locks); in btrfs_tree_read_unlock()
218 read_unlock(&eb->lock); in btrfs_tree_read_unlock()
224 void btrfs_tree_read_unlock_blocking(struct extent_buffer *eb) in btrfs_tree_read_unlock_blocking() argument
232 if (eb->lock_nested && current->pid == eb->lock_owner) { in btrfs_tree_read_unlock_blocking()
233 eb->lock_nested = 0; in btrfs_tree_read_unlock_blocking()
236 btrfs_assert_tree_read_locked(eb); in btrfs_tree_read_unlock_blocking()
237 WARN_ON(atomic_read(&eb->blocking_readers) == 0); in btrfs_tree_read_unlock_blocking()
241 if (atomic_dec_and_test(&eb->blocking_readers) && in btrfs_tree_read_unlock_blocking()
242 waitqueue_active(&eb->read_lock_wq)) in btrfs_tree_read_unlock_blocking()
243 wake_up(&eb->read_lock_wq); in btrfs_tree_read_unlock_blocking()
244 atomic_dec(&eb->read_locks); in btrfs_tree_read_unlock_blocking()
251 void btrfs_tree_lock(struct extent_buffer *eb) in btrfs_tree_lock() argument
253 WARN_ON(eb->lock_owner == current->pid); in btrfs_tree_lock()
255 wait_event(eb->read_lock_wq, atomic_read(&eb->blocking_readers) == 0); in btrfs_tree_lock()
256 wait_event(eb->write_lock_wq, atomic_read(&eb->blocking_writers) == 0); in btrfs_tree_lock()
257 write_lock(&eb->lock); in btrfs_tree_lock()
258 if (atomic_read(&eb->blocking_readers)) { in btrfs_tree_lock()
259 write_unlock(&eb->lock); in btrfs_tree_lock()
260 wait_event(eb->read_lock_wq, in btrfs_tree_lock()
261 atomic_read(&eb->blocking_readers) == 0); in btrfs_tree_lock()
264 if (atomic_read(&eb->blocking_writers)) { in btrfs_tree_lock()
265 write_unlock(&eb->lock); in btrfs_tree_lock()
266 wait_event(eb->write_lock_wq, in btrfs_tree_lock()
267 atomic_read(&eb->blocking_writers) == 0); in btrfs_tree_lock()
270 WARN_ON(atomic_read(&eb->spinning_writers)); in btrfs_tree_lock()
271 atomic_inc(&eb->spinning_writers); in btrfs_tree_lock()
272 atomic_inc(&eb->write_locks); in btrfs_tree_lock()
273 eb->lock_owner = current->pid; in btrfs_tree_lock()
279 void btrfs_tree_unlock(struct extent_buffer *eb) in btrfs_tree_unlock() argument
281 int blockers = atomic_read(&eb->blocking_writers); in btrfs_tree_unlock()
285 btrfs_assert_tree_locked(eb); in btrfs_tree_unlock()
286 eb->lock_owner = 0; in btrfs_tree_unlock()
287 atomic_dec(&eb->write_locks); in btrfs_tree_unlock()
290 WARN_ON(atomic_read(&eb->spinning_writers)); in btrfs_tree_unlock()
291 atomic_dec(&eb->blocking_writers); in btrfs_tree_unlock()
296 if (waitqueue_active(&eb->write_lock_wq)) in btrfs_tree_unlock()
297 wake_up(&eb->write_lock_wq); in btrfs_tree_unlock()
299 WARN_ON(atomic_read(&eb->spinning_writers) != 1); in btrfs_tree_unlock()
300 atomic_dec(&eb->spinning_writers); in btrfs_tree_unlock()
301 write_unlock(&eb->lock); in btrfs_tree_unlock()
305 void btrfs_assert_tree_locked(struct extent_buffer *eb) in btrfs_assert_tree_locked() argument
307 BUG_ON(!atomic_read(&eb->write_locks)); in btrfs_assert_tree_locked()
310 static void btrfs_assert_tree_read_locked(struct extent_buffer *eb) in btrfs_assert_tree_read_locked() argument
312 BUG_ON(!atomic_read(&eb->read_locks)); in btrfs_assert_tree_read_locked()