Lines Matching refs:bh

127 static int reiserfs_clean_and_file_buffer(struct buffer_head *bh)  in reiserfs_clean_and_file_buffer()  argument
129 if (bh) { in reiserfs_clean_and_file_buffer()
130 clear_buffer_dirty(bh); in reiserfs_clean_and_file_buffer()
131 clear_buffer_journal_test(bh); in reiserfs_clean_and_file_buffer()
412 static void clear_prepared_bits(struct buffer_head *bh) in clear_prepared_bits() argument
414 clear_buffer_journal_prepared(bh); in clear_prepared_bits()
415 clear_buffer_journal_restore_dirty(bh); in clear_prepared_bits()
604 static void release_buffer_page(struct buffer_head *bh) in release_buffer_page() argument
606 struct page *page = bh->b_page; in release_buffer_page()
609 put_bh(bh); in release_buffer_page()
615 put_bh(bh); in release_buffer_page()
619 static void reiserfs_end_buffer_io_sync(struct buffer_head *bh, int uptodate) in reiserfs_end_buffer_io_sync() argument
623 if (buffer_journaled(bh)) { in reiserfs_end_buffer_io_sync()
626 bh->b_blocknr, bdevname(bh->b_bdev, b)); in reiserfs_end_buffer_io_sync()
629 set_buffer_uptodate(bh); in reiserfs_end_buffer_io_sync()
631 clear_buffer_uptodate(bh); in reiserfs_end_buffer_io_sync()
633 unlock_buffer(bh); in reiserfs_end_buffer_io_sync()
634 release_buffer_page(bh); in reiserfs_end_buffer_io_sync()
637 static void reiserfs_end_ordered_io(struct buffer_head *bh, int uptodate) in reiserfs_end_ordered_io() argument
640 set_buffer_uptodate(bh); in reiserfs_end_ordered_io()
642 clear_buffer_uptodate(bh); in reiserfs_end_ordered_io()
643 unlock_buffer(bh); in reiserfs_end_ordered_io()
644 put_bh(bh); in reiserfs_end_ordered_io()
647 static void submit_logged_buffer(struct buffer_head *bh) in submit_logged_buffer() argument
649 get_bh(bh); in submit_logged_buffer()
650 bh->b_end_io = reiserfs_end_buffer_io_sync; in submit_logged_buffer()
651 clear_buffer_journal_new(bh); in submit_logged_buffer()
652 clear_buffer_dirty(bh); in submit_logged_buffer()
653 if (!test_clear_buffer_journal_test(bh)) in submit_logged_buffer()
655 if (!buffer_uptodate(bh)) in submit_logged_buffer()
657 submit_bh(WRITE, bh); in submit_logged_buffer()
660 static void submit_ordered_buffer(struct buffer_head *bh) in submit_ordered_buffer() argument
662 get_bh(bh); in submit_ordered_buffer()
663 bh->b_end_io = reiserfs_end_ordered_io; in submit_ordered_buffer()
664 clear_buffer_dirty(bh); in submit_ordered_buffer()
665 if (!buffer_uptodate(bh)) in submit_ordered_buffer()
667 submit_bh(WRITE, bh); in submit_ordered_buffer()
672 struct buffer_head *bh[CHUNK_SIZE]; member
680 submit_logged_buffer(chunk->bh[i]); in write_chunk()
689 submit_ordered_buffer(chunk->bh[i]); in write_ordered_chunk()
694 static int add_to_chunk(struct buffer_chunk *chunk, struct buffer_head *bh, in add_to_chunk() argument
699 chunk->bh[chunk->nr++] = bh; in add_to_chunk()
731 void reiserfs_free_jh(struct buffer_head *bh) in reiserfs_free_jh() argument
735 jh = bh->b_private; in reiserfs_free_jh()
737 bh->b_private = NULL; in reiserfs_free_jh()
738 jh->bh = NULL; in reiserfs_free_jh()
744 put_bh(bh); in reiserfs_free_jh()
748 static inline int __add_jh(struct reiserfs_journal *j, struct buffer_head *bh, in __add_jh() argument
753 if (bh->b_private) { in __add_jh()
755 if (!bh->b_private) { in __add_jh()
759 jh = bh->b_private; in __add_jh()
763 get_bh(bh); in __add_jh()
770 BUG_ON(bh->b_private); in __add_jh()
771 jh->bh = bh; in __add_jh()
772 bh->b_private = jh; in __add_jh()
784 int reiserfs_add_tail_list(struct inode *inode, struct buffer_head *bh) in reiserfs_add_tail_list() argument
786 return __add_jh(SB_JOURNAL(inode->i_sb), bh, 1); in reiserfs_add_tail_list()
788 int reiserfs_add_ordered_list(struct inode *inode, struct buffer_head *bh) in reiserfs_add_ordered_list() argument
790 return __add_jh(SB_JOURNAL(inode->i_sb), bh, 0); in reiserfs_add_ordered_list()
799 struct buffer_head *bh; in write_ordered_buffers() local
810 bh = jh->bh; in write_ordered_buffers()
811 get_bh(bh); in write_ordered_buffers()
812 if (!trylock_buffer(bh)) { in write_ordered_buffers()
813 if (!buffer_dirty(bh)) { in write_ordered_buffers()
820 wait_on_buffer(bh); in write_ordered_buffers()
830 if (!buffer_uptodate(bh) && buffer_dirty(bh)) { in write_ordered_buffers()
831 clear_buffer_dirty(bh); in write_ordered_buffers()
834 if (buffer_dirty(bh)) { in write_ordered_buffers()
836 add_to_chunk(&chunk, bh, lock, write_ordered_chunk); in write_ordered_buffers()
838 reiserfs_free_jh(bh); in write_ordered_buffers()
839 unlock_buffer(bh); in write_ordered_buffers()
842 put_bh(bh); in write_ordered_buffers()
852 bh = jh->bh; in write_ordered_buffers()
853 get_bh(bh); in write_ordered_buffers()
854 reiserfs_free_jh(bh); in write_ordered_buffers()
856 if (buffer_locked(bh)) { in write_ordered_buffers()
858 wait_on_buffer(bh); in write_ordered_buffers()
861 if (!buffer_uptodate(bh)) { in write_ordered_buffers()
873 if (buffer_dirty(bh) && unlikely(bh->b_page->mapping == NULL)) { in write_ordered_buffers()
875 ll_rw_block(WRITE, 1, &bh); in write_ordered_buffers()
878 put_bh(bh); in write_ordered_buffers()
1216 cn->blocknr, cn->bh ? 1 : 0, in remove_all_from_journal_list()
1436 if (!pjl && cn->bh) { in flush_journal_list()
1437 saved_bh = cn->bh; in flush_journal_list()
1528 if (!cn->bh) { in flush_journal_list()
1534 __wait_on_buffer(cn->bh); in flush_journal_list()
1537 if (!cn->bh) { in flush_journal_list()
1541 if (unlikely(!buffer_uptodate(cn->bh))) { in flush_journal_list()
1554 (cn->bh)); in flush_journal_list()
1557 put_bh(cn->bh); in flush_journal_list()
1559 release_buffer_page(cn->bh); in flush_journal_list()
1653 if (cn->bh && can_dirty(cn) && buffer_dirty(cn->bh)) { in write_one_transaction()
1660 tmp_bh = cn->bh; in write_one_transaction()
1663 if (cn->bh && can_dirty(cn) && buffer_dirty(tmp_bh)) { in write_one_transaction()
1699 if (!pjl && cn->blocknr && cn->bh in dirty_one_transaction()
1700 && buffer_journal_dirty(cn->bh)) { in dirty_one_transaction()
1707 clear_buffer_journal_new(cn->bh); in dirty_one_transaction()
1708 if (buffer_journal_prepared(cn->bh)) { in dirty_one_transaction()
1709 set_buffer_journal_restore_dirty(cn->bh); in dirty_one_transaction()
1711 set_buffer_journal_test(cn->bh); in dirty_one_transaction()
1712 mark_buffer_dirty(cn->bh); in dirty_one_transaction()
1877 if (cur->bh && cur->jlist) in remove_journal_hash()
1879 cur->bh = NULL; in remove_journal_hash()
2331 struct buffer_head *bh; in reiserfs_breada() local
2334 bh = __getblk(dev, block, bufsize); in reiserfs_breada()
2335 if (buffer_uptodate(bh)) in reiserfs_breada()
2336 return (bh); in reiserfs_breada()
2341 bhlist[0] = bh; in reiserfs_breada()
2344 bh = __getblk(dev, block + i, bufsize); in reiserfs_breada()
2345 if (buffer_uptodate(bh)) { in reiserfs_breada()
2346 brelse(bh); in reiserfs_breada()
2349 bhlist[j++] = bh; in reiserfs_breada()
2354 bh = bhlist[0]; in reiserfs_breada()
2355 wait_on_buffer(bh); in reiserfs_breada()
2356 if (buffer_uptodate(bh)) in reiserfs_breada()
2357 return bh; in reiserfs_breada()
2358 brelse(bh); in reiserfs_breada()
3275 struct buffer_head *bh) in journal_mark_dirty() argument
3291 prepared = test_clear_buffer_journal_prepared(bh); in journal_mark_dirty()
3292 clear_buffer_journal_restore_dirty(bh); in journal_mark_dirty()
3294 if (buffer_journaled(bh)) { in journal_mark_dirty()
3304 if (!prepared || buffer_dirty(bh)) { in journal_mark_dirty()
3308 (unsigned long long)bh->b_blocknr, in journal_mark_dirty()
3310 buffer_locked(bh) ? ' ' : '!', in journal_mark_dirty()
3311 buffer_dirty(bh) ? ' ' : '!', in journal_mark_dirty()
3312 buffer_journal_dirty(bh) ? ' ' : '!'); in journal_mark_dirty()
3332 if (buffer_journal_dirty(bh)) { in journal_mark_dirty()
3335 clear_buffer_journal_dirty(bh); in journal_mark_dirty()
3342 set_buffer_journaled(bh); in journal_mark_dirty()
3358 cn->bh = bh; in journal_mark_dirty()
3359 cn->blocknr = bh->b_blocknr; in journal_mark_dirty()
3364 get_bh(bh); in journal_mark_dirty()
3369 cn->bh = bh; in journal_mark_dirty()
3425 struct buffer_head *bh; in remove_from_transaction() local
3431 if (!cn || !cn->bh) { in remove_from_transaction()
3434 bh = cn->bh; in remove_from_transaction()
3447 if (bh) in remove_from_transaction()
3449 bh->b_blocknr, 0); in remove_from_transaction()
3450 clear_buffer_journaled(bh); /* don't log this one */ in remove_from_transaction()
3453 clear_buffer_journal_dirty(bh); in remove_from_transaction()
3454 clear_buffer_dirty(bh); in remove_from_transaction()
3455 clear_buffer_journal_test(bh); in remove_from_transaction()
3456 put_bh(bh); in remove_from_transaction()
3457 if (atomic_read(&bh->b_count) < 0) { in remove_from_transaction()
3493 if (cur->jlist && cur->bh && cur->blocknr && cur->sb == sb && in can_dirty()
3506 atomic_read(&cur->jlist->j_commit_left) > 0 && cur->bh && in can_dirty()
3741 struct buffer_head *bh = NULL; in journal_mark_freed() local
3747 if (cn && cn->bh) { in journal_mark_freed()
3748 bh = cn->bh; in journal_mark_freed()
3749 get_bh(bh); in journal_mark_freed()
3752 if (bh && buffer_journal_new(bh)) { in journal_mark_freed()
3753 clear_buffer_journal_new(bh); in journal_mark_freed()
3754 clear_prepared_bits(bh); in journal_mark_freed()
3755 reiserfs_clean_and_file_buffer(bh); in journal_mark_freed()
3771 if (bh) { in journal_mark_freed()
3772 clear_prepared_bits(bh); in journal_mark_freed()
3773 reiserfs_clean_and_file_buffer(bh); in journal_mark_freed()
3786 if (cn->bh) { in journal_mark_freed()
3794 bh); in journal_mark_freed()
3795 clear_buffer_dirty(cn->bh); in journal_mark_freed()
3797 bh); in journal_mark_freed()
3799 put_bh(cn->bh); in journal_mark_freed()
3801 (&cn->bh->b_count) < 0) { in journal_mark_freed()
3815 cn->bh = NULL; in journal_mark_freed()
3822 if (bh) in journal_mark_freed()
3823 release_buffer_page(bh); /* get_hash grabs the buffer */ in journal_mark_freed()
3921 struct buffer_head *bh) in reiserfs_restore_prepared_buffer() argument
3925 if (!bh) { in reiserfs_restore_prepared_buffer()
3928 if (test_clear_buffer_journal_restore_dirty(bh) && in reiserfs_restore_prepared_buffer()
3929 buffer_journal_dirty(bh)) { in reiserfs_restore_prepared_buffer()
3934 bh->b_blocknr); in reiserfs_restore_prepared_buffer()
3936 set_buffer_journal_test(bh); in reiserfs_restore_prepared_buffer()
3937 mark_buffer_dirty(bh); in reiserfs_restore_prepared_buffer()
3941 clear_buffer_journal_prepared(bh); in reiserfs_restore_prepared_buffer()
3952 struct buffer_head *bh, int wait) in reiserfs_prepare_for_journal() argument
3956 if (!trylock_buffer(bh)) { in reiserfs_prepare_for_journal()
3959 lock_buffer(bh); in reiserfs_prepare_for_journal()
3961 set_buffer_journal_prepared(bh); in reiserfs_prepare_for_journal()
3962 if (test_clear_buffer_dirty(bh) && buffer_journal_dirty(bh)) { in reiserfs_prepare_for_journal()
3963 clear_buffer_journal_test(bh); in reiserfs_prepare_for_journal()
3964 set_buffer_journal_restore_dirty(bh); in reiserfs_prepare_for_journal()
3966 unlock_buffer(bh); in reiserfs_prepare_for_journal()
4126 if (buffer_journaled(cn->bh)) { in do_journal_end()
4146 (sb, cn->bh->b_blocknr)) { in do_journal_end()
4150 cn->bh->b_blocknr); in do_journal_end()
4152 jl_cn->blocknr = cn->bh->b_blocknr; in do_journal_end()
4155 jl_cn->bh = cn->bh; in do_journal_end()
4160 cpu_to_le32(cn->bh->b_blocknr); in do_journal_end()
4163 cpu_to_le32(cn->bh->b_blocknr); in do_journal_end()
4195 clear_buffer_journal_new(cn->bh); in do_journal_end()
4197 if (buffer_journaled(cn->bh)) { in do_journal_end()
4208 page = cn->bh->b_page; in do_journal_end()
4211 addr + offset_in_page(cn->bh->b_data), in do_journal_end()
4212 cn->bh->b_size); in do_journal_end()
4216 set_buffer_journal_dirty(cn->bh); in do_journal_end()
4217 clear_buffer_journaled(cn->bh); in do_journal_end()
4226 brelse(cn->bh); in do_journal_end()