Lines Matching refs:bh
135 static int ext4_bh_delay_or_unwritten(handle_t *handle, struct buffer_head *bh);
664 static void ext4_update_bh_state(struct buffer_head *bh, unsigned long flags) in ext4_update_bh_state() argument
672 if (!bh->b_page) { in ext4_update_bh_state()
673 bh->b_state = (bh->b_state & ~EXT4_MAP_FLAGS) | flags; in ext4_update_bh_state()
682 old_state = READ_ONCE(bh->b_state); in ext4_update_bh_state()
685 cmpxchg(&bh->b_state, old_state, new_state) != old_state)); in ext4_update_bh_state()
692 struct buffer_head *bh, int flags) in _ext4_get_block() argument
703 map.m_len = bh->b_size >> inode->i_blkbits; in _ext4_get_block()
723 map_bh(bh, inode->i_sb, map.m_pblk); in _ext4_get_block()
724 ext4_update_bh_state(bh, map.m_flags); in _ext4_get_block()
725 if (IS_DAX(inode) && buffer_unwritten(bh)) { in _ext4_get_block()
732 bh->b_assoc_map = inode->i_mapping; in _ext4_get_block()
733 bh->b_private = (void *)(unsigned long)iblock; in _ext4_get_block()
736 set_buffer_defer_completion(bh); in _ext4_get_block()
737 bh->b_size = inode->i_sb->s_blocksize * map.m_len; in _ext4_get_block()
746 struct buffer_head *bh, int create) in ext4_get_block() argument
748 return _ext4_get_block(inode, iblock, bh, in ext4_get_block()
759 struct buffer_head *bh; in ext4_getblk() local
774 bh = sb_getblk(inode->i_sb, map.m_pblk); in ext4_getblk()
775 if (unlikely(!bh)) in ext4_getblk()
788 lock_buffer(bh); in ext4_getblk()
789 BUFFER_TRACE(bh, "call get_create_access"); in ext4_getblk()
790 err = ext4_journal_get_create_access(handle, bh); in ext4_getblk()
792 unlock_buffer(bh); in ext4_getblk()
795 if (!buffer_uptodate(bh)) { in ext4_getblk()
796 memset(bh->b_data, 0, inode->i_sb->s_blocksize); in ext4_getblk()
797 set_buffer_uptodate(bh); in ext4_getblk()
799 unlock_buffer(bh); in ext4_getblk()
800 BUFFER_TRACE(bh, "call ext4_handle_dirty_metadata"); in ext4_getblk()
801 err = ext4_handle_dirty_metadata(handle, inode, bh); in ext4_getblk()
805 BUFFER_TRACE(bh, "not a new buffer"); in ext4_getblk()
806 return bh; in ext4_getblk()
808 brelse(bh); in ext4_getblk()
815 struct buffer_head *bh; in ext4_bread() local
817 bh = ext4_getblk(handle, inode, block, map_flags); in ext4_bread()
818 if (IS_ERR(bh)) in ext4_bread()
819 return bh; in ext4_bread()
820 if (!bh || buffer_uptodate(bh)) in ext4_bread()
821 return bh; in ext4_bread()
822 ll_rw_block(READ | REQ_META | REQ_PRIO, 1, &bh); in ext4_bread()
823 wait_on_buffer(bh); in ext4_bread()
824 if (buffer_uptodate(bh)) in ext4_bread()
825 return bh; in ext4_bread()
826 put_bh(bh); in ext4_bread()
836 struct buffer_head *bh)) in ext4_walk_page_buffers() argument
838 struct buffer_head *bh; in ext4_walk_page_buffers() local
844 for (bh = head, block_start = 0; in ext4_walk_page_buffers()
845 ret == 0 && (bh != head || !block_start); in ext4_walk_page_buffers()
846 block_start = block_end, bh = next) { in ext4_walk_page_buffers()
847 next = bh->b_this_page; in ext4_walk_page_buffers()
850 if (partial && !buffer_uptodate(bh)) in ext4_walk_page_buffers()
854 err = (*fn)(handle, bh); in ext4_walk_page_buffers()
886 struct buffer_head *bh) in do_journal_get_write_access() argument
888 int dirty = buffer_dirty(bh); in do_journal_get_write_access()
891 if (!buffer_mapped(bh) || buffer_freed(bh)) in do_journal_get_write_access()
902 clear_buffer_dirty(bh); in do_journal_get_write_access()
903 BUFFER_TRACE(bh, "get write access"); in do_journal_get_write_access()
904 ret = ext4_journal_get_write_access(handle, bh); in do_journal_get_write_access()
906 ret = ext4_handle_dirty_metadata(handle, NULL, bh); in do_journal_get_write_access()
925 struct buffer_head *bh, *head, *wait[2], **wait_bh = wait; in ext4_block_write_begin() local
939 for (bh = head, block_start = 0; bh != head || !block_start; in ext4_block_write_begin()
940 block++, block_start = block_end, bh = bh->b_this_page) { in ext4_block_write_begin()
944 if (!buffer_uptodate(bh)) in ext4_block_write_begin()
945 set_buffer_uptodate(bh); in ext4_block_write_begin()
949 if (buffer_new(bh)) in ext4_block_write_begin()
950 clear_buffer_new(bh); in ext4_block_write_begin()
951 if (!buffer_mapped(bh)) { in ext4_block_write_begin()
952 WARN_ON(bh->b_size != blocksize); in ext4_block_write_begin()
953 err = get_block(inode, block, bh, 1); in ext4_block_write_begin()
956 if (buffer_new(bh)) { in ext4_block_write_begin()
957 unmap_underlying_metadata(bh->b_bdev, in ext4_block_write_begin()
958 bh->b_blocknr); in ext4_block_write_begin()
960 clear_buffer_new(bh); in ext4_block_write_begin()
961 set_buffer_uptodate(bh); in ext4_block_write_begin()
962 mark_buffer_dirty(bh); in ext4_block_write_begin()
972 if (!buffer_uptodate(bh)) in ext4_block_write_begin()
973 set_buffer_uptodate(bh); in ext4_block_write_begin()
976 if (!buffer_uptodate(bh) && !buffer_delay(bh) && in ext4_block_write_begin()
977 !buffer_unwritten(bh) && in ext4_block_write_begin()
979 ll_rw_block(READ, 1, &bh); in ext4_block_write_begin()
980 *wait_bh++ = bh; in ext4_block_write_begin()
1119 static int write_end_fn(handle_t *handle, struct buffer_head *bh) in write_end_fn() argument
1122 if (!buffer_mapped(bh) || buffer_freed(bh)) in write_end_fn()
1124 set_buffer_uptodate(bh); in write_end_fn()
1125 ret = ext4_handle_dirty_metadata(handle, NULL, bh); in write_end_fn()
1126 clear_buffer_meta(bh); in write_end_fn()
1127 clear_buffer_prio(bh); in write_end_fn()
1220 struct buffer_head *head, *bh; in zero_new_buffers() local
1222 bh = head = page_buffers(page); in zero_new_buffers()
1224 block_end = block_start + bh->b_size; in zero_new_buffers()
1225 if (buffer_new(bh)) { in zero_new_buffers()
1234 set_buffer_uptodate(bh); in zero_new_buffers()
1236 clear_buffer_new(bh); in zero_new_buffers()
1240 bh = bh->b_this_page; in zero_new_buffers()
1241 } while (bh != head); in zero_new_buffers()
1388 struct buffer_head *head, *bh; in ext4_da_page_release_reservation() local
1399 bh = head; in ext4_da_page_release_reservation()
1401 unsigned int next_off = curr_off + bh->b_size; in ext4_da_page_release_reservation()
1406 if ((offset <= curr_off) && (buffer_delay(bh))) { in ext4_da_page_release_reservation()
1409 clear_buffer_delay(bh); in ext4_da_page_release_reservation()
1419 } while ((bh = bh->b_this_page) != head); in ext4_da_page_release_reservation()
1527 static int ext4_bh_delay_or_unwritten(handle_t *handle, struct buffer_head *bh) in ext4_bh_delay_or_unwritten() argument
1529 return (buffer_delay(bh) || buffer_unwritten(bh)) && buffer_dirty(bh); in ext4_bh_delay_or_unwritten()
1540 struct buffer_head *bh) in ext4_da_map_blocks() argument
1572 map_bh(bh, inode->i_sb, invalid_block); in ext4_da_map_blocks()
1573 set_buffer_new(bh); in ext4_da_map_blocks()
1574 set_buffer_delay(bh); in ext4_da_map_blocks()
1637 map_bh(bh, inode->i_sb, invalid_block); in ext4_da_map_blocks()
1638 set_buffer_new(bh); in ext4_da_map_blocks()
1639 set_buffer_delay(bh); in ext4_da_map_blocks()
1679 struct buffer_head *bh, int create) in ext4_da_get_block_prep() argument
1685 BUG_ON(bh->b_size != inode->i_sb->s_blocksize); in ext4_da_get_block_prep()
1695 ret = ext4_da_map_blocks(inode, iblock, &map, bh); in ext4_da_get_block_prep()
1699 map_bh(bh, inode->i_sb, map.m_pblk); in ext4_da_get_block_prep()
1700 ext4_update_bh_state(bh, map.m_flags); in ext4_da_get_block_prep()
1702 if (buffer_unwritten(bh)) { in ext4_da_get_block_prep()
1709 set_buffer_new(bh); in ext4_da_get_block_prep()
1710 set_buffer_mapped(bh); in ext4_da_get_block_prep()
1715 static int bget_one(handle_t *handle, struct buffer_head *bh) in bget_one() argument
1717 get_bh(bh); in bget_one()
1721 static int bput_one(handle_t *handle, struct buffer_head *bh) in bput_one() argument
1723 put_bh(bh); in bput_one()
1972 struct buffer_head *bh) in mpage_add_bh_to_extent() argument
1977 if (!buffer_dirty(bh) || !buffer_mapped(bh) || in mpage_add_bh_to_extent()
1978 (!buffer_delay(bh) && !buffer_unwritten(bh))) { in mpage_add_bh_to_extent()
1989 map->m_flags = bh->b_state & BH_FLAGS; in mpage_add_bh_to_extent()
1999 (bh->b_state & BH_FLAGS) == map->m_flags) { in mpage_add_bh_to_extent()
2024 struct buffer_head *bh, in mpage_process_page_bufs() argument
2033 BUG_ON(buffer_locked(bh)); in mpage_process_page_bufs()
2035 if (lblk >= blocks || !mpage_add_bh_to_extent(mpd, lblk, bh)) { in mpage_process_page_bufs()
2042 } while (lblk++, (bh = bh->b_this_page) != head); in mpage_process_page_bufs()
2071 struct buffer_head *head, *bh; in mpage_map_and_submit_buffers() local
2096 bh = head = page_buffers(page); in mpage_map_and_submit_buffers()
2115 bh, lblk); in mpage_map_and_submit_buffers()
2121 if (buffer_delay(bh)) { in mpage_map_and_submit_buffers()
2122 clear_buffer_delay(bh); in mpage_map_and_submit_buffers()
2123 bh->b_blocknr = pblock++; in mpage_map_and_submit_buffers()
2125 clear_buffer_unwritten(bh); in mpage_map_and_submit_buffers()
2126 } while (lblk++, (bh = bh->b_this_page) != head); in mpage_map_and_submit_buffers()
2787 struct buffer_head *bh; in ext4_da_should_update_i_disksize() local
2792 bh = page_buffers(page); in ext4_da_should_update_i_disksize()
2796 bh = bh->b_this_page; in ext4_da_should_update_i_disksize()
2798 if (!buffer_mapped(bh) || (buffer_delay(bh)) || buffer_unwritten(bh)) in ext4_da_should_update_i_disksize()
3412 struct buffer_head *bh; in __ext4_block_zero_page_range() local
3429 bh = page_buffers(page); in __ext4_block_zero_page_range()
3432 bh = bh->b_this_page; in __ext4_block_zero_page_range()
3436 if (buffer_freed(bh)) { in __ext4_block_zero_page_range()
3437 BUFFER_TRACE(bh, "freed: skip"); in __ext4_block_zero_page_range()
3440 if (!buffer_mapped(bh)) { in __ext4_block_zero_page_range()
3441 BUFFER_TRACE(bh, "unmapped"); in __ext4_block_zero_page_range()
3442 ext4_get_block(inode, iblock, bh, 0); in __ext4_block_zero_page_range()
3444 if (!buffer_mapped(bh)) { in __ext4_block_zero_page_range()
3445 BUFFER_TRACE(bh, "still unmapped"); in __ext4_block_zero_page_range()
3452 set_buffer_uptodate(bh); in __ext4_block_zero_page_range()
3454 if (!buffer_uptodate(bh)) { in __ext4_block_zero_page_range()
3456 ll_rw_block(READ, 1, &bh); in __ext4_block_zero_page_range()
3457 wait_on_buffer(bh); in __ext4_block_zero_page_range()
3459 if (!buffer_uptodate(bh)) in __ext4_block_zero_page_range()
3470 BUFFER_TRACE(bh, "get write access"); in __ext4_block_zero_page_range()
3471 err = ext4_journal_get_write_access(handle, bh); in __ext4_block_zero_page_range()
3476 BUFFER_TRACE(bh, "zeroed end of block"); in __ext4_block_zero_page_range()
3479 err = ext4_handle_dirty_metadata(handle, inode, bh); in __ext4_block_zero_page_range()
3482 mark_buffer_dirty(bh); in __ext4_block_zero_page_range()
3920 struct buffer_head *bh; in __ext4_get_inode_loc() local
3925 iloc->bh = NULL; in __ext4_get_inode_loc()
3943 bh = sb_getblk(sb, block); in __ext4_get_inode_loc()
3944 if (unlikely(!bh)) in __ext4_get_inode_loc()
3946 if (!buffer_uptodate(bh)) { in __ext4_get_inode_loc()
3947 lock_buffer(bh); in __ext4_get_inode_loc()
3955 if (buffer_write_io_error(bh) && !buffer_uptodate(bh)) in __ext4_get_inode_loc()
3956 set_buffer_uptodate(bh); in __ext4_get_inode_loc()
3958 if (buffer_uptodate(bh)) { in __ext4_get_inode_loc()
3960 unlock_buffer(bh); in __ext4_get_inode_loc()
3998 memset(bh->b_data, 0, bh->b_size); in __ext4_get_inode_loc()
3999 set_buffer_uptodate(bh); in __ext4_get_inode_loc()
4000 unlock_buffer(bh); in __ext4_get_inode_loc()
4037 get_bh(bh); in __ext4_get_inode_loc()
4038 bh->b_end_io = end_buffer_read_sync; in __ext4_get_inode_loc()
4039 submit_bh(READ | REQ_META | REQ_PRIO, bh); in __ext4_get_inode_loc()
4040 wait_on_buffer(bh); in __ext4_get_inode_loc()
4041 if (!buffer_uptodate(bh)) { in __ext4_get_inode_loc()
4044 brelse(bh); in __ext4_get_inode_loc()
4049 iloc->bh = bh; in __ext4_get_inode_loc()
4160 iloc.bh = NULL; in ext4_iget()
4364 brelse(iloc.bh); in ext4_iget()
4370 brelse(iloc.bh); in ext4_iget()
4498 struct buffer_head *bh = iloc->bh; in ext4_do_update_inode() local
4597 bh->b_data); in ext4_do_update_inode()
4599 BUFFER_TRACE(bh, "call ext4_handle_dirty_metadata"); in ext4_do_update_inode()
4600 rc = ext4_handle_dirty_metadata(handle, NULL, bh); in ext4_do_update_inode()
4616 brelse(bh); in ext4_do_update_inode()
4689 sync_dirty_buffer(iloc.bh); in ext4_write_inode()
4690 if (buffer_req(iloc.bh) && !buffer_uptodate(iloc.bh)) { in ext4_write_inode()
4691 EXT4_ERROR_INODE_BLOCK(inode, iloc.bh->b_blocknr, in ext4_write_inode()
4695 brelse(iloc.bh); in ext4_write_inode()
5060 get_bh(iloc->bh); in ext4_mark_iloc_dirty()
5064 put_bh(iloc->bh); in ext4_mark_iloc_dirty()
5081 BUFFER_TRACE(iloc->bh, "get_write_access"); in ext4_reserve_inode_write()
5082 err = ext4_journal_get_write_access(handle, iloc->bh); in ext4_reserve_inode_write()
5084 brelse(iloc->bh); in ext4_reserve_inode_write()
5085 iloc->bh = NULL; in ext4_reserve_inode_write()
5234 BUFFER_TRACE(iloc.bh, "get_write_access");
5235 err = jbd2_journal_get_write_access(handle, iloc.bh);
5239 iloc.bh);
5240 brelse(iloc.bh);
5325 static int ext4_bh_unmapped(handle_t *handle, struct buffer_head *bh) in ext4_bh_unmapped() argument
5327 return !buffer_mapped(bh); in ext4_bh_unmapped()