Lines Matching refs:bh

29 static void journal_end_buffer_io_sync(struct buffer_head *bh, int uptodate)  in journal_end_buffer_io_sync()  argument
31 BUFFER_TRACE(bh, ""); in journal_end_buffer_io_sync()
33 set_buffer_uptodate(bh); in journal_end_buffer_io_sync()
35 clear_buffer_uptodate(bh); in journal_end_buffer_io_sync()
36 unlock_buffer(bh); in journal_end_buffer_io_sync()
53 static void release_buffer_page(struct buffer_head *bh) in release_buffer_page() argument
57 if (buffer_dirty(bh)) in release_buffer_page()
59 if (atomic_read(&bh->b_count) != 1) in release_buffer_page()
61 page = bh->b_page; in release_buffer_page()
72 __brelse(bh); in release_buffer_page()
79 __brelse(bh); in release_buffer_page()
86 static void release_data_buffer(struct buffer_head *bh) in release_data_buffer() argument
88 if (buffer_freed(bh)) { in release_data_buffer()
89 WARN_ON_ONCE(buffer_dirty(bh)); in release_data_buffer()
90 clear_buffer_freed(bh); in release_data_buffer()
91 clear_buffer_mapped(bh); in release_data_buffer()
92 clear_buffer_new(bh); in release_data_buffer()
93 clear_buffer_req(bh); in release_data_buffer()
94 bh->b_bdev = NULL; in release_data_buffer()
95 release_buffer_page(bh); in release_data_buffer()
97 put_bh(bh); in release_data_buffer()
105 static int inverted_lock(journal_t *journal, struct buffer_head *bh) in inverted_lock() argument
107 if (!jbd_trylock_bh_state(bh)) { in inverted_lock()
126 struct buffer_head *bh; in journal_write_commit_record() local
137 bh = jh2bh(descriptor); in journal_write_commit_record()
139 header = (journal_header_t *)(bh->b_data); in journal_write_commit_record()
145 set_buffer_dirty(bh); in journal_write_commit_record()
148 ret = __sync_dirty_buffer(bh, WRITE_SYNC | WRITE_FLUSH_FUA); in journal_write_commit_record()
150 ret = sync_dirty_buffer(bh); in journal_write_commit_record()
152 put_bh(bh); /* One for getblk() */ in journal_write_commit_record()
187 struct buffer_head *bh; in journal_submit_data_buffers() local
207 bh = jh2bh(jh); in journal_submit_data_buffers()
212 get_bh(bh); in journal_submit_data_buffers()
218 if (buffer_dirty(bh)) { in journal_submit_data_buffers()
219 if (!trylock_buffer(bh)) { in journal_submit_data_buffers()
220 BUFFER_TRACE(bh, "needs blocking lock"); in journal_submit_data_buffers()
227 lock_buffer(bh); in journal_submit_data_buffers()
233 if (!inverted_lock(journal, bh)) { in journal_submit_data_buffers()
234 jbd_lock_bh_state(bh); in journal_submit_data_buffers()
238 if (!buffer_jbd(bh) || bh2jh(bh) != jh in journal_submit_data_buffers()
241 jbd_unlock_bh_state(bh); in journal_submit_data_buffers()
243 unlock_buffer(bh); in journal_submit_data_buffers()
244 BUFFER_TRACE(bh, "already cleaned up"); in journal_submit_data_buffers()
245 release_data_buffer(bh); in journal_submit_data_buffers()
248 if (locked && test_clear_buffer_dirty(bh)) { in journal_submit_data_buffers()
249 BUFFER_TRACE(bh, "needs writeout, adding to array"); in journal_submit_data_buffers()
250 wbuf[bufs++] = bh; in journal_submit_data_buffers()
253 jbd_unlock_bh_state(bh); in journal_submit_data_buffers()
262 } else if (!locked && buffer_locked(bh)) { in journal_submit_data_buffers()
265 jbd_unlock_bh_state(bh); in journal_submit_data_buffers()
266 put_bh(bh); in journal_submit_data_buffers()
268 BUFFER_TRACE(bh, "writeout complete: unfile"); in journal_submit_data_buffers()
269 if (unlikely(!buffer_uptodate(bh))) in journal_submit_data_buffers()
272 jbd_unlock_bh_state(bh); in journal_submit_data_buffers()
274 unlock_buffer(bh); in journal_submit_data_buffers()
275 release_data_buffer(bh); in journal_submit_data_buffers()
397 struct buffer_head *bh = jh2bh(jh); in journal_commit_transaction() local
399 jbd_lock_bh_state(bh); in journal_commit_transaction()
400 jbd_free(jh->b_committed_data, bh->b_size); in journal_commit_transaction()
402 jbd_unlock_bh_state(bh); in journal_commit_transaction()
457 struct buffer_head *bh; in journal_commit_transaction() local
460 bh = jh2bh(jh); in journal_commit_transaction()
461 get_bh(bh); in journal_commit_transaction()
462 if (buffer_locked(bh)) { in journal_commit_transaction()
464 wait_on_buffer(bh); in journal_commit_transaction()
467 if (unlikely(!buffer_uptodate(bh))) { in journal_commit_transaction()
468 if (!trylock_page(bh->b_page)) { in journal_commit_transaction()
470 lock_page(bh->b_page); in journal_commit_transaction()
473 if (bh->b_page->mapping) in journal_commit_transaction()
474 set_bit(AS_EIO, &bh->b_page->mapping->flags); in journal_commit_transaction()
476 unlock_page(bh->b_page); in journal_commit_transaction()
477 SetPageError(bh->b_page); in journal_commit_transaction()
480 if (!inverted_lock(journal, bh)) { in journal_commit_transaction()
481 put_bh(bh); in journal_commit_transaction()
485 if (buffer_jbd(bh) && bh2jh(bh) == jh && in journal_commit_transaction()
489 jbd_unlock_bh_state(bh); in journal_commit_transaction()
490 release_data_buffer(bh); in journal_commit_transaction()
561 struct buffer_head *bh; in journal_commit_transaction() local
573 bh = jh2bh(descriptor); in journal_commit_transaction()
575 (unsigned long long)bh->b_blocknr, bh->b_data); in journal_commit_transaction()
576 header = (journal_header_t *)&bh->b_data[0]; in journal_commit_transaction()
581 tagp = &bh->b_data[sizeof(journal_header_t)]; in journal_commit_transaction()
582 space_left = bh->b_size - sizeof(journal_header_t); in journal_commit_transaction()
584 set_buffer_jwrite(bh); in journal_commit_transaction()
585 set_buffer_dirty(bh); in journal_commit_transaction()
586 wbuf[bufs++] = bh; in journal_commit_transaction()
590 BUFFER_TRACE(bh, "ph3: file as descriptor"); in journal_commit_transaction()
674 struct buffer_head *bh = wbuf[i]; in journal_commit_transaction() local
675 lock_buffer(bh); in journal_commit_transaction()
676 clear_buffer_dirty(bh); in journal_commit_transaction()
677 set_buffer_uptodate(bh); in journal_commit_transaction()
678 bh->b_end_io = journal_end_buffer_io_sync; in journal_commit_transaction()
689 _submit_bh(write_op, bh, 1 << BIO_SNAP_STABLE); in journal_commit_transaction()
721 struct buffer_head *bh; in journal_commit_transaction() local
724 bh = jh2bh(jh); in journal_commit_transaction()
725 if (buffer_locked(bh)) { in journal_commit_transaction()
726 wait_on_buffer(bh); in journal_commit_transaction()
732 if (unlikely(!buffer_uptodate(bh))) in journal_commit_transaction()
735 clear_buffer_jwrite(bh); in journal_commit_transaction()
744 BUFFER_TRACE(bh, "dumping temporary bh"); in journal_commit_transaction()
746 __brelse(bh); in journal_commit_transaction()
747 J_ASSERT_BH(bh, atomic_read(&bh->b_count) == 0); in journal_commit_transaction()
748 free_buffer_head(bh); in journal_commit_transaction()
753 bh = jh2bh(jh); in journal_commit_transaction()
754 clear_buffer_jwrite(bh); in journal_commit_transaction()
755 J_ASSERT_BH(bh, buffer_jbddirty(bh)); in journal_commit_transaction()
770 wake_up_bit(&bh->b_state, BH_Unshadow); in journal_commit_transaction()
772 __brelse(bh); in journal_commit_transaction()
782 struct buffer_head *bh; in journal_commit_transaction() local
785 bh = jh2bh(jh); in journal_commit_transaction()
786 if (buffer_locked(bh)) { in journal_commit_transaction()
787 wait_on_buffer(bh); in journal_commit_transaction()
793 if (unlikely(!buffer_uptodate(bh))) in journal_commit_transaction()
796 BUFFER_TRACE(bh, "ph5: control buffer writeout done: unfile"); in journal_commit_transaction()
797 clear_buffer_jwrite(bh); in journal_commit_transaction()
800 __brelse(bh); /* One for getblk */ in journal_commit_transaction()
843 struct buffer_head *bh; in journal_commit_transaction() local
848 bh = jh2bh(jh); in journal_commit_transaction()
853 get_bh(bh); in journal_commit_transaction()
854 jbd_lock_bh_state(bh); in journal_commit_transaction()
869 jbd_free(jh->b_committed_data, bh->b_size); in journal_commit_transaction()
876 jbd_free(jh->b_frozen_data, bh->b_size); in journal_commit_transaction()
897 if (buffer_freed(bh)) { in journal_commit_transaction()
915 clear_buffer_freed(bh); in journal_commit_transaction()
916 clear_buffer_jbddirty(bh); in journal_commit_transaction()
917 clear_buffer_mapped(bh); in journal_commit_transaction()
918 clear_buffer_new(bh); in journal_commit_transaction()
919 clear_buffer_req(bh); in journal_commit_transaction()
920 bh->b_bdev = NULL; in journal_commit_transaction()
924 if (buffer_jbddirty(bh)) { in journal_commit_transaction()
928 clear_buffer_jbddirty(bh); in journal_commit_transaction()
930 J_ASSERT_BH(bh, !buffer_dirty(bh)); in journal_commit_transaction()
945 jbd_unlock_bh_state(bh); in journal_commit_transaction()
947 release_buffer_page(bh); in journal_commit_transaction()
949 __brelse(bh); in journal_commit_transaction()