Lines Matching refs:inode
72 static int ext4_block_to_path(struct inode *inode, in ext4_block_to_path() argument
76 int ptrs = EXT4_ADDR_PER_BLOCK(inode->i_sb); in ext4_block_to_path()
77 int ptrs_bits = EXT4_ADDR_PER_BLOCK_BITS(inode->i_sb); in ext4_block_to_path()
103 ext4_warning(inode->i_sb, "block %lu > max in inode %lu", in ext4_block_to_path()
105 indirect_blocks + double_blocks, inode->i_ino); in ext4_block_to_path()
142 static Indirect *ext4_get_branch(struct inode *inode, int depth, in ext4_get_branch() argument
146 struct super_block *sb = inode->i_sb; in ext4_get_branch()
153 add_chain(chain, NULL, EXT4_I(inode)->i_data + *offsets); in ext4_get_branch()
169 if (ext4_check_indirect_blockref(inode, bh)) { in ext4_get_branch()
208 static ext4_fsblk_t ext4_find_near(struct inode *inode, Indirect *ind) in ext4_find_near() argument
210 struct ext4_inode_info *ei = EXT4_I(inode); in ext4_find_near()
228 return ext4_inode_to_goal_block(inode); in ext4_find_near()
242 static ext4_fsblk_t ext4_find_goal(struct inode *inode, ext4_lblk_t block, in ext4_find_goal() argument
251 goal = ext4_find_near(inode, partial); in ext4_find_goal()
336 ar->inode, ar->goal, in ext4_alloc_branch()
347 bh = branch[i].bh = sb_getblk(ar->inode->i_sb, new_blocks[i-1]); in ext4_alloc_branch()
374 err = ext4_handle_dirty_metadata(handle, ar->inode, bh); in ext4_alloc_branch()
388 ext4_forget(handle, 1, ar->inode, branch[i].bh, in ext4_alloc_branch()
390 ext4_free_blocks(handle, ar->inode, NULL, new_blocks[i], in ext4_alloc_branch()
457 err = ext4_handle_dirty_metadata(handle, ar->inode, where->bh); in ext4_splice_branch()
464 ext4_mark_inode_dirty(handle, ar->inode); in ext4_splice_branch()
476 ext4_free_blocks(handle, ar->inode, where[i].bh, 0, 1, in ext4_splice_branch()
479 ext4_free_blocks(handle, ar->inode, NULL, le32_to_cpu(where[num].key), in ext4_splice_branch()
513 int ext4_ind_map_blocks(handle_t *handle, struct inode *inode, in ext4_ind_map_blocks() argument
528 trace_ext4_ind_map_blocks_enter(inode, map->m_lblk, map->m_len, flags); in ext4_ind_map_blocks()
529 J_ASSERT(!(ext4_test_inode_flag(inode, EXT4_INODE_EXTENTS))); in ext4_ind_map_blocks()
531 depth = ext4_block_to_path(inode, map->m_lblk, offsets, in ext4_ind_map_blocks()
537 partial = ext4_get_branch(inode, depth, offsets, chain, &err); in ext4_ind_map_blocks()
564 if (EXT4_HAS_RO_COMPAT_FEATURE(inode->i_sb, in ext4_ind_map_blocks()
566 EXT4_ERROR_INODE(inode, "Can't allocate blocks for " in ext4_ind_map_blocks()
573 ar.inode = inode; in ext4_ind_map_blocks()
575 if (S_ISREG(inode->i_mode)) in ext4_ind_map_blocks()
580 ar.goal = ext4_find_goal(inode, map->m_lblk, partial); in ext4_ind_map_blocks()
612 ext4_update_inode_fsync_trans(handle, inode, 1); in ext4_ind_map_blocks()
630 trace_ext4_ind_map_blocks_exit(inode, flags, map, err); in ext4_ind_map_blocks()
649 struct inode *inode = file->f_mapping->host; in ext4_ind_direct_IO() local
650 struct ext4_inode_info *ei = EXT4_I(inode); in ext4_ind_direct_IO()
660 if (final_size > inode->i_size) { in ext4_ind_direct_IO()
662 handle = ext4_journal_start(inode, EXT4_HT_INODE, 2); in ext4_ind_direct_IO()
667 ret = ext4_orphan_add(handle, inode); in ext4_ind_direct_IO()
673 ei->i_disksize = inode->i_size; in ext4_ind_direct_IO()
679 if (iov_iter_rw(iter) == READ && ext4_should_dioread_nolock(inode)) { in ext4_ind_direct_IO()
685 inode_dio_begin(inode); in ext4_ind_direct_IO()
687 if (unlikely(ext4_test_inode_state(inode, in ext4_ind_direct_IO()
689 inode_dio_end(inode); in ext4_ind_direct_IO()
692 if (IS_DAX(inode)) in ext4_ind_direct_IO()
693 ret = dax_do_io(iocb, inode, iter, offset, in ext4_ind_direct_IO()
696 ret = __blockdev_direct_IO(iocb, inode, in ext4_ind_direct_IO()
697 inode->i_sb->s_bdev, iter, in ext4_ind_direct_IO()
700 inode_dio_end(inode); in ext4_ind_direct_IO()
703 if (IS_DAX(inode)) in ext4_ind_direct_IO()
704 ret = dax_do_io(iocb, inode, iter, offset, in ext4_ind_direct_IO()
707 ret = blockdev_direct_IO(iocb, inode, iter, offset, in ext4_ind_direct_IO()
711 loff_t isize = i_size_read(inode); in ext4_ind_direct_IO()
715 ext4_truncate_failed_write(inode); in ext4_ind_direct_IO()
718 if (ret == -ENOSPC && ext4_should_retry_alloc(inode->i_sb, &retries)) in ext4_ind_direct_IO()
725 handle = ext4_journal_start(inode, EXT4_HT_INODE, 2); in ext4_ind_direct_IO()
731 if (inode->i_nlink) in ext4_ind_direct_IO()
732 ext4_orphan_del(NULL, inode); in ext4_ind_direct_IO()
736 if (inode->i_nlink) in ext4_ind_direct_IO()
737 ext4_orphan_del(handle, inode); in ext4_ind_direct_IO()
740 if (end > inode->i_size) { in ext4_ind_direct_IO()
742 i_size_write(inode, end); in ext4_ind_direct_IO()
750 ext4_mark_inode_dirty(handle, inode); in ext4_ind_direct_IO()
765 int ext4_ind_calc_metadata_amount(struct inode *inode, sector_t lblock) in ext4_ind_calc_metadata_amount() argument
767 struct ext4_inode_info *ei = EXT4_I(inode); in ext4_ind_calc_metadata_amount()
768 sector_t dind_mask = ~((sector_t)EXT4_ADDR_PER_BLOCK(inode->i_sb) - 1); in ext4_ind_calc_metadata_amount()
784 return (blk_bits / EXT4_ADDR_PER_BLOCK_BITS(inode->i_sb)) + 1; in ext4_ind_calc_metadata_amount()
791 int ext4_ind_trans_blocks(struct inode *inode, int nrblocks) in ext4_ind_trans_blocks() argument
798 return DIV_ROUND_UP(nrblocks, EXT4_ADDR_PER_BLOCK(inode->i_sb)) + 4; in ext4_ind_trans_blocks()
813 static int try_to_extend_transaction(handle_t *handle, struct inode *inode) in try_to_extend_transaction() argument
819 if (!ext4_journal_extend(handle, ext4_blocks_for_truncate(inode))) in try_to_extend_transaction()
872 static Indirect *ext4_find_shared(struct inode *inode, int depth, in ext4_find_shared() argument
883 partial = ext4_get_branch(inode, k, offsets, chain, &err); in ext4_find_shared()
932 static int ext4_clear_blocks(handle_t *handle, struct inode *inode, in ext4_clear_blocks() argument
942 if (S_ISDIR(inode->i_mode) || S_ISLNK(inode->i_mode)) in ext4_clear_blocks()
944 else if (ext4_should_journal_data(inode)) in ext4_clear_blocks()
947 if (!ext4_data_block_valid(EXT4_SB(inode->i_sb), block_to_free, in ext4_clear_blocks()
949 EXT4_ERROR_INODE(inode, "attempt to clear invalid " in ext4_clear_blocks()
955 if (try_to_extend_transaction(handle, inode)) { in ext4_clear_blocks()
958 err = ext4_handle_dirty_metadata(handle, inode, bh); in ext4_clear_blocks()
962 err = ext4_mark_inode_dirty(handle, inode); in ext4_clear_blocks()
965 err = ext4_truncate_restart_trans(handle, inode, in ext4_clear_blocks()
966 ext4_blocks_for_truncate(inode)); in ext4_clear_blocks()
980 ext4_free_blocks(handle, inode, NULL, block_to_free, count, flags); in ext4_clear_blocks()
983 ext4_std_error(inode->i_sb, err); in ext4_clear_blocks()
1006 static void ext4_free_data(handle_t *handle, struct inode *inode, in ext4_free_data() argument
1040 err = ext4_clear_blocks(handle, inode, this_bh, in ext4_free_data()
1053 err = ext4_clear_blocks(handle, inode, this_bh, block_to_free, in ext4_free_data()
1068 if ((EXT4_JOURNAL(inode) == NULL) || bh2jh(this_bh)) in ext4_free_data()
1069 ext4_handle_dirty_metadata(handle, inode, this_bh); in ext4_free_data()
1071 EXT4_ERROR_INODE(inode, in ext4_free_data()
1091 static void ext4_free_branches(handle_t *handle, struct inode *inode, in ext4_free_branches() argument
1103 int addr_per_block = EXT4_ADDR_PER_BLOCK(inode->i_sb); in ext4_free_branches()
1110 if (!ext4_data_block_valid(EXT4_SB(inode->i_sb), in ext4_free_branches()
1112 EXT4_ERROR_INODE(inode, in ext4_free_branches()
1120 bh = sb_bread(inode->i_sb, nr); in ext4_free_branches()
1127 EXT4_ERROR_INODE_BLOCK(inode, nr, in ext4_free_branches()
1134 ext4_free_branches(handle, inode, bh, in ext4_free_branches()
1158 if (try_to_extend_transaction(handle, inode)) { in ext4_free_branches()
1159 ext4_mark_inode_dirty(handle, inode); in ext4_free_branches()
1160 ext4_truncate_restart_trans(handle, inode, in ext4_free_branches()
1161 ext4_blocks_for_truncate(inode)); in ext4_free_branches()
1175 ext4_free_blocks(handle, inode, NULL, nr, 1, in ext4_free_branches()
1191 inode, in ext4_free_branches()
1199 ext4_free_data(handle, inode, parent_bh, first, last); in ext4_free_branches()
1203 void ext4_ind_truncate(handle_t *handle, struct inode *inode) in ext4_ind_truncate() argument
1205 struct ext4_inode_info *ei = EXT4_I(inode); in ext4_ind_truncate()
1207 int addr_per_block = EXT4_ADDR_PER_BLOCK(inode->i_sb); in ext4_ind_truncate()
1214 unsigned blocksize = inode->i_sb->s_blocksize; in ext4_ind_truncate()
1216 last_block = (inode->i_size + blocksize-1) in ext4_ind_truncate()
1217 >> EXT4_BLOCK_SIZE_BITS(inode->i_sb); in ext4_ind_truncate()
1218 max_block = (EXT4_SB(inode->i_sb)->s_bitmap_maxbytes + blocksize-1) in ext4_ind_truncate()
1219 >> EXT4_BLOCK_SIZE_BITS(inode->i_sb); in ext4_ind_truncate()
1222 n = ext4_block_to_path(inode, last_block, offsets, NULL); in ext4_ind_truncate()
1227 ext4_es_remove_extent(inode, last_block, EXT_MAX_BLOCKS - last_block); in ext4_ind_truncate()
1236 ei->i_disksize = inode->i_size; in ext4_ind_truncate()
1245 ext4_free_data(handle, inode, NULL, i_data+offsets[0], in ext4_ind_truncate()
1250 partial = ext4_find_shared(inode, n, offsets, chain, &nr); in ext4_ind_truncate()
1255 ext4_free_branches(handle, inode, NULL, in ext4_ind_truncate()
1265 ext4_free_branches(handle, inode, partial->bh, in ext4_ind_truncate()
1272 ext4_free_branches(handle, inode, partial->bh, partial->p + 1, in ext4_ind_truncate()
1285 ext4_free_branches(handle, inode, NULL, &nr, &nr+1, 1); in ext4_ind_truncate()
1291 ext4_free_branches(handle, inode, NULL, &nr, &nr+1, 2); in ext4_ind_truncate()
1297 ext4_free_branches(handle, inode, NULL, &nr, &nr+1, 3); in ext4_ind_truncate()
1315 int ext4_ind_remove_space(handle_t *handle, struct inode *inode, in ext4_ind_remove_space() argument
1318 struct ext4_inode_info *ei = EXT4_I(inode); in ext4_ind_remove_space()
1320 int addr_per_block = EXT4_ADDR_PER_BLOCK(inode->i_sb); in ext4_ind_remove_space()
1327 unsigned blocksize = inode->i_sb->s_blocksize; in ext4_ind_remove_space()
1329 max_block = (EXT4_SB(inode->i_sb)->s_bitmap_maxbytes + blocksize-1) in ext4_ind_remove_space()
1330 >> EXT4_BLOCK_SIZE_BITS(inode->i_sb); in ext4_ind_remove_space()
1336 n = ext4_block_to_path(inode, start, offsets, NULL); in ext4_ind_remove_space()
1337 n2 = ext4_block_to_path(inode, end, offsets2, NULL); in ext4_ind_remove_space()
1343 ext4_free_data(handle, inode, NULL, i_data + offsets[0], in ext4_ind_remove_space()
1359 ext4_free_data(handle, inode, NULL, i_data + offsets[0], in ext4_ind_remove_space()
1365 partial = ext4_find_shared(inode, n, offsets, chain, &nr); in ext4_ind_remove_space()
1369 ext4_free_branches(handle, inode, NULL, in ext4_ind_remove_space()
1375 ext4_free_branches(handle, inode, partial->bh, in ext4_ind_remove_space()
1386 ext4_free_branches(handle, inode, partial->bh, in ext4_ind_remove_space()
1396 partial2 = ext4_find_shared(inode, n2, offsets2, chain2, &nr2); in ext4_ind_remove_space()
1422 ext4_free_branches(handle, inode, partial2->bh, in ext4_ind_remove_space()
1434 partial = ext4_find_shared(inode, n, offsets, chain, &nr); in ext4_ind_remove_space()
1435 partial2 = ext4_find_shared(inode, n2, offsets2, chain2, &nr2); in ext4_ind_remove_space()
1453 ext4_free_branches(handle, inode, NULL, in ext4_ind_remove_space()
1460 ext4_free_branches(handle, inode, partial->bh, in ext4_ind_remove_space()
1488 ext4_free_branches(handle, inode, partial->bh, in ext4_ind_remove_space()
1507 ext4_free_branches(handle, inode, partial->bh, in ext4_ind_remove_space()
1516 ext4_free_branches(handle, inode, partial2->bh, in ext4_ind_remove_space()
1535 ext4_free_branches(handle, inode, NULL, &nr, &nr+1, 1); in ext4_ind_remove_space()
1543 ext4_free_branches(handle, inode, NULL, &nr, &nr+1, 2); in ext4_ind_remove_space()
1551 ext4_free_branches(handle, inode, NULL, &nr, &nr+1, 3); in ext4_ind_remove_space()