Lines Matching refs:inode

45 	handle_t *handle, struct inode *inode, struct ext4_map_blocks *map,
48 static __le32 ext4_extent_block_csum(struct inode *inode, in ext4_extent_block_csum() argument
51 struct ext4_inode_info *ei = EXT4_I(inode); in ext4_extent_block_csum()
59 static int ext4_extent_block_csum_verify(struct inode *inode, in ext4_extent_block_csum_verify() argument
64 if (!ext4_has_feature_metadata_csum(inode->i_sb)) in ext4_extent_block_csum_verify()
68 if (et->et_checksum != ext4_extent_block_csum(inode, eh)) in ext4_extent_block_csum_verify()
73 static void ext4_extent_block_csum_set(struct inode *inode, in ext4_extent_block_csum_set() argument
78 if (!ext4_has_feature_metadata_csum(inode->i_sb)) in ext4_extent_block_csum_set()
82 et->et_checksum = ext4_extent_block_csum(inode, eh); in ext4_extent_block_csum_set()
86 struct inode *inode,
90 static int ext4_ext_trunc_restart_fn(struct inode *inode, int *dropped) in ext4_ext_trunc_restart_fn() argument
98 BUG_ON(EXT4_JOURNAL(inode) == NULL); in ext4_ext_trunc_restart_fn()
99 ext4_discard_preallocations(inode); in ext4_ext_trunc_restart_fn()
100 up_write(&EXT4_I(inode)->i_data_sem); in ext4_ext_trunc_restart_fn()
138 int ext4_datasem_ensure_credits(handle_t *handle, struct inode *inode, in ext4_datasem_ensure_credits() argument
146 revoke_cred, ext4_ext_trunc_restart_fn(inode, &dropped)); in ext4_datasem_ensure_credits()
148 down_write(&EXT4_I(inode)->i_data_sem); in ext4_datasem_ensure_credits()
157 static int ext4_ext_get_access(handle_t *handle, struct inode *inode, in ext4_ext_get_access() argument
165 err = ext4_journal_get_write_access(handle, inode->i_sb, in ext4_ext_get_access()
188 handle_t *handle, struct inode *inode, in __ext4_ext_dirty() argument
193 KUNIT_STATIC_STUB_REDIRECT(__ext4_ext_dirty, where, line, handle, inode, in __ext4_ext_dirty()
196 WARN_ON(!rwsem_is_locked(&EXT4_I(inode)->i_data_sem)); in __ext4_ext_dirty()
198 ext4_extent_block_csum_set(inode, ext_block_hdr(path->p_bh)); in __ext4_ext_dirty()
201 inode, path->p_bh); in __ext4_ext_dirty()
207 err = ext4_mark_inode_dirty(handle, inode); in __ext4_ext_dirty()
212 #define ext4_ext_dirty(handle, inode, path) \ argument
213 __ext4_ext_dirty(__func__, __LINE__, (handle), (inode), (path))
215 static ext4_fsblk_t ext4_ext_find_goal(struct inode *inode, in ext4_ext_find_goal() argument
258 return ext4_inode_to_goal_block(inode); in ext4_ext_find_goal()
265 ext4_ext_new_meta_block(handle_t *handle, struct inode *inode, in ext4_ext_new_meta_block() argument
271 goal = ext4_ext_find_goal(inode, path, le32_to_cpu(ex->ee_block)); in ext4_ext_new_meta_block()
272 newblock = ext4_new_meta_blocks(handle, inode, goal, flags, in ext4_ext_new_meta_block()
277 static inline int ext4_ext_space_block(struct inode *inode, int check) in ext4_ext_space_block() argument
281 size = (inode->i_sb->s_blocksize - sizeof(struct ext4_extent_header)) in ext4_ext_space_block()
290 static inline int ext4_ext_space_block_idx(struct inode *inode, int check) in ext4_ext_space_block_idx() argument
294 size = (inode->i_sb->s_blocksize - sizeof(struct ext4_extent_header)) in ext4_ext_space_block_idx()
303 static inline int ext4_ext_space_root(struct inode *inode, int check) in ext4_ext_space_root() argument
307 size = sizeof(EXT4_I(inode)->i_data); in ext4_ext_space_root()
317 static inline int ext4_ext_space_root_idx(struct inode *inode, int check) in ext4_ext_space_root_idx() argument
321 size = sizeof(EXT4_I(inode)->i_data); in ext4_ext_space_root_idx()
332 ext4_force_split_extent_at(handle_t *handle, struct inode *inode, in ext4_force_split_extent_at() argument
341 return ext4_split_extent_at(handle, inode, path, lblk, flags); in ext4_force_split_extent_at()
345 ext4_ext_max_entries(struct inode *inode, int depth) in ext4_ext_max_entries() argument
349 if (depth == ext_depth(inode)) { in ext4_ext_max_entries()
351 max = ext4_ext_space_root(inode, 1); in ext4_ext_max_entries()
353 max = ext4_ext_space_root_idx(inode, 1); in ext4_ext_max_entries()
356 max = ext4_ext_space_block(inode, 1); in ext4_ext_max_entries()
358 max = ext4_ext_space_block_idx(inode, 1); in ext4_ext_max_entries()
364 static int ext4_valid_extent(struct inode *inode, struct ext4_extent *ext) in ext4_valid_extent() argument
377 return ext4_inode_block_valid(inode, block, len); in ext4_valid_extent()
380 static int ext4_valid_extent_idx(struct inode *inode, in ext4_valid_extent_idx() argument
385 return ext4_inode_block_valid(inode, block, 1); in ext4_valid_extent_idx()
388 static int ext4_valid_extent_entries(struct inode *inode, in ext4_valid_extent_entries() argument
410 if (depth != ext_depth(inode) && in ext4_valid_extent_entries()
414 if (!ext4_valid_extent(inode, ext)) in ext4_valid_extent_entries()
434 if (depth != ext_depth(inode) && in ext4_valid_extent_entries()
438 if (!ext4_valid_extent_idx(inode, ext_idx)) in ext4_valid_extent_entries()
456 struct inode *inode, struct ext4_extent_header *eh, in __ext4_ext_check() argument
474 max = ext4_ext_max_entries(inode, depth); in __ext4_ext_check()
487 if (!ext4_valid_extent_entries(inode, eh, lblk, &pblk, depth)) { in __ext4_ext_check()
496 if (ext_depth(inode) != depth && in __ext4_ext_check()
497 !ext4_extent_block_csum_verify(inode, eh)) { in __ext4_ext_check()
505 ext4_error_inode_err(inode, function, line, 0, -err, in __ext4_ext_check()
516 #define ext4_ext_check(inode, eh, depth, pblk) \ argument
517 __ext4_ext_check(__func__, __LINE__, (inode), (eh), (depth), (pblk), 0)
519 int ext4_ext_check_inode(struct inode *inode) in ext4_ext_check_inode() argument
521 return ext4_ext_check(inode, ext_inode_hdr(inode), ext_depth(inode), 0); in ext4_ext_check_inode()
524 static void ext4_cache_extents(struct inode *inode, in ext4_cache_extents() argument
531 KUNIT_STATIC_STUB_REDIRECT(ext4_cache_extents, inode, eh); in ext4_cache_extents()
539 ext4_es_cache_extent(inode, prev, lblk - prev, ~0, in ext4_cache_extents()
544 ext4_es_cache_extent(inode, lblk, len, in ext4_cache_extents()
552 struct inode *inode, struct ext4_extent_idx *idx, in __read_extent_tree_block() argument
564 bh = sb_getblk_gfp(inode->i_sb, pblk, gfp_flags); in __read_extent_tree_block()
569 trace_ext4_ext_load_extent(inode, pblk, _RET_IP_); in __read_extent_tree_block()
576 err = __ext4_ext_check(function, line, inode, ext_block_hdr(bh), in __read_extent_tree_block()
586 ext4_cache_extents(inode, eh); in __read_extent_tree_block()
595 #define read_extent_tree_block(inode, idx, depth, flags) \ argument
596 __read_extent_tree_block(__func__, __LINE__, (inode), (idx), \
603 int ext4_ext_precache(struct inode *inode) in ext4_ext_precache() argument
605 struct ext4_inode_info *ei = EXT4_I(inode); in ext4_ext_precache()
610 if (!ext4_test_inode_flag(inode, EXT4_INODE_EXTENTS)) in ext4_ext_precache()
613 ext4_check_map_extents_env(inode); in ext4_ext_precache()
616 depth = ext_depth(inode); in ext4_ext_precache()
630 path[0].p_hdr = ext_inode_hdr(inode); in ext4_ext_precache()
631 ret = ext4_ext_check(inode, path[0].p_hdr, depth, 0); in ext4_ext_precache()
646 bh = read_extent_tree_block(inode, path[i].p_idx++, in ext4_ext_precache()
658 ext4_set_inode_state(inode, EXT4_STATE_EXT_PRECACHED); in ext4_ext_precache()
666 static void ext4_ext_show_path(struct inode *inode, struct ext4_ext_path *path) in ext4_ext_show_path() argument
670 ext_debug(inode, "path:"); in ext4_ext_show_path()
673 ext_debug(inode, " %d->%llu", in ext4_ext_show_path()
677 ext_debug(inode, " %d:[%d]%d:%llu ", in ext4_ext_show_path()
683 ext_debug(inode, " []"); in ext4_ext_show_path()
685 ext_debug(inode, "\n"); in ext4_ext_show_path()
688 static void ext4_ext_show_leaf(struct inode *inode, struct ext4_ext_path *path) in ext4_ext_show_leaf() argument
690 int depth = ext_depth(inode); in ext4_ext_show_leaf()
701 ext_debug(inode, "Displaying leaf extents\n"); in ext4_ext_show_leaf()
704 ext_debug(inode, "%d:[%d]%d:%llu ", le32_to_cpu(ex->ee_block), in ext4_ext_show_leaf()
708 ext_debug(inode, "\n"); in ext4_ext_show_leaf()
711 static void ext4_ext_show_move(struct inode *inode, struct ext4_ext_path *path, in ext4_ext_show_move() argument
714 int depth = ext_depth(inode); in ext4_ext_show_move()
721 ext_debug(inode, "%d: move %d:%llu in new index %llu\n", in ext4_ext_show_move()
732 ext_debug(inode, "move %d:%llu:[%d]%d in new leaf %llu\n", in ext4_ext_show_move()
743 #define ext4_ext_show_path(inode, path) argument
744 #define ext4_ext_show_leaf(inode, path) argument
745 #define ext4_ext_show_move(inode, path, newblock, level) argument
754 ext4_ext_binsearch_idx(struct inode *inode, in ext4_ext_binsearch_idx() argument
761 ext_debug(inode, "binsearch for %u(idx): ", block); in ext4_ext_binsearch_idx()
767 ext_debug(inode, "%p(%u):%p(%u):%p(%u) ", l, in ext4_ext_binsearch_idx()
778 ext_debug(inode, " -> %u->%lld ", le32_to_cpu(path->p_idx->ei_block), in ext4_ext_binsearch_idx()
815 ext4_ext_binsearch(struct inode *inode, in ext4_ext_binsearch() argument
829 ext_debug(inode, "binsearch for %u: ", block); in ext4_ext_binsearch()
836 ext_debug(inode, "%p(%u):%p(%u):%p(%u) ", l, in ext4_ext_binsearch()
847 ext_debug(inode, " -> %d:%llu:[%d]%d ", in ext4_ext_binsearch()
872 void ext4_ext_tree_init(handle_t *handle, struct inode *inode) in ext4_ext_tree_init() argument
876 eh = ext_inode_hdr(inode); in ext4_ext_tree_init()
880 eh->eh_max = cpu_to_le16(ext4_ext_space_root(inode, 0)); in ext4_ext_tree_init()
882 ext4_mark_inode_dirty(handle, inode); in ext4_ext_tree_init()
886 ext4_find_extent(struct inode *inode, ext4_lblk_t block, in ext4_find_extent() argument
895 KUNIT_STATIC_STUB_REDIRECT(ext4_find_extent, inode, block, path, flags); in ext4_find_extent()
900 eh = ext_inode_hdr(inode); in ext4_find_extent()
901 depth = ext_depth(inode); in ext4_find_extent()
903 EXT4_ERROR_INODE(inode, "inode has invalid extent depth: %d", in ext4_find_extent()
928 ext4_cache_extents(inode, eh); in ext4_find_extent()
931 ext_debug(inode, "depth %d: num %d, max %d\n", in ext4_find_extent()
934 ext4_ext_binsearch_idx(inode, path + ppos, block); in ext4_find_extent()
939 bh = read_extent_tree_block(inode, path[ppos].p_idx, --i, flags); in ext4_find_extent()
956 ext4_ext_binsearch(inode, path + ppos, block); in ext4_find_extent()
961 ext4_ext_show_path(inode, path); in ext4_find_extent()
975 static int ext4_ext_insert_index(handle_t *handle, struct inode *inode, in ext4_ext_insert_index() argument
982 err = ext4_ext_get_access(handle, inode, curp); in ext4_ext_insert_index()
987 EXT4_ERROR_INODE(inode, in ext4_ext_insert_index()
995 EXT4_ERROR_INODE(inode, in ext4_ext_insert_index()
1004 ext_debug(inode, "insert new index %d after: %llu\n", in ext4_ext_insert_index()
1009 ext_debug(inode, "insert new index %d before: %llu\n", in ext4_ext_insert_index()
1015 EXT4_ERROR_INODE(inode, "ix > EXT_MAX_INDEX!"); in ext4_ext_insert_index()
1022 ext_debug(inode, "insert new index %d: " in ext4_ext_insert_index()
1033 EXT4_ERROR_INODE(inode, "ix > EXT_LAST_INDEX!"); in ext4_ext_insert_index()
1037 err = ext4_ext_dirty(handle, inode, curp); in ext4_ext_insert_index()
1038 ext4_std_error(inode->i_sb, err); in ext4_ext_insert_index()
1053 static int ext4_ext_split(handle_t *handle, struct inode *inode, in ext4_ext_split() argument
1059 int depth = ext_depth(inode); in ext4_ext_split()
1079 EXT4_ERROR_INODE(inode, "p_ext > EXT_MAX_EXTENT!"); in ext4_ext_split()
1084 ext_debug(inode, "leaf will be split." in ext4_ext_split()
1089 ext_debug(inode, "leaf will be added." in ext4_ext_split()
1111 ext_debug(inode, "allocate %d blocks for indexes/leaf\n", depth - at); in ext4_ext_split()
1113 newblock = ext4_ext_new_meta_block(handle, inode, path, in ext4_ext_split()
1123 EXT4_ERROR_INODE(inode, "newblock == 0!"); in ext4_ext_split()
1127 bh = sb_getblk_gfp(inode->i_sb, newblock, __GFP_MOVABLE | GFP_NOFS); in ext4_ext_split()
1134 err = ext4_journal_get_create_access(handle, inode->i_sb, bh, in ext4_ext_split()
1141 neh->eh_max = cpu_to_le16(ext4_ext_space_block(inode, 0)); in ext4_ext_split()
1149 EXT4_ERROR_INODE(inode, "eh_entries %d != eh_max %d!", in ext4_ext_split()
1157 ext4_ext_show_move(inode, path, newblock, depth); in ext4_ext_split()
1168 memset(bh->b_data + ext_size, 0, inode->i_sb->s_blocksize - ext_size); in ext4_ext_split()
1169 ext4_extent_block_csum_set(inode, neh); in ext4_ext_split()
1173 err = ext4_handle_dirty_metadata(handle, inode, bh); in ext4_ext_split()
1181 err = ext4_ext_get_access(handle, inode, path + depth); in ext4_ext_split()
1185 err = ext4_ext_dirty(handle, inode, path + depth); in ext4_ext_split()
1194 EXT4_ERROR_INODE(inode, "k %d < 0!", k); in ext4_ext_split()
1199 ext_debug(inode, "create %d intermediate indices\n", k); in ext4_ext_split()
1206 bh = sb_getblk(inode->i_sb, newblock); in ext4_ext_split()
1213 err = ext4_journal_get_create_access(handle, inode->i_sb, bh, in ext4_ext_split()
1221 neh->eh_max = cpu_to_le16(ext4_ext_space_block_idx(inode, 0)); in ext4_ext_split()
1228 ext_debug(inode, "int.index at %d (block %llu): %u -> %llu\n", in ext4_ext_split()
1234 EXT4_ERROR_INODE(inode, in ext4_ext_split()
1242 ext_debug(inode, "cur 0x%p, last 0x%p\n", path[i].p_idx, in ext4_ext_split()
1244 ext4_ext_show_move(inode, path, newblock, i); in ext4_ext_split()
1254 inode->i_sb->s_blocksize - ext_size); in ext4_ext_split()
1255 ext4_extent_block_csum_set(inode, neh); in ext4_ext_split()
1259 err = ext4_handle_dirty_metadata(handle, inode, bh); in ext4_ext_split()
1267 err = ext4_ext_get_access(handle, inode, path + i); in ext4_ext_split()
1271 err = ext4_ext_dirty(handle, inode, path + i); in ext4_ext_split()
1280 err = ext4_ext_insert_index(handle, inode, path + at, in ext4_ext_split()
1295 ext4_free_blocks(handle, inode, NULL, ablocks[i], 1, in ext4_ext_split()
1312 static int ext4_ext_grow_indepth(handle_t *handle, struct inode *inode, in ext4_ext_grow_indepth() argument
1318 struct ext4_super_block *es = EXT4_SB(inode->i_sb)->s_es; in ext4_ext_grow_indepth()
1323 if (ext_depth(inode)) in ext4_ext_grow_indepth()
1324 goal = ext4_idx_pblock(EXT_FIRST_INDEX(ext_inode_hdr(inode))); in ext4_ext_grow_indepth()
1329 goal = ext4_inode_to_goal_block(inode); in ext4_ext_grow_indepth()
1330 newblock = ext4_new_meta_blocks(handle, inode, goal, flags, in ext4_ext_grow_indepth()
1335 bh = sb_getblk_gfp(inode->i_sb, newblock, __GFP_MOVABLE | GFP_NOFS); in ext4_ext_grow_indepth()
1340 err = ext4_journal_get_create_access(handle, inode->i_sb, bh, in ext4_ext_grow_indepth()
1347 ext_size = sizeof(EXT4_I(inode)->i_data); in ext4_ext_grow_indepth()
1349 memmove(bh->b_data, EXT4_I(inode)->i_data, ext_size); in ext4_ext_grow_indepth()
1351 memset(bh->b_data + ext_size, 0, inode->i_sb->s_blocksize - ext_size); in ext4_ext_grow_indepth()
1357 if (ext_depth(inode)) in ext4_ext_grow_indepth()
1358 neh->eh_max = cpu_to_le16(ext4_ext_space_block_idx(inode, 0)); in ext4_ext_grow_indepth()
1360 neh->eh_max = cpu_to_le16(ext4_ext_space_block(inode, 0)); in ext4_ext_grow_indepth()
1362 ext4_extent_block_csum_set(inode, neh); in ext4_ext_grow_indepth()
1367 err = ext4_handle_dirty_metadata(handle, inode, bh); in ext4_ext_grow_indepth()
1372 neh = ext_inode_hdr(inode); in ext4_ext_grow_indepth()
1377 neh->eh_max = cpu_to_le16(ext4_ext_space_root_idx(inode, 0)); in ext4_ext_grow_indepth()
1381 ext_debug(inode, "new root: num %d(%d), lblock %d, ptr %llu\n", in ext4_ext_grow_indepth()
1387 err = ext4_mark_inode_dirty(handle, inode); in ext4_ext_grow_indepth()
1400 ext4_ext_create_new_leaf(handle_t *handle, struct inode *inode, in ext4_ext_create_new_leaf() argument
1410 i = depth = ext_depth(inode); in ext4_ext_create_new_leaf()
1424 err = ext4_ext_split(handle, inode, mb_flags, path, newext, i); in ext4_ext_create_new_leaf()
1429 path = ext4_find_extent(inode, ee_block, path, gb_flags); in ext4_ext_create_new_leaf()
1434 err = ext4_ext_grow_indepth(handle, inode, mb_flags); in ext4_ext_create_new_leaf()
1439 path = ext4_find_extent(inode, ee_block, path, gb_flags); in ext4_ext_create_new_leaf()
1447 depth = ext_depth(inode); in ext4_ext_create_new_leaf()
1467 static int ext4_ext_search_left(struct inode *inode, in ext4_ext_search_left() argument
1476 EXT4_ERROR_INODE(inode, "path == NULL *logical %d!", *logical); in ext4_ext_search_left()
1493 EXT4_ERROR_INODE(inode, in ext4_ext_search_left()
1501 EXT4_ERROR_INODE(inode, in ext4_ext_search_left()
1513 EXT4_ERROR_INODE(inode, in ext4_ext_search_left()
1531 static int ext4_ext_search_right(struct inode *inode, in ext4_ext_search_right() argument
1544 EXT4_ERROR_INODE(inode, "path == NULL *logical %d!", *logical); in ext4_ext_search_right()
1561 EXT4_ERROR_INODE(inode, in ext4_ext_search_right()
1569 EXT4_ERROR_INODE(inode, in ext4_ext_search_right()
1579 EXT4_ERROR_INODE(inode, in ext4_ext_search_right()
1608 bh = read_extent_tree_block(inode, ix, path->p_depth - depth, in ext4_ext_search_right()
1617 bh = read_extent_tree_block(inode, ix, path->p_depth - depth, flags); in ext4_ext_search_right()
1703 static int ext4_ext_correct_indexes(handle_t *handle, struct inode *inode, in ext4_ext_correct_indexes() argument
1707 int depth = ext_depth(inode); in ext4_ext_correct_indexes()
1716 EXT4_ERROR_INODE(inode, in ext4_ext_correct_indexes()
1736 err = ext4_ext_get_access(handle, inode, path + k); in ext4_ext_correct_indexes()
1740 EXT4_ERROR_INODE(inode, in ext4_ext_correct_indexes()
1747 err = ext4_ext_dirty(handle, inode, path + k); in ext4_ext_correct_indexes()
1755 err = ext4_ext_get_access(handle, inode, path + k); in ext4_ext_correct_indexes()
1759 EXT4_ERROR_INODE(inode, in ext4_ext_correct_indexes()
1767 err = ext4_ext_dirty(handle, inode, path + k); in ext4_ext_correct_indexes()
1786 static int ext4_can_extents_be_merged(struct inode *inode, in ext4_can_extents_be_merged() argument
1825 static int ext4_ext_try_to_merge_right(struct inode *inode, in ext4_ext_try_to_merge_right() argument
1833 depth = ext_depth(inode); in ext4_ext_try_to_merge_right()
1838 if (!ext4_can_extents_be_merged(inode, ex, ex + 1)) in ext4_ext_try_to_merge_right()
1856 EXT4_ERROR_INODE(inode, "eh->eh_entries = 0!"); in ext4_ext_try_to_merge_right()
1867 struct inode *inode, in ext4_ext_try_to_merge_up() argument
1871 unsigned max_root = ext4_ext_space_root(inode, 0); in ext4_ext_try_to_merge_up()
1885 ext4_free_metadata_revoke_credits(inode->i_sb, 1))) in ext4_ext_try_to_merge_up()
1904 ext4_free_blocks(handle, inode, NULL, blk, 1, in ext4_ext_try_to_merge_up()
1913 struct inode *inode, in ext4_ext_try_to_merge() argument
1921 depth = ext_depth(inode); in ext4_ext_try_to_merge()
1926 merge_done = ext4_ext_try_to_merge_right(inode, path, ex - 1); in ext4_ext_try_to_merge()
1929 (void) ext4_ext_try_to_merge_right(inode, path, ex); in ext4_ext_try_to_merge()
1931 ext4_ext_try_to_merge_up(handle, inode, path); in ext4_ext_try_to_merge()
1943 struct inode *inode, in ext4_ext_check_overlap() argument
1953 depth = ext_depth(inode); in ext4_ext_check_overlap()
1992 ext4_ext_insert_extent(handle_t *handle, struct inode *inode, in ext4_ext_insert_extent() argument
2003 KUNIT_STATIC_STUB_REDIRECT(ext4_ext_insert_extent, handle, inode, path, in ext4_ext_insert_extent()
2009 EXT4_ERROR_INODE(inode, "ext4_ext_get_actual_len(newext) == 0"); in ext4_ext_insert_extent()
2013 depth = ext_depth(inode); in ext4_ext_insert_extent()
2017 EXT4_ERROR_INODE(inode, "path[%d].p_hdr == NULL", depth); in ext4_ext_insert_extent()
2045 if (ext4_can_extents_be_merged(inode, ex, newext)) { in ext4_ext_insert_extent()
2046 ext_debug(inode, "append [%d]%d block to %u:[%d]%d" in ext4_ext_insert_extent()
2054 err = ext4_ext_get_access(handle, inode, in ext4_ext_insert_extent()
2069 if (ext4_can_extents_be_merged(inode, newext, ex)) { in ext4_ext_insert_extent()
2070 ext_debug(inode, "prepend %u[%d]%d block to %u:[%d]%d" in ext4_ext_insert_extent()
2079 err = ext4_ext_get_access(handle, inode, in ext4_ext_insert_extent()
2096 depth = ext_depth(inode); in ext4_ext_insert_extent()
2109 ext_debug(inode, "next leaf block - %u\n", next); in ext4_ext_insert_extent()
2110 npath = ext4_find_extent(inode, next, NULL, gb_flags); in ext4_ext_insert_extent()
2118 ext_debug(inode, "next leaf isn't full(%d)\n", in ext4_ext_insert_extent()
2124 ext_debug(inode, "next leaf has no free space(%d,%d)\n", in ext4_ext_insert_extent()
2135 path = ext4_ext_create_new_leaf(handle, inode, mb_flags, gb_flags, in ext4_ext_insert_extent()
2139 depth = ext_depth(inode); in ext4_ext_insert_extent()
2145 err = ext4_ext_get_access(handle, inode, path + depth); in ext4_ext_insert_extent()
2151 ext_debug(inode, "first extent in the leaf: %u:%llu:[%d]%d\n", in ext4_ext_insert_extent()
2161 ext_debug(inode, "insert %u:%llu:[%d]%d before: " in ext4_ext_insert_extent()
2172 ext_debug(inode, "insert %u:%llu:[%d]%d after: " in ext4_ext_insert_extent()
2182 ext_debug(inode, "insert %u:%llu:[%d]%d: " in ext4_ext_insert_extent()
2203 ext4_ext_try_to_merge(handle, inode, path, nearex); in ext4_ext_insert_extent()
2206 err = ext4_ext_correct_indexes(handle, inode, path); in ext4_ext_insert_extent()
2210 err = ext4_ext_dirty(handle, inode, path + path->p_depth); in ext4_ext_insert_extent()
2221 static int ext4_fill_es_cache_info(struct inode *inode, in ext4_fill_es_cache_info() argument
2227 unsigned char blksize_bits = inode->i_sb->s_blocksize_bits; in ext4_fill_es_cache_info()
2234 if (!ext4_es_lookup_extent(inode, block, &next, &es, NULL)) in ext4_fill_es_cache_info()
2280 static ext4_lblk_t ext4_ext_find_hole(struct inode *inode, in ext4_ext_find_hole() argument
2284 int depth = ext_depth(inode); in ext4_ext_find_hole()
2313 static int ext4_ext_rm_idx(handle_t *handle, struct inode *inode, in ext4_ext_rm_idx() argument
2323 EXT4_ERROR_INODE(inode, "path[%d].p_hdr->eh_entries == 0", k); in ext4_ext_rm_idx()
2326 err = ext4_ext_get_access(handle, inode, path + k); in ext4_ext_rm_idx()
2337 err = ext4_ext_dirty(handle, inode, path + k); in ext4_ext_rm_idx()
2340 ext_debug(inode, "index is empty, remove it, free block %llu\n", leaf); in ext4_ext_rm_idx()
2341 trace_ext4_ext_rm_idx(inode, leaf); in ext4_ext_rm_idx()
2343 ext4_free_blocks(handle, inode, NULL, leaf, 1, in ext4_ext_rm_idx()
2349 err = ext4_ext_get_access(handle, inode, path + k); in ext4_ext_rm_idx()
2353 err = ext4_ext_dirty(handle, inode, path + k); in ext4_ext_rm_idx()
2379 int ext4_ext_calc_credits_for_single_extent(struct inode *inode, int nrblocks, in ext4_ext_calc_credits_for_single_extent() argument
2383 int depth = ext_depth(inode); in ext4_ext_calc_credits_for_single_extent()
2399 ret = 2 + EXT4_META_TRANS_BLOCKS(inode->i_sb); in ext4_ext_calc_credits_for_single_extent()
2404 return ext4_chunk_trans_blocks(inode, nrblocks); in ext4_ext_calc_credits_for_single_extent()
2416 int ext4_ext_index_trans_blocks(struct inode *inode, int extents) in ext4_ext_index_trans_blocks() argument
2421 if (ext4_has_inline_data(inode)) in ext4_ext_index_trans_blocks()
2432 DIV_ROUND_UP(extents, ext4_ext_space_block(inode, 0)); in ext4_ext_index_trans_blocks()
2437 static inline int get_default_free_blocks_flags(struct inode *inode) in get_default_free_blocks_flags() argument
2439 if (S_ISDIR(inode->i_mode) || S_ISLNK(inode->i_mode) || in get_default_free_blocks_flags()
2440 ext4_test_inode_flag(inode, EXT4_INODE_EA_INODE)) in get_default_free_blocks_flags()
2442 else if (ext4_should_journal_data(inode)) in get_default_free_blocks_flags()
2462 static void ext4_rereserve_cluster(struct inode *inode, ext4_lblk_t lblk) in ext4_rereserve_cluster() argument
2464 struct ext4_sb_info *sbi = EXT4_SB(inode->i_sb); in ext4_rereserve_cluster()
2465 struct ext4_inode_info *ei = EXT4_I(inode); in ext4_rereserve_cluster()
2467 dquot_reclaim_block(inode, EXT4_C2B(sbi, 1)); in ext4_rereserve_cluster()
2475 ext4_remove_pending(inode, lblk); in ext4_rereserve_cluster()
2478 static int ext4_remove_blocks(handle_t *handle, struct inode *inode, in ext4_remove_blocks() argument
2483 struct ext4_sb_info *sbi = EXT4_SB(inode->i_sb); in ext4_remove_blocks()
2506 if (ext_depth(inode) > sbi->s_depth_max) in ext4_remove_blocks()
2507 sbi->s_depth_max = ext_depth(inode); in ext4_remove_blocks()
2511 trace_ext4_remove_blocks(inode, ex, from, to, partial); in ext4_remove_blocks()
2522 flags = get_default_free_blocks_flags(inode); in ext4_remove_blocks()
2523 if (ext4_is_pending(inode, partial->lblk)) in ext4_remove_blocks()
2525 ext4_free_blocks(handle, inode, NULL, in ext4_remove_blocks()
2529 ext4_rereserve_cluster(inode, partial->lblk); in ext4_remove_blocks()
2543 flags = get_default_free_blocks_flags(inode); in ext4_remove_blocks()
2549 if (ext4_is_pending(inode, to)) in ext4_remove_blocks()
2551 ext4_free_blocks(handle, inode, NULL, in ext4_remove_blocks()
2555 ext4_rereserve_cluster(inode, to); in ext4_remove_blocks()
2557 flags = get_default_free_blocks_flags(inode); in ext4_remove_blocks()
2569 ext4_free_blocks(handle, inode, NULL, pblk, num, flags); in ext4_remove_blocks()
2614 ext4_ext_rm_leaf(handle_t *handle, struct inode *inode, in ext4_ext_rm_leaf() argument
2619 struct ext4_sb_info *sbi = EXT4_SB(inode->i_sb); in ext4_ext_rm_leaf()
2621 int depth = ext_depth(inode), credits, revoke_credits; in ext4_ext_rm_leaf()
2632 ext_debug(inode, "truncate since %u in leaf to %u\n", start, end); in ext4_ext_rm_leaf()
2637 EXT4_ERROR_INODE(inode, "path[%d].p_hdr == NULL", depth); in ext4_ext_rm_leaf()
2648 trace_ext4_ext_rm_leaf(inode, start, ex, partial); in ext4_ext_rm_leaf()
2658 ext_debug(inode, "remove ext %u:[%d]%d\n", ex_ee_block, in ext4_ext_rm_leaf()
2665 ext_debug(inode, " border %u:%u\n", a, b); in ext4_ext_rm_leaf()
2686 EXT4_ERROR_INODE(inode, in ext4_ext_rm_leaf()
2706 credits = 7 + 2*(ex_ee_len/EXT4_BLOCKS_PER_GROUP(inode->i_sb)); in ext4_ext_rm_leaf()
2709 credits += (ext_depth(inode)) + 1; in ext4_ext_rm_leaf()
2711 credits += EXT4_MAXQUOTAS_TRANS_BLOCKS(inode->i_sb); in ext4_ext_rm_leaf()
2718 ext4_free_metadata_revoke_credits(inode->i_sb, in ext4_ext_rm_leaf()
2719 ext_depth(inode)) + in ext4_ext_rm_leaf()
2720 ext4_free_data_revoke_credits(inode, b - a + 1); in ext4_ext_rm_leaf()
2722 err = ext4_datasem_ensure_credits(handle, inode, credits, in ext4_ext_rm_leaf()
2730 err = ext4_ext_get_access(handle, inode, path + depth); in ext4_ext_rm_leaf()
2734 err = ext4_remove_blocks(handle, inode, ex, partial, a, b); in ext4_ext_rm_leaf()
2770 err = ext4_ext_dirty(handle, inode, path + depth); in ext4_ext_rm_leaf()
2774 ext_debug(inode, "new extent: %u:%u:%llu\n", ex_ee_block, num, in ext4_ext_rm_leaf()
2782 err = ext4_ext_correct_indexes(handle, inode, path); in ext4_ext_rm_leaf()
2794 int flags = get_default_free_blocks_flags(inode); in ext4_ext_rm_leaf()
2796 if (ext4_is_pending(inode, partial->lblk)) in ext4_ext_rm_leaf()
2798 ext4_free_blocks(handle, inode, NULL, in ext4_ext_rm_leaf()
2802 ext4_rereserve_cluster(inode, partial->lblk); in ext4_ext_rm_leaf()
2810 err = ext4_ext_rm_idx(handle, inode, path, depth); in ext4_ext_rm_leaf()
2837 int ext4_ext_remove_space(struct inode *inode, ext4_lblk_t start, in ext4_ext_remove_space() argument
2840 struct ext4_sb_info *sbi = EXT4_SB(inode->i_sb); in ext4_ext_remove_space()
2841 int depth = ext_depth(inode); in ext4_ext_remove_space()
2852 ext_debug(inode, "truncate since %u to %u\n", start, end); in ext4_ext_remove_space()
2855 handle = ext4_journal_start_with_revoke(inode, EXT4_HT_TRUNCATE, in ext4_ext_remove_space()
2857 ext4_free_metadata_revoke_credits(inode->i_sb, depth)); in ext4_ext_remove_space()
2862 trace_ext4_ext_remove_space(inode, start, end, depth); in ext4_ext_remove_space()
2877 path = ext4_find_extent(inode, end, NULL, flags); in ext4_ext_remove_space()
2882 depth = ext_depth(inode); in ext4_ext_remove_space()
2887 EXT4_ERROR_INODE(inode, in ext4_ext_remove_space()
2923 path = ext4_force_split_extent_at(handle, inode, path, in ext4_ext_remove_space()
2942 err = ext4_ext_search_right(inode, path, &lblk, &pblk, in ext4_ext_remove_space()
2956 depth = ext_depth(inode); in ext4_ext_remove_space()
2966 path[0].p_hdr = ext_inode_hdr(inode); in ext4_ext_remove_space()
2969 if (ext4_ext_check(inode, path[0].p_hdr, depth, 0)) { in ext4_ext_remove_space()
2979 err = ext4_ext_rm_leaf(handle, inode, path, in ext4_ext_remove_space()
2989 ext_debug(inode, "initialize header\n"); in ext4_ext_remove_space()
2997 ext_debug(inode, "init index ptr: hdr 0x%p, num %d\n", in ext4_ext_remove_space()
3005 ext_debug(inode, "level %d - index, first 0x%p, cur 0x%p\n", in ext4_ext_remove_space()
3011 ext_debug(inode, "move to level %d (block %llu)\n", in ext4_ext_remove_space()
3014 bh = read_extent_tree_block(inode, path[i].p_idx, in ext4_ext_remove_space()
3040 err = ext4_ext_rm_idx(handle, inode, path, i); in ext4_ext_remove_space()
3045 ext_debug(inode, "return to level %d\n", i); in ext4_ext_remove_space()
3049 trace_ext4_ext_remove_space_done(inode, start, end, depth, &partial, in ext4_ext_remove_space()
3057 int flags = get_default_free_blocks_flags(inode); in ext4_ext_remove_space()
3059 if (ext4_is_pending(inode, partial.lblk)) in ext4_ext_remove_space()
3061 ext4_free_blocks(handle, inode, NULL, in ext4_ext_remove_space()
3065 ext4_rereserve_cluster(inode, partial.lblk); in ext4_ext_remove_space()
3075 err = ext4_ext_get_access(handle, inode, path); in ext4_ext_remove_space()
3077 ext_inode_hdr(inode)->eh_depth = 0; in ext4_ext_remove_space()
3078 ext_inode_hdr(inode)->eh_max = in ext4_ext_remove_space()
3079 cpu_to_le16(ext4_ext_space_root(inode, 0)); in ext4_ext_remove_space()
3080 err = ext4_ext_dirty(handle, inode, path); in ext4_ext_remove_space()
3144 static void ext4_zeroout_es(struct inode *inode, struct ext4_extent *ex) in ext4_zeroout_es() argument
3157 ext4_es_insert_extent(inode, ee_block, ee_len, ee_pblock, in ext4_zeroout_es()
3162 int ext4_ext_zeroout(struct inode *inode, struct ext4_extent *ex) in ext4_ext_zeroout() argument
3167 KUNIT_STATIC_STUB_REDIRECT(ext4_ext_zeroout, inode, ex); in ext4_ext_zeroout()
3171 return ext4_issue_zeroout(inode, le32_to_cpu(ex->ee_block), ee_pblock, in ext4_ext_zeroout()
3192 struct inode *inode, in ext4_split_extent_at() argument
3207 ext_debug(inode, "logical block %llu\n", (unsigned long long)split); in ext4_split_extent_at()
3209 ext4_ext_show_leaf(inode, path); in ext4_split_extent_at()
3211 depth = ext_depth(inode); in ext4_split_extent_at()
3226 err = ext4_ext_get_access(handle, inode, path + depth); in ext4_split_extent_at()
3240 err = ext4_ext_dirty(handle, inode, path + depth); in ext4_split_extent_at()
3251 path = ext4_ext_insert_extent(handle, inode, path, &newex, flags); in ext4_split_extent_at()
3269 path = ext4_find_extent(inode, ee_block, NULL, flags | EXT4_EX_NOFAIL); in ext4_split_extent_at()
3271 EXT4_ERROR_INODE(inode, "Failed split extent on %u, err %ld", in ext4_split_extent_at()
3276 depth = ext_depth(inode); in ext4_split_extent_at()
3279 EXT4_ERROR_INODE(inode, in ext4_split_extent_at()
3286 err = ext4_ext_get_access(handle, inode, path + depth); in ext4_split_extent_at()
3292 err = ext4_ext_dirty(handle, inode, path + path->p_depth); in ext4_split_extent_at()
3301 ext4_es_remove_extent(inode, ee_block, ee_len); in ext4_split_extent_at()
3302 ext4_ext_show_leaf(inode, path); in ext4_split_extent_at()
3306 static int ext4_split_extent_zeroout(handle_t *handle, struct inode *inode, in ext4_split_extent_zeroout() argument
3317 depth = ext_depth(inode); in ext4_split_extent_zeroout()
3342 err = ext4_issue_zeroout(inode, lblk, pblk, len); in ext4_split_extent_zeroout()
3353 err = ext4_issue_zeroout(inode, lblk, pblk, len); in ext4_split_extent_zeroout()
3372 err = ext4_issue_zeroout(inode, lblk, pblk, len); in ext4_split_extent_zeroout()
3385 err = ext4_ext_get_access(handle, inode, path + depth); in ext4_split_extent_zeroout()
3391 err = ext4_ext_dirty(handle, inode, path + depth); in ext4_split_extent_zeroout()
3410 struct inode *inode, in ext4_split_extent() argument
3422 depth = ext_depth(inode); in ext4_split_extent()
3436 path = ext4_split_extent_at(handle, inode, path, in ext4_split_extent()
3445 path = ext4_find_extent(inode, map->m_lblk, path, flags); in ext4_split_extent()
3449 depth = ext_depth(inode); in ext4_split_extent()
3452 EXT4_ERROR_INODE(inode, "unexpected hole at %lu", in ext4_split_extent()
3465 path = ext4_split_extent_at(handle, inode, path, map->m_lblk, in ext4_split_extent()
3490 EXT4_SB(inode->i_sb)->s_extent_max_zeroout_kb >> in ext4_split_extent()
3491 (inode->i_sb->s_blocksize_bits - 10); in ext4_split_extent()
3497 path = ext4_find_extent(inode, map->m_lblk, NULL, flags); in ext4_split_extent()
3501 depth = ext_depth(inode); in ext4_split_extent()
3512 if (ext4_split_extent_zeroout(handle, inode, path, map, flags)) in ext4_split_extent()
3526 ext4_ext_show_leaf(inode, path); in ext4_split_extent()
3557 ext4_ext_convert_to_initialized(handle_t *handle, struct inode *inode, in ext4_ext_convert_to_initialized() argument
3571 ext_debug(inode, "logical block %llu, max_blocks %u\n", in ext4_ext_convert_to_initialized()
3574 sbi = EXT4_SB(inode->i_sb); in ext4_ext_convert_to_initialized()
3575 eof_block = (EXT4_I(inode)->i_disksize + inode->i_sb->s_blocksize - 1) in ext4_ext_convert_to_initialized()
3576 >> inode->i_sb->s_blocksize_bits; in ext4_ext_convert_to_initialized()
3580 depth = ext_depth(inode); in ext4_ext_convert_to_initialized()
3588 trace_ext4_ext_convert_to_initialized_enter(inode, map, ex); in ext4_ext_convert_to_initialized()
3637 err = ext4_ext_get_access(handle, inode, path + depth); in ext4_ext_convert_to_initialized()
3641 trace_ext4_ext_convert_to_initialized_fastpath(inode, in ext4_ext_convert_to_initialized()
3683 err = ext4_ext_get_access(handle, inode, path + depth); in ext4_ext_convert_to_initialized()
3687 trace_ext4_ext_convert_to_initialized_fastpath(inode, in ext4_ext_convert_to_initialized()
3705 err = ext4_ext_dirty(handle, inode, path + depth); in ext4_ext_convert_to_initialized()
3722 (inode->i_sb->s_blocksize_bits - 10); in ext4_ext_convert_to_initialized()
3749 err = ext4_ext_zeroout(inode, &zero_ex1); in ext4_ext_convert_to_initialized()
3763 err = ext4_ext_zeroout(inode, &zero_ex2); in ext4_ext_convert_to_initialized()
3775 path = ext4_split_convert_extents(handle, inode, &split_map, path, in ext4_ext_convert_to_initialized()
3781 ext4_zeroout_es(inode, &zero_ex1); in ext4_ext_convert_to_initialized()
3782 ext4_zeroout_es(inode, &zero_ex2); in ext4_ext_convert_to_initialized()
3817 struct inode *inode, in ext4_split_convert_extents() argument
3829 ext_debug(inode, "logical block %llu, max_blocks %u\n", in ext4_split_convert_extents()
3832 eof_block = (EXT4_I(inode)->i_disksize + inode->i_sb->s_blocksize - 1) in ext4_split_convert_extents()
3833 >> inode->i_sb->s_blocksize_bits; in ext4_split_convert_extents()
3836 depth = ext_depth(inode); in ext4_split_convert_extents()
3855 path = ext4_split_extent(handle, inode, path, map, split_flag, in ext4_split_convert_extents()
3862 path = ext4_find_extent(inode, map->m_lblk, path, flags); in ext4_split_convert_extents()
3866 depth = ext_depth(inode); in ext4_split_convert_extents()
3873 err = ext4_ext_get_access(handle, inode, path + depth); in ext4_split_convert_extents()
3887 ext4_ext_try_to_merge(handle, inode, path, ex); in ext4_split_convert_extents()
3889 err = ext4_ext_dirty(handle, inode, path + depth); in ext4_split_convert_extents()
3896 ext4_es_insert_extent(inode, le32_to_cpu(ex->ee_block), in ext4_split_convert_extents()
3914 ext4_convert_unwritten_extents_endio(handle_t *handle, struct inode *inode, in ext4_convert_unwritten_extents_endio() argument
3923 depth = ext_depth(inode); in ext4_convert_unwritten_extents_endio()
3928 ext_debug(inode, "logical block %llu, max_blocks %u\n", in ext4_convert_unwritten_extents_endio()
3931 return ext4_split_convert_extents(handle, inode, map, path, flags, in ext4_convert_unwritten_extents_endio()
3936 convert_initialized_extent(handle_t *handle, struct inode *inode, in convert_initialized_extent() argument
3954 depth = ext_depth(inode); in convert_initialized_extent()
3959 ext_debug(inode, "logical block %llu, max_blocks %u\n", in convert_initialized_extent()
3962 path = ext4_split_convert_extents(handle, inode, map, path, flags, in convert_initialized_extent()
3967 ext4_ext_show_leaf(inode, path); in convert_initialized_extent()
3969 ext4_update_inode_fsync_trans(handle, inode, 1); in convert_initialized_extent()
3974 path = ext4_find_extent(inode, map->m_lblk, path, flags); in convert_initialized_extent()
3978 depth = ext_depth(inode); in convert_initialized_extent()
3992 ext4_ext_handle_unwritten_extents(handle_t *handle, struct inode *inode, in ext4_ext_handle_unwritten_extents() argument
3999 ext_debug(inode, "logical block %llu, max_blocks %u, flags 0x%x, allocated %u\n", in ext4_ext_handle_unwritten_extents()
4002 ext4_ext_show_leaf(inode, path); in ext4_ext_handle_unwritten_extents()
4010 trace_ext4_ext_handle_unwritten_extents(inode, map, flags, in ext4_ext_handle_unwritten_extents()
4015 path = ext4_convert_unwritten_extents_endio(handle, inode, in ext4_ext_handle_unwritten_extents()
4019 ext4_update_inode_fsync_trans(handle, inode, 1); in ext4_ext_handle_unwritten_extents()
4050 path = ext4_ext_convert_to_initialized(handle, inode, map, path, in ext4_ext_handle_unwritten_extents()
4054 ext4_update_inode_fsync_trans(handle, inode, 1); in ext4_ext_handle_unwritten_extents()
4060 EXT4_ERROR_INODE(inode, "unexpected allocated == 0, m_len = %u", in ext4_ext_handle_unwritten_extents()
4074 ext4_ext_show_leaf(inode, path); in ext4_ext_handle_unwritten_extents()
4191 static ext4_lblk_t ext4_ext_determine_insert_hole(struct inode *inode, in ext4_ext_determine_insert_hole() argument
4199 len = ext4_ext_find_hole(inode, path, &hole_start); in ext4_ext_determine_insert_hole()
4201 ext4_es_find_extent_range(inode, &ext4_es_is_delayed, hole_start, in ext4_ext_determine_insert_hole()
4241 ext_debug(inode, " -> %u:%u\n", hole_start, len); in ext4_ext_determine_insert_hole()
4242 ext4_es_cache_extent(inode, hole_start, len, ~0, EXTENT_STATUS_HOLE); in ext4_ext_determine_insert_hole()
4269 int ext4_ext_map_blocks(handle_t *handle, struct inode *inode, in ext4_ext_map_blocks() argument
4274 struct ext4_sb_info *sbi = EXT4_SB(inode->i_sb); in ext4_ext_map_blocks()
4282 ext_debug(inode, "blocks %u/%u requested\n", map->m_lblk, map->m_len); in ext4_ext_map_blocks()
4283 trace_ext4_ext_map_blocks_enter(inode, map->m_lblk, map->m_len, flags); in ext4_ext_map_blocks()
4286 path = ext4_find_extent(inode, map->m_lblk, NULL, flags); in ext4_ext_map_blocks()
4292 depth = ext_depth(inode); in ext4_ext_map_blocks()
4300 EXT4_ERROR_INODE(inode, "bad extent address " in ext4_ext_map_blocks()
4321 trace_ext4_ext_show_extent(inode, ee_block, ee_start, ee_len); in ext4_ext_map_blocks()
4328 ext_debug(inode, "%u fit into %u:%d -> %llu\n", in ext4_ext_map_blocks()
4338 inode, map, path, flags, &allocated); in ext4_ext_map_blocks()
4348 ext4_ext_show_leaf(inode, path); in ext4_ext_map_blocks()
4353 handle, inode, map, path, flags, in ext4_ext_map_blocks()
4368 len = ext4_ext_determine_insert_hole(inode, path, map->m_lblk); in ext4_ext_map_blocks()
4386 get_implied_cluster_alloc(inode->i_sb, map, ex, path)) { in ext4_ext_map_blocks()
4394 err = ext4_ext_search_left(inode, path, &ar.lleft, &ar.pleft); in ext4_ext_map_blocks()
4398 err = ext4_ext_search_right(inode, path, &ar.lright, &ar.pright, in ext4_ext_map_blocks()
4406 get_implied_cluster_alloc(inode->i_sb, map, &ex2, path)) { in ext4_ext_map_blocks()
4428 err = ext4_ext_check_overlap(sbi, inode, &newex, path); in ext4_ext_map_blocks()
4435 ar.inode = inode; in ext4_ext_map_blocks()
4436 ar.goal = ext4_ext_find_goal(inode, path, map->m_lblk); in ext4_ext_map_blocks()
4450 if (S_ISREG(inode->i_mode)) in ext4_ext_map_blocks()
4466 ext_debug(inode, "allocate new block: goal %llu, found %llu/%u, requested %u\n", in ext4_ext_map_blocks()
4482 path = ext4_ext_insert_extent(handle, inode, path, &newex, flags); in ext4_ext_map_blocks()
4497 ext4_discard_preallocations(inode); in ext4_ext_map_blocks()
4500 ext4_free_blocks(handle, inode, NULL, newblock, in ext4_ext_map_blocks()
4512 ext4_update_inode_fsync_trans(handle, inode, 1); in ext4_ext_map_blocks()
4514 ext4_update_inode_fsync_trans(handle, inode, 0); in ext4_ext_map_blocks()
4520 ext4_ext_show_leaf(inode, path); in ext4_ext_map_blocks()
4538 trace_ext4_ext_map_blocks_exit(inode, flags, map, in ext4_ext_map_blocks()
4543 int ext4_ext_truncate(handle_t *handle, struct inode *inode) in ext4_ext_truncate() argument
4545 struct super_block *sb = inode->i_sb; in ext4_ext_truncate()
4556 EXT4_I(inode)->i_disksize = inode->i_size; in ext4_ext_truncate()
4557 err = ext4_mark_inode_dirty(handle, inode); in ext4_ext_truncate()
4561 last_block = (inode->i_size + sb->s_blocksize - 1) in ext4_ext_truncate()
4563 ext4_es_remove_extent(inode, last_block, EXT_MAX_BLOCKS - last_block); in ext4_ext_truncate()
4566 err = ext4_ext_remove_space(inode, last_block, EXT_MAX_BLOCKS - 1); in ext4_ext_truncate()
4577 struct inode *inode = file_inode(file); in ext4_alloc_file_blocks() local
4585 loff_t epos = 0, old_size = i_size_read(inode); in ext4_alloc_file_blocks()
4586 unsigned int blkbits = inode->i_blkbits; in ext4_alloc_file_blocks()
4589 BUG_ON(!ext4_test_inode_flag(inode, EXT4_INODE_EXTENTS)); in ext4_alloc_file_blocks()
4614 credits = ext4_chunk_trans_blocks(inode, len_lblk); in ext4_alloc_file_blocks()
4615 depth = ext_depth(inode); in ext4_alloc_file_blocks()
4619 ret = ext4_block_zero_eof(inode, old_size, LLONG_MAX); in ext4_alloc_file_blocks()
4629 if (depth != ext_depth(inode)) { in ext4_alloc_file_blocks()
4630 credits = ext4_chunk_trans_blocks(inode, len_lblk); in ext4_alloc_file_blocks()
4631 depth = ext_depth(inode); in ext4_alloc_file_blocks()
4634 handle = ext4_journal_start(inode, EXT4_HT_MAP_BLOCKS, in ext4_alloc_file_blocks()
4640 ret = ext4_map_blocks(handle, inode, &map, flags); in ext4_alloc_file_blocks()
4644 inode->i_ino, map.m_lblk, in ext4_alloc_file_blocks()
4646 ext4_mark_inode_dirty(handle, inode); in ext4_alloc_file_blocks()
4650 ext4_update_inode_fsync_trans(handle, inode, 1); in ext4_alloc_file_blocks()
4662 ret = ext4_issue_zeroout(inode, map.m_lblk, map.m_pblk, in ext4_alloc_file_blocks()
4666 inode, (loff_t)map.m_lblk << blkbits, in ext4_alloc_file_blocks()
4674 epos = EXT4_LBLK_TO_B(inode, map.m_lblk); in ext4_alloc_file_blocks()
4677 if (ret == -ENOSPC && ext4_should_retry_alloc(inode->i_sb, &retries)) in ext4_alloc_file_blocks()
4690 handle = ext4_journal_start(inode, EXT4_HT_MISC, 1); in ext4_alloc_file_blocks()
4694 ext4_update_inode_size(inode, epos); in ext4_alloc_file_blocks()
4695 ret2 = ext4_mark_inode_dirty(handle, inode); in ext4_alloc_file_blocks()
4696 ext4_update_inode_fsync_trans(handle, inode, 1); in ext4_alloc_file_blocks()
4701 pagecache_isize_extended(inode, old_size, epos); in ext4_alloc_file_blocks()
4713 struct inode *inode = file_inode(file); in ext4_zero_range() local
4717 unsigned int blocksize = i_blocksize(inode); in ext4_zero_range()
4721 trace_ext4_zero_range(inode, offset, len, mode); in ext4_zero_range()
4722 WARN_ON_ONCE(!inode_is_locked(inode)); in ext4_zero_range()
4725 if (!(ext4_test_inode_flag(inode, EXT4_INODE_EXTENTS))) in ext4_zero_range()
4729 (end > inode->i_size || end > EXT4_I(inode)->i_disksize)) { in ext4_zero_range()
4731 ret = inode_newsize_ok(inode, new_size); in ext4_zero_range()
4745 ret = ext4_update_disksize_before_punch(inode, offset, len); in ext4_zero_range()
4750 ret = ext4_truncate_page_cache_block_range(inode, offset, end); in ext4_zero_range()
4774 ret = ext4_zero_partial_blocks(inode, offset, len, &partial_zeroed); in ext4_zero_range()
4777 if (((file->f_flags & O_SYNC) || IS_SYNC(inode)) && partial_zeroed) { in ext4_zero_range()
4778 ret = filemap_write_and_wait_range(inode->i_mapping, offset, in ext4_zero_range()
4784 handle = ext4_journal_start(inode, EXT4_HT_MISC, 1); in ext4_zero_range()
4787 ext4_std_error(inode->i_sb, ret); in ext4_zero_range()
4792 ext4_update_inode_size(inode, new_size); in ext4_zero_range()
4793 ret = ext4_mark_inode_dirty(handle, inode); in ext4_zero_range()
4797 ext4_update_inode_fsync_trans(handle, inode, 1); in ext4_zero_range()
4798 if ((file->f_flags & O_SYNC) || IS_SYNC(inode)) in ext4_zero_range()
4809 struct inode *inode = file_inode(file); in ext4_do_fallocate() local
4814 trace_ext4_fallocate_enter(inode, offset, len, mode); in ext4_do_fallocate()
4815 WARN_ON_ONCE(!inode_is_locked(inode)); in ext4_do_fallocate()
4818 if (!(ext4_test_inode_flag(inode, EXT4_INODE_EXTENTS))) { in ext4_do_fallocate()
4824 (end > inode->i_size || end > EXT4_I(inode)->i_disksize)) { in ext4_do_fallocate()
4826 ret = inode_newsize_ok(inode, new_size); in ext4_do_fallocate()
4836 if (((file->f_flags & O_SYNC) || IS_SYNC(inode)) && in ext4_do_fallocate()
4837 EXT4_SB(inode->i_sb)->s_journal) { in ext4_do_fallocate()
4838 ret = ext4_fc_commit(EXT4_SB(inode->i_sb)->s_journal, in ext4_do_fallocate()
4839 EXT4_I(inode)->i_sync_tid); in ext4_do_fallocate()
4842 trace_ext4_fallocate_exit(inode, offset, in ext4_do_fallocate()
4843 EXT4_MAX_BLOCKS(len, offset, inode->i_blkbits), ret); in ext4_do_fallocate()
4856 struct inode *inode = file_inode(file); in ext4_fallocate() local
4866 if (IS_ENCRYPTED(inode) && in ext4_fallocate()
4874 !bdev_write_zeroes_unmap_sectors(inode->i_sb->s_bdev)) in ext4_fallocate()
4883 inode_lock(inode); in ext4_fallocate()
4884 ret = ext4_convert_inline_data(inode); in ext4_fallocate()
4889 inode_dio_wait(inode); in ext4_fallocate()
4907 ret = ext4_break_layouts(inode); in ext4_fallocate()
4932 inode_unlock(inode); in ext4_fallocate()
4959 int ext4_convert_unwritten_extents_atomic(handle_t *handle, struct inode *inode, in ext4_convert_unwritten_extents_atomic() argument
4965 unsigned int blkbits = inode->i_blkbits; in ext4_convert_unwritten_extents_atomic()
4979 credits = ext4_meta_trans_blocks(inode, max_blocks, 2); in ext4_convert_unwritten_extents_atomic()
4983 handle = ext4_journal_start(inode, EXT4_HT_MAP_BLOCKS, credits); in ext4_convert_unwritten_extents_atomic()
4993 ret = ext4_map_blocks(handle, inode, &map, flags); in ext4_convert_unwritten_extents_atomic()
4995 ext4_msg(inode->i_sb, KERN_INFO, in ext4_convert_unwritten_extents_atomic()
4999 inode->i_ino, map.m_lblk, in ext4_convert_unwritten_extents_atomic()
5005 ret2 = ext4_mark_inode_dirty(handle, inode); in ext4_convert_unwritten_extents_atomic()
5014 ext4_warning(inode->i_sb, in ext4_convert_unwritten_extents_atomic()
5017 inode->i_ino, map.m_lblk, in ext4_convert_unwritten_extents_atomic()
5033 int ext4_convert_unwritten_extents(handle_t *handle, struct inode *inode, in ext4_convert_unwritten_extents() argument
5039 unsigned int blkbits = inode->i_blkbits; in ext4_convert_unwritten_extents()
5049 credits = ext4_chunk_trans_blocks(inode, max_blocks); in ext4_convert_unwritten_extents()
5055 handle = ext4_journal_start(inode, EXT4_HT_MAP_BLOCKS, in ext4_convert_unwritten_extents()
5067 ret = ext4_map_blocks(handle, inode, &map, in ext4_convert_unwritten_extents()
5071 ext4_warning(inode->i_sb, in ext4_convert_unwritten_extents()
5074 inode->i_ino, map.m_lblk, in ext4_convert_unwritten_extents()
5076 ret2 = ext4_mark_inode_dirty(handle, inode); in ext4_convert_unwritten_extents()
5107 ret = ext4_convert_unwritten_extents(handle, io_end->inode, in ext4_convert_unwritten_io_end_vec()
5120 static int ext4_iomap_xattr_fiemap(struct inode *inode, struct iomap *iomap) in ext4_iomap_xattr_fiemap() argument
5124 int blockbits = inode->i_sb->s_blocksize_bits; in ext4_iomap_xattr_fiemap()
5129 if (ext4_test_inode_state(inode, EXT4_STATE_XATTR)) { in ext4_iomap_xattr_fiemap()
5133 error = ext4_get_inode_loc(inode, &iloc); in ext4_iomap_xattr_fiemap()
5138 EXT4_I(inode)->i_extra_isize; in ext4_iomap_xattr_fiemap()
5140 length = EXT4_SB(inode->i_sb)->s_inode_size - offset; in ext4_iomap_xattr_fiemap()
5143 } else if (EXT4_I(inode)->i_file_acl) { /* external block */ in ext4_iomap_xattr_fiemap()
5144 physical = (__u64)EXT4_I(inode)->i_file_acl << blockbits; in ext4_iomap_xattr_fiemap()
5145 length = inode->i_sb->s_blocksize; in ext4_iomap_xattr_fiemap()
5162 static int ext4_iomap_xattr_begin(struct inode *inode, loff_t offset, in ext4_iomap_xattr_begin() argument
5168 error = ext4_iomap_xattr_fiemap(inode, iomap); in ext4_iomap_xattr_begin()
5178 static int ext4_fiemap_check_ranges(struct inode *inode, u64 start, u64 *len) in ext4_fiemap_check_ranges() argument
5180 u64 maxbytes = ext4_get_maxbytes(inode); in ext4_fiemap_check_ranges()
5195 int ext4_fiemap(struct inode *inode, struct fiemap_extent_info *fieinfo, in ext4_fiemap() argument
5200 inode_lock_shared(inode); in ext4_fiemap()
5202 error = ext4_ext_precache(inode); in ext4_fiemap()
5213 error = ext4_fiemap_check_ranges(inode, start, &len); in ext4_fiemap()
5219 error = iomap_fiemap(inode, fieinfo, start, len, in ext4_fiemap()
5222 error = iomap_fiemap(inode, fieinfo, start, len, in ext4_fiemap()
5226 inode_unlock_shared(inode); in ext4_fiemap()
5230 int ext4_get_es_cache(struct inode *inode, struct fiemap_extent_info *fieinfo, in ext4_get_es_cache() argument
5237 if (ext4_has_inline_data(inode)) { in ext4_get_es_cache()
5240 down_read(&EXT4_I(inode)->xattr_sem); in ext4_get_es_cache()
5241 has_inline = ext4_has_inline_data(inode); in ext4_get_es_cache()
5242 up_read(&EXT4_I(inode)->xattr_sem); in ext4_get_es_cache()
5248 inode_lock_shared(inode); in ext4_get_es_cache()
5249 error = ext4_ext_precache(inode); in ext4_get_es_cache()
5250 inode_unlock_shared(inode); in ext4_get_es_cache()
5256 error = fiemap_prep(inode, fieinfo, start, &len, 0); in ext4_get_es_cache()
5260 error = ext4_fiemap_check_ranges(inode, start, &len); in ext4_get_es_cache()
5264 start_blk = start >> inode->i_sb->s_blocksize_bits; in ext4_get_es_cache()
5265 last_blk = (start + len - 1) >> inode->i_sb->s_blocksize_bits; in ext4_get_es_cache()
5274 return ext4_fill_es_cache_info(inode, start_blk, len_blks, fieinfo); in ext4_get_es_cache()
5285 struct inode *inode, handle_t *handle, in ext4_ext_shift_path_extents() argument
5309 restart_credits = ext4_chunk_trans_extent(inode, 0); in ext4_ext_shift_path_extents()
5310 err = ext4_datasem_ensure_credits(handle, inode, credits, in ext4_ext_shift_path_extents()
5318 err = ext4_ext_get_access(handle, inode, path + depth); in ext4_ext_shift_path_extents()
5330 ext4_ext_try_to_merge_right(inode, in ext4_ext_shift_path_extents()
5337 ext4_ext_try_to_merge_right(inode, path, in ext4_ext_shift_path_extents()
5342 err = ext4_ext_dirty(handle, inode, path + depth); in ext4_ext_shift_path_extents()
5351 err = ext4_ext_get_access(handle, inode, path + depth); in ext4_ext_shift_path_extents()
5359 err = ext4_ext_dirty(handle, inode, path + depth); in ext4_ext_shift_path_extents()
5382 ext4_ext_shift_extents(struct inode *inode, handle_t *handle, in ext4_ext_shift_extents() argument
5393 path = ext4_find_extent(inode, EXT_MAX_BLOCKS - 1, NULL, in ext4_ext_shift_extents()
5411 path = ext4_find_extent(inode, start - 1, path, in ext4_ext_shift_extents()
5460 path = ext4_find_extent(inode, *iterator, path, in ext4_ext_shift_extents()
5467 EXT4_ERROR_INODE(inode, "unexpected hole at %lu", in ext4_ext_shift_extents()
5507 ret = ext4_ext_shift_path_extents(path, shift, inode, in ext4_ext_shift_extents()
5527 struct inode *inode = file_inode(file); in ext4_collapse_range() local
5528 struct super_block *sb = inode->i_sb; in ext4_collapse_range()
5529 struct address_space *mapping = inode->i_mapping; in ext4_collapse_range()
5537 trace_ext4_collapse_range(inode, offset, len); in ext4_collapse_range()
5538 WARN_ON_ONCE(!inode_is_locked(inode)); in ext4_collapse_range()
5541 if (!ext4_test_inode_flag(inode, EXT4_INODE_EXTENTS)) in ext4_collapse_range()
5550 if (end >= inode->i_size) in ext4_collapse_range()
5568 truncate_pagecache(inode, start); in ext4_collapse_range()
5570 credits = ext4_chunk_trans_extent(inode, 0); in ext4_collapse_range()
5571 handle = ext4_journal_start(inode, EXT4_HT_TRUNCATE, credits); in ext4_collapse_range()
5577 start_lblk = offset >> inode->i_blkbits; in ext4_collapse_range()
5578 end_lblk = (offset + len) >> inode->i_blkbits; in ext4_collapse_range()
5580 ext4_check_map_extents_env(inode); in ext4_collapse_range()
5582 down_write(&EXT4_I(inode)->i_data_sem); in ext4_collapse_range()
5583 ext4_discard_preallocations(inode); in ext4_collapse_range()
5584 ext4_es_remove_extent(inode, start_lblk, EXT_MAX_BLOCKS - start_lblk); in ext4_collapse_range()
5586 ret = ext4_ext_remove_space(inode, start_lblk, end_lblk - 1); in ext4_collapse_range()
5588 up_write(&EXT4_I(inode)->i_data_sem); in ext4_collapse_range()
5591 ext4_discard_preallocations(inode); in ext4_collapse_range()
5593 ret = ext4_ext_shift_extents(inode, handle, end_lblk, in ext4_collapse_range()
5596 up_write(&EXT4_I(inode)->i_data_sem); in ext4_collapse_range()
5600 new_size = inode->i_size - len; in ext4_collapse_range()
5601 i_size_write(inode, new_size); in ext4_collapse_range()
5602 EXT4_I(inode)->i_disksize = new_size; in ext4_collapse_range()
5604 up_write(&EXT4_I(inode)->i_data_sem); in ext4_collapse_range()
5605 ret = ext4_mark_inode_dirty(handle, inode); in ext4_collapse_range()
5609 ext4_update_inode_fsync_trans(handle, inode, 1); in ext4_collapse_range()
5610 if ((file->f_flags & O_SYNC) || IS_SYNC(inode)) in ext4_collapse_range()
5628 struct inode *inode = file_inode(file); in ext4_insert_range() local
5629 struct super_block *sb = inode->i_sb; in ext4_insert_range()
5630 struct address_space *mapping = inode->i_mapping; in ext4_insert_range()
5639 trace_ext4_insert_range(inode, offset, len); in ext4_insert_range()
5640 WARN_ON_ONCE(!inode_is_locked(inode)); in ext4_insert_range()
5643 if (!ext4_test_inode_flag(inode, EXT4_INODE_EXTENTS)) in ext4_insert_range()
5649 if (offset >= inode->i_size) in ext4_insert_range()
5652 if (len > inode->i_sb->s_maxbytes - inode->i_size) in ext4_insert_range()
5664 truncate_pagecache(inode, start); in ext4_insert_range()
5666 credits = ext4_chunk_trans_extent(inode, 0); in ext4_insert_range()
5667 handle = ext4_journal_start(inode, EXT4_HT_TRUNCATE, credits); in ext4_insert_range()
5674 inode->i_size += len; in ext4_insert_range()
5675 EXT4_I(inode)->i_disksize += len; in ext4_insert_range()
5676 ret = ext4_mark_inode_dirty(handle, inode); in ext4_insert_range()
5680 start_lblk = offset >> inode->i_blkbits; in ext4_insert_range()
5681 len_lblk = len >> inode->i_blkbits; in ext4_insert_range()
5683 ext4_check_map_extents_env(inode); in ext4_insert_range()
5685 down_write(&EXT4_I(inode)->i_data_sem); in ext4_insert_range()
5686 ext4_discard_preallocations(inode); in ext4_insert_range()
5688 path = ext4_find_extent(inode, start_lblk, NULL, 0); in ext4_insert_range()
5690 up_write(&EXT4_I(inode)->i_data_sem); in ext4_insert_range()
5695 depth = ext_depth(inode); in ext4_insert_range()
5707 path = ext4_split_extent_at(handle, inode, path, in ext4_insert_range()
5714 up_write(&EXT4_I(inode)->i_data_sem); in ext4_insert_range()
5721 ext4_es_remove_extent(inode, start_lblk, EXT_MAX_BLOCKS - start_lblk); in ext4_insert_range()
5727 ret = ext4_ext_shift_extents(inode, handle, in ext4_insert_range()
5729 up_write(&EXT4_I(inode)->i_data_sem); in ext4_insert_range()
5733 ext4_update_inode_fsync_trans(handle, inode, 1); in ext4_insert_range()
5734 if ((file->f_flags & O_SYNC) || IS_SYNC(inode)) in ext4_insert_range()
5763 ext4_swap_extents(handle_t *handle, struct inode *inode1, in ext4_swap_extents()
5764 struct inode *inode2, ext4_lblk_t lblk1, ext4_lblk_t lblk2, in ext4_swap_extents()
5948 int ext4_clu_mapped(struct inode *inode, ext4_lblk_t lclu) in ext4_clu_mapped() argument
5950 struct ext4_sb_info *sbi = EXT4_SB(inode->i_sb); in ext4_clu_mapped()
5961 if (ext4_test_inode_state(inode, EXT4_STATE_MAY_INLINE_DATA) || in ext4_clu_mapped()
5962 ext4_has_inline_data(inode)) in ext4_clu_mapped()
5966 path = ext4_find_extent(inode, EXT4_C2B(sbi, lclu), NULL, 0); in ext4_clu_mapped()
5970 depth = ext_depth(inode); in ext4_clu_mapped()
5978 EXT4_ERROR_INODE(inode, in ext4_clu_mapped()
6027 int ext4_ext_replay_update_ex(struct inode *inode, ext4_lblk_t start, in ext4_ext_replay_update_ex() argument
6034 path = ext4_find_extent(inode, start, NULL, 0); in ext4_ext_replay_update_ex()
6046 down_write(&EXT4_I(inode)->i_data_sem); in ext4_ext_replay_update_ex()
6047 path = ext4_force_split_extent_at(NULL, inode, path, start, 1); in ext4_ext_replay_update_ex()
6048 up_write(&EXT4_I(inode)->i_data_sem); in ext4_ext_replay_update_ex()
6054 path = ext4_find_extent(inode, start, path, 0); in ext4_ext_replay_update_ex()
6062 down_write(&EXT4_I(inode)->i_data_sem); in ext4_ext_replay_update_ex()
6063 path = ext4_force_split_extent_at(NULL, inode, path, in ext4_ext_replay_update_ex()
6065 up_write(&EXT4_I(inode)->i_data_sem); in ext4_ext_replay_update_ex()
6071 path = ext4_find_extent(inode, start, path, 0); in ext4_ext_replay_update_ex()
6082 down_write(&EXT4_I(inode)->i_data_sem); in ext4_ext_replay_update_ex()
6083 ret = ext4_ext_dirty(NULL, inode, &path[path->p_depth]); in ext4_ext_replay_update_ex()
6084 up_write(&EXT4_I(inode)->i_data_sem); in ext4_ext_replay_update_ex()
6087 ext4_mark_inode_dirty(NULL, inode); in ext4_ext_replay_update_ex()
6092 void ext4_ext_replay_shrink_inode(struct inode *inode, ext4_lblk_t end) in ext4_ext_replay_shrink_inode() argument
6099 path = ext4_find_extent(inode, cur, NULL, 0); in ext4_ext_replay_shrink_inode()
6105 ext4_mark_inode_dirty(NULL, inode); in ext4_ext_replay_shrink_inode()
6112 ext4_ext_try_to_merge(NULL, inode, path, ex); in ext4_ext_replay_shrink_inode()
6113 down_write(&EXT4_I(inode)->i_data_sem); in ext4_ext_replay_shrink_inode()
6114 ext4_ext_dirty(NULL, inode, &path[path->p_depth]); in ext4_ext_replay_shrink_inode()
6115 up_write(&EXT4_I(inode)->i_data_sem); in ext4_ext_replay_shrink_inode()
6116 ext4_mark_inode_dirty(NULL, inode); in ext4_ext_replay_shrink_inode()
6122 static int skip_hole(struct inode *inode, ext4_lblk_t *cur) in skip_hole() argument
6128 map.m_len = ((inode->i_size) >> inode->i_sb->s_blocksize_bits) - *cur; in skip_hole()
6130 ret = ext4_map_blocks(NULL, inode, &map, 0); in skip_hole()
6140 int ext4_ext_replay_set_iblocks(struct inode *inode) in ext4_ext_replay_set_iblocks() argument
6150 path = ext4_find_extent(inode, EXT_MAX_BLOCKS - 1, NULL, in ext4_ext_replay_set_iblocks()
6164 ret = ext4_map_blocks(NULL, inode, &map, 0); in ext4_ext_replay_set_iblocks()
6180 ret = skip_hole(inode, &cur); in ext4_ext_replay_set_iblocks()
6183 path = ext4_find_extent(inode, cur, path, 0); in ext4_ext_replay_set_iblocks()
6188 path = ext4_find_extent(inode, cur, path, 0); in ext4_ext_replay_set_iblocks()
6197 ret = skip_hole(inode, &cur); in ext4_ext_replay_set_iblocks()
6201 path2 = ext4_find_extent(inode, cur, path2, 0); in ext4_ext_replay_set_iblocks()
6219 inode->i_blocks = numblks << (inode->i_sb->s_blocksize_bits - 9); in ext4_ext_replay_set_iblocks()
6220 ext4_mark_inode_dirty(NULL, inode); in ext4_ext_replay_set_iblocks()
6227 int ext4_ext_clear_bb(struct inode *inode) in ext4_ext_clear_bb() argument
6235 if (ext4_test_inode_flag(inode, EXT4_INODE_INLINE_DATA)) in ext4_ext_clear_bb()
6239 path = ext4_find_extent(inode, EXT_MAX_BLOCKS - 1, NULL, in ext4_ext_clear_bb()
6252 ret = ext4_map_blocks(NULL, inode, &map, 0); in ext4_ext_clear_bb()
6256 path = ext4_find_extent(inode, map.m_lblk, path, 0); in ext4_ext_clear_bb()
6259 ext4_mb_mark_bb(inode->i_sb, in ext4_ext_clear_bb()
6261 ext4_fc_record_regions(inode->i_sb, inode->i_ino, in ext4_ext_clear_bb()
6267 ext4_mb_mark_bb(inode->i_sb, map.m_pblk, map.m_len, false); in ext4_ext_clear_bb()
6268 ext4_fc_record_regions(inode->i_sb, inode->i_ino, in ext4_ext_clear_bb()
6280 int ext4_ext_space_root_idx_test(struct inode *inode, int check) in ext4_ext_space_root_idx_test() argument
6282 return ext4_ext_space_root_idx(inode, check); in ext4_ext_space_root_idx_test()
6287 struct inode *inode, struct ext4_map_blocks *map, in ext4_split_convert_extents_test() argument
6291 return ext4_split_convert_extents(handle, inode, map, path, in ext4_split_convert_extents_test()