Lines Matching refs:folio

88 void buffer_check_dirty_writeback(struct folio *folio,  in buffer_check_dirty_writeback()  argument
95 BUG_ON(!folio_test_locked(folio)); in buffer_check_dirty_writeback()
97 head = folio_buffers(folio); in buffer_check_dirty_writeback()
101 if (folio_test_writeback(folio)) in buffer_check_dirty_writeback()
188 struct folio *folio; in __find_get_block_slow() local
193 folio = __filemap_get_folio(bd_mapping, index, FGP_ACCESSED, 0); in __find_get_block_slow()
194 if (IS_ERR(folio)) in __find_get_block_slow()
205 folio_lock(folio); in __find_get_block_slow()
207 head = folio_buffers(folio); in __find_get_block_slow()
250 folio_unlock(folio); in __find_get_block_slow()
251 folio_put(folio); in __find_get_block_slow()
261 struct folio *folio; in end_buffer_async_read() local
266 folio = bh->b_folio; in end_buffer_async_read()
279 first = folio_buffers(folio); in end_buffer_async_read()
295 folio_end_read(folio, folio_uptodate); in end_buffer_async_read()
321 struct folio *folio = bh->b_folio; in need_fsverity() local
322 struct inode *inode = folio->mapping->host; in need_fsverity()
326 folio->index < DIV_ROUND_UP(inode->i_size, PAGE_SIZE); in need_fsverity()
392 struct folio *folio; in end_buffer_async_write() local
396 folio = bh->b_folio; in end_buffer_async_write()
405 first = folio_buffers(folio); in end_buffer_async_write()
419 folio_end_writeback(folio); in end_buffer_async_write()
731 bool block_dirty_folio(struct address_space *mapping, struct folio *folio) in block_dirty_folio() argument
737 head = folio_buffers(folio); in block_dirty_folio()
750 newly_dirty = !folio_test_set_dirty(folio); in block_dirty_folio()
754 __folio_mark_dirty(folio, mapping, 1); in block_dirty_folio()
921 struct buffer_head *folio_alloc_buffers(struct folio *folio, unsigned long size, in folio_alloc_buffers() argument
929 memcg = folio_memcg(folio); in folio_alloc_buffers()
933 offset = folio_size(folio); in folio_alloc_buffers()
946 folio_set_bh(bh, folio, offset); in folio_alloc_buffers()
975 static inline void link_dev_buffers(struct folio *folio, in link_dev_buffers() argument
986 folio_attach_private(folio, head); in link_dev_buffers()
1004 static sector_t folio_init_buffers(struct folio *folio, in folio_init_buffers() argument
1007 struct buffer_head *head = folio_buffers(folio); in folio_init_buffers()
1009 bool uptodate = folio_test_uptodate(folio); in folio_init_buffers()
1010 sector_t block = div_u64(folio_pos(folio), size); in folio_init_buffers()
1046 struct folio *folio; in grow_dev_folio() local
1050 folio = __filemap_get_folio(mapping, index, in grow_dev_folio()
1052 if (IS_ERR(folio)) in grow_dev_folio()
1055 bh = folio_buffers(folio); in grow_dev_folio()
1058 end_block = folio_init_buffers(folio, bdev, size); in grow_dev_folio()
1069 if (!try_to_free_buffers(folio)) { in grow_dev_folio()
1075 bh = folio_alloc_buffers(folio, size, gfp | __GFP_ACCOUNT); in grow_dev_folio()
1085 link_dev_buffers(folio, bh); in grow_dev_folio()
1086 end_block = folio_init_buffers(folio, bdev, size); in grow_dev_folio()
1089 folio_unlock(folio); in grow_dev_folio()
1090 folio_put(folio); in grow_dev_folio()
1200 struct folio *folio = bh->b_folio; in mark_buffer_dirty() local
1203 if (!folio_test_set_dirty(folio)) { in mark_buffer_dirty()
1204 mapping = folio->mapping; in mark_buffer_dirty()
1206 __folio_mark_dirty(folio, mapping, 0); in mark_buffer_dirty()
1578 void folio_set_bh(struct buffer_head *bh, struct folio *folio, in folio_set_bh() argument
1581 bh->b_folio = folio; in folio_set_bh()
1582 BUG_ON(offset >= folio_size(folio)); in folio_set_bh()
1583 if (folio_test_highmem(folio)) in folio_set_bh()
1589 bh->b_data = folio_address(folio) + offset; in folio_set_bh()
1631 void block_invalidate_folio(struct folio *folio, size_t offset, size_t length) in block_invalidate_folio() argument
1637 BUG_ON(!folio_test_locked(folio)); in block_invalidate_folio()
1642 BUG_ON(stop > folio_size(folio) || stop < length); in block_invalidate_folio()
1644 head = folio_buffers(folio); in block_invalidate_folio()
1673 if (length == folio_size(folio)) in block_invalidate_folio()
1674 filemap_release_folio(folio, 0); in block_invalidate_folio()
1676 folio_clear_mappedtodisk(folio); in block_invalidate_folio()
1685 struct buffer_head *create_empty_buffers(struct folio *folio, in create_empty_buffers() argument
1691 head = folio_alloc_buffers(folio, blocksize, gfp); in create_empty_buffers()
1700 spin_lock(&folio->mapping->i_private_lock); in create_empty_buffers()
1701 if (folio_test_uptodate(folio) || folio_test_dirty(folio)) { in create_empty_buffers()
1704 if (folio_test_dirty(folio)) in create_empty_buffers()
1706 if (folio_test_uptodate(folio)) in create_empty_buffers()
1711 folio_attach_private(folio, head); in create_empty_buffers()
1712 spin_unlock(&folio->mapping->i_private_lock); in create_empty_buffers()
1754 struct folio *folio = fbatch.folios[i]; in clean_bdev_aliases() local
1756 if (!folio_buffers(folio)) in clean_bdev_aliases()
1763 folio_lock(folio); in clean_bdev_aliases()
1765 head = folio_buffers(folio); in clean_bdev_aliases()
1781 folio_unlock(folio); in clean_bdev_aliases()
1792 static struct buffer_head *folio_create_buffers(struct folio *folio, in folio_create_buffers() argument
1798 BUG_ON(!folio_test_locked(folio)); in folio_create_buffers()
1800 bh = folio_buffers(folio); in folio_create_buffers()
1802 bh = create_empty_buffers(folio, in folio_create_buffers()
1836 int __block_write_full_folio(struct inode *inode, struct folio *folio, in __block_write_full_folio() argument
1847 head = folio_create_buffers(folio, inode, in __block_write_full_folio()
1863 block = div_u64(folio_pos(folio), blocksize); in __block_write_full_folio()
1912 folio_redirty_for_writepage(wbc, folio); in __block_write_full_folio()
1927 BUG_ON(folio_test_writeback(folio)); in __block_write_full_folio()
1928 folio_start_writeback(folio); in __block_write_full_folio()
1939 folio_unlock(folio); in __block_write_full_folio()
1949 folio_end_writeback(folio); in __block_write_full_folio()
1981 BUG_ON(folio_test_writeback(folio)); in __block_write_full_folio()
1982 mapping_set_error(folio->mapping, err); in __block_write_full_folio()
1983 folio_start_writeback(folio); in __block_write_full_folio()
1994 folio_unlock(folio); in __block_write_full_folio()
2004 void folio_zero_new_buffers(struct folio *folio, size_t from, size_t to) in folio_zero_new_buffers() argument
2009 BUG_ON(!folio_test_locked(folio)); in folio_zero_new_buffers()
2010 head = folio_buffers(folio); in folio_zero_new_buffers()
2021 if (!folio_test_uptodate(folio)) { in folio_zero_new_buffers()
2027 folio_zero_segment(folio, start, xend); in folio_zero_new_buffers()
2110 int __block_write_begin_int(struct folio *folio, loff_t pos, unsigned len, in __block_write_begin_int() argument
2113 size_t from = offset_in_folio(folio, pos); in __block_write_begin_int()
2115 struct inode *inode = folio->mapping->host; in __block_write_begin_int()
2122 BUG_ON(!folio_test_locked(folio)); in __block_write_begin_int()
2123 BUG_ON(to > folio_size(folio)); in __block_write_begin_int()
2126 head = folio_create_buffers(folio, inode, 0); in __block_write_begin_int()
2128 block = div_u64(folio_pos(folio), blocksize); in __block_write_begin_int()
2134 if (folio_test_uptodate(folio)) { in __block_write_begin_int()
2153 if (folio_test_uptodate(folio)) { in __block_write_begin_int()
2160 folio_zero_segments(folio, in __block_write_begin_int()
2166 if (folio_test_uptodate(folio)) { in __block_write_begin_int()
2187 folio_zero_new_buffers(folio, from, to); in __block_write_begin_int()
2191 int __block_write_begin(struct folio *folio, loff_t pos, unsigned len, in __block_write_begin() argument
2194 return __block_write_begin_int(folio, pos, len, get_block, NULL); in __block_write_begin()
2198 void block_commit_write(struct folio *folio, size_t from, size_t to) in block_commit_write() argument
2205 bh = head = folio_buffers(folio); in block_commit_write()
2234 folio_mark_uptodate(folio); in block_commit_write()
2245 struct folio **foliop, get_block_t *get_block) in block_write_begin()
2248 struct folio *folio; in block_write_begin() local
2251 folio = __filemap_get_folio(mapping, index, FGP_WRITEBEGIN, in block_write_begin()
2253 if (IS_ERR(folio)) in block_write_begin()
2254 return PTR_ERR(folio); in block_write_begin()
2256 status = __block_write_begin_int(folio, pos, len, get_block, NULL); in block_write_begin()
2258 folio_unlock(folio); in block_write_begin()
2259 folio_put(folio); in block_write_begin()
2260 folio = NULL; in block_write_begin()
2263 *foliop = folio; in block_write_begin()
2269 struct folio *folio) in block_write_end() argument
2271 size_t start = pos - folio_pos(folio); in block_write_end()
2286 if (!folio_test_uptodate(folio)) in block_write_end()
2289 folio_zero_new_buffers(folio, start+copied, start+len); in block_write_end()
2291 flush_dcache_folio(folio); in block_write_end()
2294 block_commit_write(folio, start, start + copied); in block_write_end()
2302 struct folio *folio, void *fsdata) in generic_write_end() argument
2308 copied = block_write_end(pos, len, copied, folio); in generic_write_end()
2322 folio_unlock(folio); in generic_write_end()
2323 folio_put(folio); in generic_write_end()
2346 bool block_is_partially_uptodate(struct folio *folio, size_t from, size_t count) in block_is_partially_uptodate() argument
2353 head = folio_buffers(folio); in block_is_partially_uptodate()
2357 to = min_t(unsigned, folio_size(folio) - from, count); in block_is_partially_uptodate()
2359 if (from < blocksize && to > folio_size(folio) - blocksize) in block_is_partially_uptodate()
2389 int block_read_full_folio(struct folio *folio, get_block_t *get_block) in block_read_full_folio() argument
2391 struct inode *inode = folio->mapping->host; in block_read_full_folio()
2403 head = folio_create_buffers(folio, inode, 0); in block_read_full_folio()
2406 iblock = div_u64(folio_pos(folio), blocksize); in block_read_full_folio()
2425 folio_zero_range(folio, bh_offset(bh), in block_read_full_folio()
2452 folio_set_mappedtodisk(folio); in block_read_full_folio()
2463 folio_end_read(folio, !page_error); in block_read_full_folio()
2477 struct folio *folio; in generic_cont_expand_simple() local
2485 err = aops->write_begin(NULL, mapping, size, 0, &folio, &fsdata); in generic_cont_expand_simple()
2489 err = aops->write_end(NULL, mapping, size, 0, 0, folio, fsdata); in generic_cont_expand_simple()
2504 struct folio *folio; in cont_expand_zero() local
2523 &folio, &fsdata); in cont_expand_zero()
2526 folio_zero_range(folio, offset_in_folio(folio, curpos), len); in cont_expand_zero()
2528 folio, fsdata); in cont_expand_zero()
2556 &folio, &fsdata); in cont_expand_zero()
2559 folio_zero_range(folio, offset_in_folio(folio, curpos), len); in cont_expand_zero()
2561 folio, fsdata); in cont_expand_zero()
2576 loff_t pos, unsigned len, struct folio **foliop, in cont_write_begin()
2619 struct folio *folio = page_folio(vmf->page); in block_page_mkwrite() local
2625 folio_lock(folio); in block_page_mkwrite()
2627 if ((folio->mapping != inode->i_mapping) || in block_page_mkwrite()
2628 (folio_pos(folio) >= size)) { in block_page_mkwrite()
2634 end = folio_size(folio); in block_page_mkwrite()
2636 if (folio_pos(folio) + end > size) in block_page_mkwrite()
2637 end = size - folio_pos(folio); in block_page_mkwrite()
2639 ret = __block_write_begin_int(folio, 0, end, get_block, NULL); in block_page_mkwrite()
2643 block_commit_write(folio, 0, end); in block_page_mkwrite()
2645 folio_mark_dirty(folio); in block_page_mkwrite()
2646 folio_wait_stable(folio); in block_page_mkwrite()
2649 folio_unlock(folio); in block_page_mkwrite()
2662 struct folio *folio; in block_truncate_page() local
2676 folio = filemap_grab_folio(mapping, index); in block_truncate_page()
2677 if (IS_ERR(folio)) in block_truncate_page()
2678 return PTR_ERR(folio); in block_truncate_page()
2680 bh = folio_buffers(folio); in block_truncate_page()
2682 bh = create_empty_buffers(folio, blocksize, 0); in block_truncate_page()
2685 offset = offset_in_folio(folio, from); in block_truncate_page()
2704 if (folio_test_uptodate(folio)) in block_truncate_page()
2714 folio_zero_range(folio, offset, length); in block_truncate_page()
2718 folio_unlock(folio); in block_truncate_page()
2719 folio_put(folio); in block_truncate_page()
2728 int block_write_full_folio(struct folio *folio, struct writeback_control *wbc, in block_write_full_folio() argument
2731 struct inode * const inode = folio->mapping->host; in block_write_full_folio()
2735 if (folio_pos(folio) + folio_size(folio) <= i_size) in block_write_full_folio()
2736 return __block_write_full_folio(inode, folio, get_block, wbc); in block_write_full_folio()
2739 if (folio_pos(folio) >= i_size) { in block_write_full_folio()
2740 folio_unlock(folio); in block_write_full_folio()
2751 folio_zero_segment(folio, offset_in_folio(folio, i_size), in block_write_full_folio()
2752 folio_size(folio)); in block_write_full_folio()
2753 return __block_write_full_folio(inode, folio, get_block, wbc); in block_write_full_folio()
2891 drop_buffers(struct folio *folio, struct buffer_head **buffers_to_free) in drop_buffers() argument
2893 struct buffer_head *head = folio_buffers(folio); in drop_buffers()
2911 folio_detach_private(folio); in drop_buffers()
2941 bool try_to_free_buffers(struct folio *folio) in try_to_free_buffers() argument
2943 struct address_space * const mapping = folio->mapping; in try_to_free_buffers()
2947 BUG_ON(!folio_test_locked(folio)); in try_to_free_buffers()
2948 if (folio_test_writeback(folio)) in try_to_free_buffers()
2952 ret = drop_buffers(folio, &buffers_to_free); in try_to_free_buffers()
2957 ret = drop_buffers(folio, &buffers_to_free); in try_to_free_buffers()
2974 folio_cancel_dirty(folio); in try_to_free_buffers()