Lines Matching refs:inode
49 static __u32 ext4_inode_csum(struct inode *inode, struct ext4_inode *raw, in ext4_inode_csum() argument
52 struct ext4_sb_info *sbi = EXT4_SB(inode->i_sb); in ext4_inode_csum()
59 if (EXT4_INODE_SIZE(inode->i_sb) > EXT4_GOOD_OLD_INODE_SIZE && in ext4_inode_csum()
66 EXT4_INODE_SIZE(inode->i_sb)); in ext4_inode_csum()
69 if (EXT4_INODE_SIZE(inode->i_sb) > EXT4_GOOD_OLD_INODE_SIZE && in ext4_inode_csum()
76 static int ext4_inode_csum_verify(struct inode *inode, struct ext4_inode *raw, in ext4_inode_csum_verify() argument
81 if (EXT4_SB(inode->i_sb)->s_es->s_creator_os != in ext4_inode_csum_verify()
83 !ext4_has_metadata_csum(inode->i_sb)) in ext4_inode_csum_verify()
87 calculated = ext4_inode_csum(inode, raw, ei); in ext4_inode_csum_verify()
88 if (EXT4_INODE_SIZE(inode->i_sb) > EXT4_GOOD_OLD_INODE_SIZE && in ext4_inode_csum_verify()
97 static void ext4_inode_csum_set(struct inode *inode, struct ext4_inode *raw, in ext4_inode_csum_set() argument
102 if (EXT4_SB(inode->i_sb)->s_es->s_creator_os != in ext4_inode_csum_set()
104 !ext4_has_metadata_csum(inode->i_sb)) in ext4_inode_csum_set()
107 csum = ext4_inode_csum(inode, raw, ei); in ext4_inode_csum_set()
109 if (EXT4_INODE_SIZE(inode->i_sb) > EXT4_GOOD_OLD_INODE_SIZE && in ext4_inode_csum_set()
114 static inline int ext4_begin_ordered_truncate(struct inode *inode, in ext4_begin_ordered_truncate() argument
117 trace_ext4_begin_ordered_truncate(inode, new_size); in ext4_begin_ordered_truncate()
124 if (!EXT4_I(inode)->jinode) in ext4_begin_ordered_truncate()
126 return jbd2_journal_begin_ordered_truncate(EXT4_JOURNAL(inode), in ext4_begin_ordered_truncate()
127 EXT4_I(inode)->jinode, in ext4_begin_ordered_truncate()
135 static int ext4_meta_trans_blocks(struct inode *inode, int lblocks,
141 int ext4_inode_is_fast_symlink(struct inode *inode) in ext4_inode_is_fast_symlink() argument
143 int ea_blocks = EXT4_I(inode)->i_file_acl ? in ext4_inode_is_fast_symlink()
144 EXT4_CLUSTER_SIZE(inode->i_sb) >> 9 : 0; in ext4_inode_is_fast_symlink()
146 if (ext4_has_inline_data(inode)) in ext4_inode_is_fast_symlink()
149 return (S_ISLNK(inode->i_mode) && inode->i_blocks - ea_blocks == 0); in ext4_inode_is_fast_symlink()
157 int ext4_truncate_restart_trans(handle_t *handle, struct inode *inode, in ext4_truncate_restart_trans() argument
168 BUG_ON(EXT4_JOURNAL(inode) == NULL); in ext4_truncate_restart_trans()
170 up_write(&EXT4_I(inode)->i_data_sem); in ext4_truncate_restart_trans()
172 down_write(&EXT4_I(inode)->i_data_sem); in ext4_truncate_restart_trans()
173 ext4_discard_preallocations(inode); in ext4_truncate_restart_trans()
181 void ext4_evict_inode(struct inode *inode) in ext4_evict_inode() argument
186 trace_ext4_evict_inode(inode); in ext4_evict_inode()
188 if (inode->i_nlink) { in ext4_evict_inode()
207 if (ext4_should_journal_data(inode) && in ext4_evict_inode()
208 (S_ISLNK(inode->i_mode) || S_ISREG(inode->i_mode)) && in ext4_evict_inode()
209 inode->i_ino != EXT4_JOURNAL_INO) { in ext4_evict_inode()
210 journal_t *journal = EXT4_SB(inode->i_sb)->s_journal; in ext4_evict_inode()
211 tid_t commit_tid = EXT4_I(inode)->i_datasync_tid; in ext4_evict_inode()
214 filemap_write_and_wait(&inode->i_data); in ext4_evict_inode()
216 truncate_inode_pages_final(&inode->i_data); in ext4_evict_inode()
218 WARN_ON(atomic_read(&EXT4_I(inode)->i_ioend_count)); in ext4_evict_inode()
222 if (is_bad_inode(inode)) in ext4_evict_inode()
224 dquot_initialize(inode); in ext4_evict_inode()
226 if (ext4_should_order_data(inode)) in ext4_evict_inode()
227 ext4_begin_ordered_truncate(inode, 0); in ext4_evict_inode()
228 truncate_inode_pages_final(&inode->i_data); in ext4_evict_inode()
230 WARN_ON(atomic_read(&EXT4_I(inode)->i_ioend_count)); in ext4_evict_inode()
236 sb_start_intwrite(inode->i_sb); in ext4_evict_inode()
237 handle = ext4_journal_start(inode, EXT4_HT_TRUNCATE, in ext4_evict_inode()
238 ext4_blocks_for_truncate(inode)+3); in ext4_evict_inode()
240 ext4_std_error(inode->i_sb, PTR_ERR(handle)); in ext4_evict_inode()
246 ext4_orphan_del(NULL, inode); in ext4_evict_inode()
247 sb_end_intwrite(inode->i_sb); in ext4_evict_inode()
251 if (IS_SYNC(inode)) in ext4_evict_inode()
253 inode->i_size = 0; in ext4_evict_inode()
254 err = ext4_mark_inode_dirty(handle, inode); in ext4_evict_inode()
256 ext4_warning(inode->i_sb, in ext4_evict_inode()
260 if (inode->i_blocks) in ext4_evict_inode()
261 ext4_truncate(inode); in ext4_evict_inode()
274 ext4_warning(inode->i_sb, in ext4_evict_inode()
278 ext4_orphan_del(NULL, inode); in ext4_evict_inode()
279 sb_end_intwrite(inode->i_sb); in ext4_evict_inode()
292 ext4_orphan_del(handle, inode); in ext4_evict_inode()
293 EXT4_I(inode)->i_dtime = get_seconds(); in ext4_evict_inode()
302 if (ext4_mark_inode_dirty(handle, inode)) in ext4_evict_inode()
304 ext4_clear_inode(inode); in ext4_evict_inode()
306 ext4_free_inode(handle, inode); in ext4_evict_inode()
308 sb_end_intwrite(inode->i_sb); in ext4_evict_inode()
311 ext4_clear_inode(inode); /* We must guarantee clearing of inode... */ in ext4_evict_inode()
315 qsize_t *ext4_get_reserved_space(struct inode *inode) in ext4_get_reserved_space() argument
317 return &EXT4_I(inode)->i_reserved_quota; in ext4_get_reserved_space()
325 void ext4_da_update_reserve_space(struct inode *inode, in ext4_da_update_reserve_space() argument
328 struct ext4_sb_info *sbi = EXT4_SB(inode->i_sb); in ext4_da_update_reserve_space()
329 struct ext4_inode_info *ei = EXT4_I(inode); in ext4_da_update_reserve_space()
332 trace_ext4_da_update_reserve_space(inode, used, quota_claim); in ext4_da_update_reserve_space()
334 ext4_warning(inode->i_sb, "%s: ino %lu, used %d " in ext4_da_update_reserve_space()
336 __func__, inode->i_ino, used, in ext4_da_update_reserve_space()
346 spin_unlock(&EXT4_I(inode)->i_block_reservation_lock); in ext4_da_update_reserve_space()
350 dquot_claim_block(inode, EXT4_C2B(sbi, used)); in ext4_da_update_reserve_space()
357 dquot_release_reservation_block(inode, EXT4_C2B(sbi, used)); in ext4_da_update_reserve_space()
366 (atomic_read(&inode->i_writecount) == 0)) in ext4_da_update_reserve_space()
367 ext4_discard_preallocations(inode); in ext4_da_update_reserve_space()
370 static int __check_block_validity(struct inode *inode, const char *func, in __check_block_validity() argument
374 if (!ext4_data_block_valid(EXT4_SB(inode->i_sb), map->m_pblk, in __check_block_validity()
376 ext4_error_inode(inode, func, line, map->m_pblk, in __check_block_validity()
385 #define check_block_validity(inode, map) \ argument
386 __check_block_validity((inode), __func__, __LINE__, (map))
390 struct inode *inode, in ext4_map_blocks_es_recheck() argument
406 down_read(&EXT4_I(inode)->i_data_sem); in ext4_map_blocks_es_recheck()
407 if (ext4_test_inode_flag(inode, EXT4_INODE_EXTENTS)) { in ext4_map_blocks_es_recheck()
408 retval = ext4_ext_map_blocks(handle, inode, map, flags & in ext4_map_blocks_es_recheck()
411 retval = ext4_ind_map_blocks(handle, inode, map, flags & in ext4_map_blocks_es_recheck()
415 up_read((&EXT4_I(inode)->i_data_sem)); in ext4_map_blocks_es_recheck()
427 inode->i_ino, es_map->m_lblk, es_map->m_len, in ext4_map_blocks_es_recheck()
457 int ext4_map_blocks(handle_t *handle, struct inode *inode, in ext4_map_blocks() argument
471 "logical block %lu\n", inode->i_ino, flags, map->m_len, in ext4_map_blocks()
485 if (ext4_es_lookup_extent(inode, map->m_lblk, &es)) { in ext4_map_blocks()
501 ext4_map_blocks_es_recheck(handle, inode, map, in ext4_map_blocks()
512 down_read(&EXT4_I(inode)->i_data_sem); in ext4_map_blocks()
513 if (ext4_test_inode_flag(inode, EXT4_INODE_EXTENTS)) { in ext4_map_blocks()
514 retval = ext4_ext_map_blocks(handle, inode, map, flags & in ext4_map_blocks()
517 retval = ext4_ind_map_blocks(handle, inode, map, flags & in ext4_map_blocks()
524 ext4_warning(inode->i_sb, in ext4_map_blocks()
527 inode->i_ino, retval, map->m_len); in ext4_map_blocks()
535 ext4_find_delalloc_range(inode, map->m_lblk, in ext4_map_blocks()
538 ret = ext4_es_insert_extent(inode, map->m_lblk, in ext4_map_blocks()
544 up_read((&EXT4_I(inode)->i_data_sem)); in ext4_map_blocks()
548 ret = check_block_validity(inode, map); in ext4_map_blocks()
585 down_write(&EXT4_I(inode)->i_data_sem); in ext4_map_blocks()
591 if (ext4_test_inode_flag(inode, EXT4_INODE_EXTENTS)) { in ext4_map_blocks()
592 retval = ext4_ext_map_blocks(handle, inode, map, flags); in ext4_map_blocks()
594 retval = ext4_ind_map_blocks(handle, inode, map, flags); in ext4_map_blocks()
602 ext4_clear_inode_state(inode, EXT4_STATE_EXT_MIGRATE); in ext4_map_blocks()
613 ext4_da_update_reserve_space(inode, retval, 1); in ext4_map_blocks()
620 ext4_warning(inode->i_sb, in ext4_map_blocks()
623 inode->i_ino, retval, map->m_len); in ext4_map_blocks()
632 ext4_es_lookup_extent(inode, map->m_lblk, &es)) { in ext4_map_blocks()
640 ext4_find_delalloc_range(inode, map->m_lblk, in ext4_map_blocks()
643 ret = ext4_es_insert_extent(inode, map->m_lblk, map->m_len, in ext4_map_blocks()
650 up_write((&EXT4_I(inode)->i_data_sem)); in ext4_map_blocks()
652 ret = check_block_validity(inode, map); in ext4_map_blocks()
690 static int _ext4_get_block(struct inode *inode, sector_t iblock, in _ext4_get_block() argument
698 if (ext4_has_inline_data(inode)) in _ext4_get_block()
702 map.m_len = bh->b_size >> inode->i_blkbits; in _ext4_get_block()
708 dio_credits = ext4_chunk_trans_blocks(inode, map.m_len); in _ext4_get_block()
709 handle = ext4_journal_start(inode, EXT4_HT_MAP_BLOCKS, in _ext4_get_block()
718 ret = ext4_map_blocks(handle, inode, &map, flags); in _ext4_get_block()
720 ext4_io_end_t *io_end = ext4_inode_aio(inode); in _ext4_get_block()
722 map_bh(bh, inode->i_sb, map.m_pblk); in _ext4_get_block()
724 if (IS_DAX(inode) && buffer_unwritten(bh)) { in _ext4_get_block()
731 bh->b_assoc_map = inode->i_mapping; in _ext4_get_block()
736 bh->b_size = inode->i_sb->s_blocksize * map.m_len; in _ext4_get_block()
744 int ext4_get_block(struct inode *inode, sector_t iblock, in ext4_get_block() argument
747 return _ext4_get_block(inode, iblock, bh, in ext4_get_block()
754 struct buffer_head *ext4_getblk(handle_t *handle, struct inode *inode, in ext4_getblk() argument
765 err = ext4_map_blocks(handle, inode, &map, in ext4_getblk()
773 bh = sb_getblk(inode->i_sb, map.m_pblk); in ext4_getblk()
795 memset(bh->b_data, 0, inode->i_sb->s_blocksize); in ext4_getblk()
800 err = ext4_handle_dirty_metadata(handle, inode, bh); in ext4_getblk()
811 struct buffer_head *ext4_bread(handle_t *handle, struct inode *inode, in ext4_bread() argument
816 bh = ext4_getblk(handle, inode, block, create); in ext4_bread()
909 static int ext4_get_block_write_nolock(struct inode *inode, sector_t iblock,
918 struct inode *inode = page->mapping->host; in ext4_block_write_begin() local
922 unsigned blocksize = inode->i_sb->s_blocksize; in ext4_block_write_begin()
952 err = get_block(inode, block, bh, 1); in ext4_block_write_begin()
980 decrypt = ext4_encrypted_inode(inode) && in ext4_block_write_begin()
981 S_ISREG(inode->i_mode); in ext4_block_write_begin()
995 err = ext4_decrypt_one(inode, page); in ext4_block_write_begin()
1004 struct inode *inode = mapping->host; in ext4_write_begin() local
1012 trace_ext4_write_begin(inode, pos, len, flags); in ext4_write_begin()
1017 needed_blocks = ext4_writepage_trans_blocks(inode) + 1; in ext4_write_begin()
1022 if (ext4_test_inode_state(inode, EXT4_STATE_MAY_INLINE_DATA)) { in ext4_write_begin()
1023 ret = ext4_try_to_write_inline_data(mapping, inode, pos, len, in ext4_write_begin()
1045 handle = ext4_journal_start(inode, EXT4_HT_WRITE_PAGE, needed_blocks); in ext4_write_begin()
1063 if (ext4_should_dioread_nolock(inode)) in ext4_write_begin()
1070 if (ext4_should_dioread_nolock(inode)) in ext4_write_begin()
1075 if (!ret && ext4_should_journal_data(inode)) { in ext4_write_begin()
1091 if (pos + len > inode->i_size && ext4_can_truncate(inode)) in ext4_write_begin()
1092 ext4_orphan_add(handle, inode); in ext4_write_begin()
1095 if (pos + len > inode->i_size) { in ext4_write_begin()
1096 ext4_truncate_failed_write(inode); in ext4_write_begin()
1103 if (inode->i_nlink) in ext4_write_begin()
1104 ext4_orphan_del(NULL, inode); in ext4_write_begin()
1108 ext4_should_retry_alloc(inode->i_sb, &retries)) in ext4_write_begin()
1143 struct inode *inode = mapping->host; in ext4_write_end() local
1144 loff_t old_size = inode->i_size; in ext4_write_end()
1148 trace_ext4_write_end(inode, pos, len, copied); in ext4_write_end()
1149 if (ext4_test_inode_state(inode, EXT4_STATE_ORDERED_MODE)) { in ext4_write_end()
1150 ret = ext4_jbd2_file_inode(handle, inode); in ext4_write_end()
1158 if (ext4_has_inline_data(inode)) { in ext4_write_end()
1159 ret = ext4_write_inline_data_end(inode, pos, len, in ext4_write_end()
1171 i_size_changed = ext4_update_inode_size(inode, pos + copied); in ext4_write_end()
1176 pagecache_isize_extended(inode, old_size, pos); in ext4_write_end()
1184 ext4_mark_inode_dirty(handle, inode); in ext4_write_end()
1186 if (pos + len > inode->i_size && ext4_can_truncate(inode)) in ext4_write_end()
1191 ext4_orphan_add(handle, inode); in ext4_write_end()
1197 if (pos + len > inode->i_size) { in ext4_write_end()
1198 ext4_truncate_failed_write(inode); in ext4_write_end()
1204 if (inode->i_nlink) in ext4_write_end()
1205 ext4_orphan_del(NULL, inode); in ext4_write_end()
1217 struct inode *inode = mapping->host; in ext4_journalled_write_end() local
1218 loff_t old_size = inode->i_size; in ext4_journalled_write_end()
1224 trace_ext4_journalled_write_end(inode, pos, len, copied); in ext4_journalled_write_end()
1230 if (ext4_has_inline_data(inode)) in ext4_journalled_write_end()
1231 copied = ext4_write_inline_data_end(inode, pos, len, in ext4_journalled_write_end()
1245 size_changed = ext4_update_inode_size(inode, pos + copied); in ext4_journalled_write_end()
1246 ext4_set_inode_state(inode, EXT4_STATE_JDATA); in ext4_journalled_write_end()
1247 EXT4_I(inode)->i_datasync_tid = handle->h_transaction->t_tid; in ext4_journalled_write_end()
1252 pagecache_isize_extended(inode, old_size, pos); in ext4_journalled_write_end()
1255 ret2 = ext4_mark_inode_dirty(handle, inode); in ext4_journalled_write_end()
1260 if (pos + len > inode->i_size && ext4_can_truncate(inode)) in ext4_journalled_write_end()
1265 ext4_orphan_add(handle, inode); in ext4_journalled_write_end()
1270 if (pos + len > inode->i_size) { in ext4_journalled_write_end()
1271 ext4_truncate_failed_write(inode); in ext4_journalled_write_end()
1277 if (inode->i_nlink) in ext4_journalled_write_end()
1278 ext4_orphan_del(NULL, inode); in ext4_journalled_write_end()
1287 static int ext4_da_reserve_space(struct inode *inode, ext4_lblk_t lblock) in ext4_da_reserve_space() argument
1289 struct ext4_sb_info *sbi = EXT4_SB(inode->i_sb); in ext4_da_reserve_space()
1290 struct ext4_inode_info *ei = EXT4_I(inode); in ext4_da_reserve_space()
1299 ret = dquot_reserve_block(inode, EXT4_C2B(sbi, 1)); in ext4_da_reserve_space()
1314 trace_ext4_da_reserve_space(inode, 0); in ext4_da_reserve_space()
1318 dquot_release_reservation_block(inode, EXT4_C2B(sbi, 1)); in ext4_da_reserve_space()
1327 static void ext4_da_release_space(struct inode *inode, int to_free) in ext4_da_release_space() argument
1329 struct ext4_sb_info *sbi = EXT4_SB(inode->i_sb); in ext4_da_release_space()
1330 struct ext4_inode_info *ei = EXT4_I(inode); in ext4_da_release_space()
1335 spin_lock(&EXT4_I(inode)->i_block_reservation_lock); in ext4_da_release_space()
1337 trace_ext4_da_release_space(inode, to_free); in ext4_da_release_space()
1345 ext4_warning(inode->i_sb, "ext4_da_release_space: " in ext4_da_release_space()
1347 "data blocks", inode->i_ino, to_free, in ext4_da_release_space()
1357 spin_unlock(&EXT4_I(inode)->i_block_reservation_lock); in ext4_da_release_space()
1359 dquot_release_reservation_block(inode, EXT4_C2B(sbi, to_free)); in ext4_da_release_space()
1369 struct inode *inode = page->mapping->host; in ext4_da_page_release_reservation() local
1370 struct ext4_sb_info *sbi = EXT4_SB(inode->i_sb); in ext4_da_page_release_reservation()
1391 (PAGE_CACHE_SHIFT - inode->i_blkbits); in ext4_da_page_release_reservation()
1392 lblk += (curr_off >> inode->i_blkbits) - in ext4_da_page_release_reservation()
1394 ext4_es_remove_extent(inode, lblk, contiguous_blks); in ext4_da_page_release_reservation()
1401 lblk = page->index << (PAGE_CACHE_SHIFT - inode->i_blkbits); in ext4_da_page_release_reservation()
1402 lblk += (curr_off >> inode->i_blkbits) - contiguous_blks; in ext4_da_page_release_reservation()
1403 ext4_es_remove_extent(inode, lblk, contiguous_blks); in ext4_da_page_release_reservation()
1410 lblk = (page->index << (PAGE_CACHE_SHIFT - inode->i_blkbits)) + in ext4_da_page_release_reservation()
1413 !ext4_find_delalloc_cluster(inode, lblk)) in ext4_da_page_release_reservation()
1414 ext4_da_release_space(inode, 1); in ext4_da_page_release_reservation()
1425 struct inode *inode; member
1446 struct inode *inode = mpd->inode; in mpage_release_unused_pages() local
1447 struct address_space *mapping = inode->i_mapping; in mpage_release_unused_pages()
1457 start = index << (PAGE_CACHE_SHIFT - inode->i_blkbits); in mpage_release_unused_pages()
1458 last = end << (PAGE_CACHE_SHIFT - inode->i_blkbits); in mpage_release_unused_pages()
1459 ext4_es_remove_extent(inode, start, last - start + 1); in mpage_release_unused_pages()
1484 static void ext4_print_free_blocks(struct inode *inode) in ext4_print_free_blocks() argument
1486 struct ext4_sb_info *sbi = EXT4_SB(inode->i_sb); in ext4_print_free_blocks()
1487 struct super_block *sb = inode->i_sb; in ext4_print_free_blocks()
1488 struct ext4_inode_info *ei = EXT4_I(inode); in ext4_print_free_blocks()
1491 EXT4_C2B(EXT4_SB(inode->i_sb), in ext4_print_free_blocks()
1517 static int ext4_da_map_blocks(struct inode *inode, sector_t iblock, in ext4_da_map_blocks() argument
1530 if (invalid_block < ext4_blocks_count(EXT4_SB(inode->i_sb)->s_es)) in ext4_da_map_blocks()
1535 "logical block %lu\n", inode->i_ino, map->m_len, in ext4_da_map_blocks()
1539 if (ext4_es_lookup_extent(inode, iblock, &es)) { in ext4_da_map_blocks()
1542 down_read(&EXT4_I(inode)->i_data_sem); in ext4_da_map_blocks()
1551 map_bh(bh, inode->i_sb, invalid_block); in ext4_da_map_blocks()
1570 ext4_map_blocks_es_recheck(NULL, inode, map, &orig_map, 0); in ext4_da_map_blocks()
1579 down_read(&EXT4_I(inode)->i_data_sem); in ext4_da_map_blocks()
1580 if (ext4_has_inline_data(inode)) in ext4_da_map_blocks()
1582 else if (ext4_test_inode_flag(inode, EXT4_INODE_EXTENTS)) in ext4_da_map_blocks()
1583 retval = ext4_ext_map_blocks(NULL, inode, map, 0); in ext4_da_map_blocks()
1585 retval = ext4_ind_map_blocks(NULL, inode, map, 0); in ext4_da_map_blocks()
1599 if (EXT4_SB(inode->i_sb)->s_cluster_ratio <= 1 || in ext4_da_map_blocks()
1600 !ext4_find_delalloc_cluster(inode, map->m_lblk)) { in ext4_da_map_blocks()
1601 ret = ext4_da_reserve_space(inode, iblock); in ext4_da_map_blocks()
1609 ret = ext4_es_insert_extent(inode, map->m_lblk, map->m_len, in ext4_da_map_blocks()
1616 map_bh(bh, inode->i_sb, invalid_block); in ext4_da_map_blocks()
1624 ext4_warning(inode->i_sb, in ext4_da_map_blocks()
1627 inode->i_ino, retval, map->m_len); in ext4_da_map_blocks()
1633 ret = ext4_es_insert_extent(inode, map->m_lblk, map->m_len, in ext4_da_map_blocks()
1640 up_read((&EXT4_I(inode)->i_data_sem)); in ext4_da_map_blocks()
1657 int ext4_da_get_block_prep(struct inode *inode, sector_t iblock, in ext4_da_get_block_prep() argument
1664 BUG_ON(bh->b_size != inode->i_sb->s_blocksize); in ext4_da_get_block_prep()
1674 ret = ext4_da_map_blocks(inode, iblock, &map, bh); in ext4_da_get_block_prep()
1678 map_bh(bh, inode->i_sb, map.m_pblk); in ext4_da_get_block_prep()
1710 struct inode *inode = mapping->host; in __ext4_journalled_writepage() local
1714 int inline_data = ext4_has_inline_data(inode); in __ext4_journalled_writepage()
1721 BUG_ON(len > ext4_get_max_inline_size(inode)); in __ext4_journalled_writepage()
1722 inode_bh = ext4_journalled_write_inline_data(inode, len, page); in __ext4_journalled_writepage()
1742 handle = ext4_journal_start(inode, EXT4_HT_WRITE_PAGE, in __ext4_journalled_writepage()
1743 ext4_writepage_trans_blocks(inode)); in __ext4_journalled_writepage()
1764 err = ext4_handle_dirty_metadata(handle, inode, inode_bh); in __ext4_journalled_writepage()
1775 EXT4_I(inode)->i_datasync_tid = handle->h_transaction->t_tid; in __ext4_journalled_writepage()
1780 if (!ext4_has_inline_data(inode)) in __ext4_journalled_writepage()
1783 ext4_set_inode_state(inode, EXT4_STATE_JDATA); in __ext4_journalled_writepage()
1839 struct inode *inode = page->mapping->host; in ext4_writepage() local
1844 size = i_size_read(inode); in ext4_writepage()
1875 if (PageChecked(page) && ext4_should_journal_data(inode)) in ext4_writepage()
1883 io_submit.io_end = ext4_init_io_end(inode, GFP_NOFS); in ext4_writepage()
1899 loff_t size = i_size_read(mpd->inode); in mpage_submit_page()
1995 struct inode *inode = mpd->inode; in mpage_process_page_bufs() local
1997 ext4_lblk_t blocks = (i_size_read(inode) + (1 << inode->i_blkbits) - 1) in mpage_process_page_bufs()
1998 >> inode->i_blkbits; in mpage_process_page_bufs()
2038 struct inode *inode = mpd->inode; in mpage_map_and_submit_buffers() local
2040 int bpp_bits = PAGE_CACHE_SHIFT - inode->i_blkbits; in mpage_map_and_submit_buffers()
2053 nr_pages = pagevec_lookup(&pvec, inode->i_mapping, start, in mpage_map_and_submit_buffers()
2120 struct inode *inode = mpd->inode; in mpage_map_one_extent() local
2125 trace_ext4_da_write_pages_extent(inode, map); in mpage_map_one_extent()
2143 dioread_nolock = ext4_should_dioread_nolock(inode); in mpage_map_one_extent()
2149 err = ext4_map_blocks(handle, inode, map, get_blocks_flags); in mpage_map_one_extent()
2158 ext4_set_io_unwritten_flag(inode, mpd->io_submit.io_end); in mpage_map_one_extent()
2163 struct block_device *bdev = inode->i_sb->s_bdev; in mpage_map_one_extent()
2196 struct inode *inode = mpd->inode; in mpage_map_and_submit_extent() local
2203 ((loff_t)map->m_lblk) << inode->i_blkbits; in mpage_map_and_submit_extent()
2207 struct super_block *sb = inode->i_sb; in mpage_map_and_submit_extent()
2226 inode->i_ino, in mpage_map_and_submit_extent()
2233 ext4_print_free_blocks(inode); in mpage_map_and_submit_extent()
2254 if (disksize > EXT4_I(inode)->i_disksize) { in mpage_map_and_submit_extent()
2258 down_write(&EXT4_I(inode)->i_data_sem); in mpage_map_and_submit_extent()
2259 i_size = i_size_read(inode); in mpage_map_and_submit_extent()
2262 if (disksize > EXT4_I(inode)->i_disksize) in mpage_map_and_submit_extent()
2263 EXT4_I(inode)->i_disksize = disksize; in mpage_map_and_submit_extent()
2264 err2 = ext4_mark_inode_dirty(handle, inode); in mpage_map_and_submit_extent()
2265 up_write(&EXT4_I(inode)->i_data_sem); in mpage_map_and_submit_extent()
2267 ext4_error(inode->i_sb, in mpage_map_and_submit_extent()
2269 inode->i_ino); in mpage_map_and_submit_extent()
2283 static int ext4_da_writepages_trans_blocks(struct inode *inode) in ext4_da_writepages_trans_blocks() argument
2285 int bpp = ext4_journal_blocks_per_page(inode); in ext4_da_writepages_trans_blocks()
2287 return ext4_meta_trans_blocks(inode, in ext4_da_writepages_trans_blocks()
2311 struct address_space *mapping = mpd->inode->i_mapping; in mpage_prepare_extent_to_map()
2319 int blkbits = mpd->inode->i_blkbits; in mpage_prepare_extent_to_map()
2424 struct inode *inode = mapping->host; in ext4_writepages() local
2431 trace_ext4_writepages(inode, wbc); in ext4_writepages()
2441 if (ext4_should_journal_data(inode)) { in ext4_writepages()
2465 if (ext4_should_dioread_nolock(inode)) { in ext4_writepages()
2470 rsv_blocks = 1 + (PAGE_CACHE_SIZE >> inode->i_blkbits); in ext4_writepages()
2478 if (ext4_has_inline_data(inode)) { in ext4_writepages()
2480 handle = ext4_journal_start(inode, EXT4_HT_INODE, 1); in ext4_writepages()
2485 BUG_ON(ext4_test_inode_state(inode, in ext4_writepages()
2487 ext4_destroy_inline_data(handle, inode); in ext4_writepages()
2505 mpd.inode = inode; in ext4_writepages()
2515 mpd.io_submit.io_end = ext4_init_io_end(inode, GFP_KERNEL); in ext4_writepages()
2528 BUG_ON(ext4_should_journal_data(inode)); in ext4_writepages()
2529 needed_blocks = ext4_da_writepages_trans_blocks(inode); in ext4_writepages()
2532 handle = ext4_journal_start_with_reserve(inode, in ext4_writepages()
2536 ext4_msg(inode->i_sb, KERN_CRIT, "%s: jbd2_start: " in ext4_writepages()
2538 wbc->nr_to_write, inode->i_ino, ret); in ext4_writepages()
2544 trace_ext4_da_write_pages(inode, mpd.first_page, mpd.wbc); in ext4_writepages()
2599 trace_ext4_writepages_result(inode, wbc, ret, in ext4_writepages()
2639 static int ext4_da_write_credits(struct inode *inode, loff_t pos, unsigned len) in ext4_da_write_credits() argument
2641 if (likely(EXT4_HAS_RO_COMPAT_FEATURE(inode->i_sb, in ext4_da_write_credits()
2659 struct inode *inode = mapping->host; in ext4_da_write_begin() local
2664 if (ext4_nonda_switch(inode->i_sb)) { in ext4_da_write_begin()
2670 trace_ext4_da_write_begin(inode, pos, len, flags); in ext4_da_write_begin()
2672 if (ext4_test_inode_state(inode, EXT4_STATE_MAY_INLINE_DATA)) { in ext4_da_write_begin()
2673 ret = ext4_da_write_inline_data_begin(mapping, inode, in ext4_da_write_begin()
2702 handle = ext4_journal_start(inode, EXT4_HT_WRITE_PAGE, in ext4_da_write_begin()
2703 ext4_da_write_credits(inode, pos, len)); in ext4_da_write_begin()
2734 if (pos + len > inode->i_size) in ext4_da_write_begin()
2735 ext4_truncate_failed_write(inode); in ext4_da_write_begin()
2738 ext4_should_retry_alloc(inode->i_sb, &retries)) in ext4_da_write_begin()
2757 struct inode *inode = page->mapping->host; in ext4_da_should_update_i_disksize() local
2762 idx = offset >> inode->i_blkbits; in ext4_da_should_update_i_disksize()
2777 struct inode *inode = mapping->host; in ext4_da_write_end() local
2788 trace_ext4_da_write_end(inode, pos, len, copied); in ext4_da_write_end()
2798 if (copied && new_i_size > EXT4_I(inode)->i_disksize) { in ext4_da_write_end()
2799 if (ext4_has_inline_data(inode) || in ext4_da_write_end()
2801 ext4_update_i_disksize(inode, new_i_size); in ext4_da_write_end()
2806 ext4_mark_inode_dirty(handle, inode); in ext4_da_write_end()
2811 ext4_test_inode_state(inode, EXT4_STATE_MAY_INLINE_DATA) && in ext4_da_write_end()
2812 ext4_has_inline_data(inode)) in ext4_da_write_end()
2813 ret2 = ext4_da_write_inline_data_end(inode, pos, len, copied, in ext4_da_write_end()
2850 int ext4_alloc_da_blocks(struct inode *inode) in ext4_alloc_da_blocks() argument
2852 trace_ext4_alloc_da_blocks(inode); in ext4_alloc_da_blocks()
2854 if (!EXT4_I(inode)->i_reserved_data_blocks) in ext4_alloc_da_blocks()
2888 return filemap_flush(inode->i_mapping); in ext4_alloc_da_blocks()
2907 struct inode *inode = mapping->host; in ext4_bmap() local
2914 if (ext4_has_inline_data(inode)) in ext4_bmap()
2918 test_opt(inode->i_sb, DELALLOC)) { in ext4_bmap()
2927 if (EXT4_JOURNAL(inode) && in ext4_bmap()
2928 ext4_test_inode_state(inode, EXT4_STATE_JDATA)) { in ext4_bmap()
2947 ext4_clear_inode_state(inode, EXT4_STATE_JDATA); in ext4_bmap()
2948 journal = EXT4_JOURNAL(inode); in ext4_bmap()
2963 struct inode *inode = page->mapping->host; in ext4_readpage() local
2967 if (ext4_has_inline_data(inode)) in ext4_readpage()
2968 ret = ext4_readpage_inline(inode, page); in ext4_readpage()
2980 struct inode *inode = mapping->host; in ext4_readpages() local
2983 if (ext4_has_inline_data(inode)) in ext4_readpages()
3045 int ext4_get_block_write(struct inode *inode, sector_t iblock, in ext4_get_block_write() argument
3049 inode->i_ino, create); in ext4_get_block_write()
3050 return _ext4_get_block(inode, iblock, bh_result, in ext4_get_block_write()
3054 static int ext4_get_block_write_nolock(struct inode *inode, sector_t iblock, in ext4_get_block_write_nolock() argument
3058 inode->i_ino, create); in ext4_get_block_write_nolock()
3059 return _ext4_get_block(inode, iblock, bh_result, in ext4_get_block_write_nolock()
3074 iocb->private, io_end->inode->i_ino, iocb, offset, in ext4_end_io_dio()
3106 struct inode *inode = file->f_mapping->host; in ext4_ext_direct_IO() local
3116 if (iov_iter_rw(iter) != WRITE || final_size > inode->i_size) in ext4_ext_direct_IO()
3127 inode_dio_begin(inode); in ext4_ext_direct_IO()
3133 down_read(&EXT4_I(inode)->i_data_sem); in ext4_ext_direct_IO()
3134 mutex_unlock(&inode->i_mutex); in ext4_ext_direct_IO()
3160 ext4_inode_aio_set(inode, NULL); in ext4_ext_direct_IO()
3162 io_end = ext4_init_io_end(inode, GFP_NOFS); in ext4_ext_direct_IO()
3178 ext4_inode_aio_set(inode, io_end); in ext4_ext_direct_IO()
3184 BUG_ON(ext4_encrypted_inode(inode) && S_ISREG(inode->i_mode)); in ext4_ext_direct_IO()
3186 if (IS_DAX(inode)) in ext4_ext_direct_IO()
3187 ret = dax_do_io(iocb, inode, iter, offset, get_block_func, in ext4_ext_direct_IO()
3190 ret = __blockdev_direct_IO(iocb, inode, in ext4_ext_direct_IO()
3191 inode->i_sb->s_bdev, iter, offset, in ext4_ext_direct_IO()
3203 ext4_inode_aio_set(inode, NULL); in ext4_ext_direct_IO()
3216 if (ret > 0 && !overwrite && ext4_test_inode_state(inode, in ext4_ext_direct_IO()
3223 err = ext4_convert_unwritten_extents(NULL, inode, in ext4_ext_direct_IO()
3227 ext4_clear_inode_state(inode, EXT4_STATE_DIO_UNWRITTEN); in ext4_ext_direct_IO()
3232 inode_dio_end(inode); in ext4_ext_direct_IO()
3235 up_read(&EXT4_I(inode)->i_data_sem); in ext4_ext_direct_IO()
3236 mutex_lock(&inode->i_mutex); in ext4_ext_direct_IO()
3246 struct inode *inode = file->f_mapping->host; in ext4_direct_IO() local
3251 if (ext4_encrypted_inode(inode) && S_ISREG(inode->i_mode)) in ext4_direct_IO()
3258 if (ext4_should_journal_data(inode)) in ext4_direct_IO()
3262 if (ext4_has_inline_data(inode)) in ext4_direct_IO()
3265 trace_ext4_direct_IO_enter(inode, offset, count, iov_iter_rw(iter)); in ext4_direct_IO()
3266 if (ext4_test_inode_flag(inode, EXT4_INODE_EXTENTS)) in ext4_direct_IO()
3270 trace_ext4_direct_IO_exit(inode, offset, count, iov_iter_rw(iter), ret); in ext4_direct_IO()
3341 void ext4_set_aops(struct inode *inode) in ext4_set_aops() argument
3343 switch (ext4_inode_journal_mode(inode)) { in ext4_set_aops()
3345 ext4_set_inode_state(inode, EXT4_STATE_ORDERED_MODE); in ext4_set_aops()
3348 ext4_clear_inode_state(inode, EXT4_STATE_ORDERED_MODE); in ext4_set_aops()
3351 inode->i_mapping->a_ops = &ext4_journalled_aops; in ext4_set_aops()
3356 if (test_opt(inode->i_sb, DELALLOC)) in ext4_set_aops()
3357 inode->i_mapping->a_ops = &ext4_da_aops; in ext4_set_aops()
3359 inode->i_mapping->a_ops = &ext4_aops; in ext4_set_aops()
3369 struct inode *inode = mapping->host; in __ext4_block_zero_page_range() local
3379 blocksize = inode->i_sb->s_blocksize; in __ext4_block_zero_page_range()
3381 iblock = index << (PAGE_CACHE_SHIFT - inode->i_sb->s_blocksize_bits); in __ext4_block_zero_page_range()
3400 ext4_get_block(inode, iblock, bh, 0); in __ext4_block_zero_page_range()
3419 if (S_ISREG(inode->i_mode) && in __ext4_block_zero_page_range()
3420 ext4_encrypted_inode(inode)) { in __ext4_block_zero_page_range()
3422 BUG_ON(!ext4_has_encryption_key(inode)); in __ext4_block_zero_page_range()
3424 WARN_ON_ONCE(ext4_decrypt_one(inode, page)); in __ext4_block_zero_page_range()
3427 if (ext4_should_journal_data(inode)) { in __ext4_block_zero_page_range()
3436 if (ext4_should_journal_data(inode)) { in __ext4_block_zero_page_range()
3437 err = ext4_handle_dirty_metadata(handle, inode, bh); in __ext4_block_zero_page_range()
3441 if (ext4_test_inode_state(inode, EXT4_STATE_ORDERED_MODE)) in __ext4_block_zero_page_range()
3442 err = ext4_jbd2_file_inode(handle, inode); in __ext4_block_zero_page_range()
3461 struct inode *inode = mapping->host; in ext4_block_zero_page_range() local
3463 unsigned blocksize = inode->i_sb->s_blocksize; in ext4_block_zero_page_range()
3473 if (IS_DAX(inode)) in ext4_block_zero_page_range()
3474 return dax_zero_page_range(inode, from, length, ext4_get_block); in ext4_block_zero_page_range()
3490 struct inode *inode = mapping->host; in ext4_block_truncate_page() local
3492 blocksize = inode->i_sb->s_blocksize; in ext4_block_truncate_page()
3498 int ext4_zero_partial_blocks(handle_t *handle, struct inode *inode, in ext4_zero_partial_blocks() argument
3501 struct super_block *sb = inode->i_sb; in ext4_zero_partial_blocks()
3502 struct address_space *mapping = inode->i_mapping; in ext4_zero_partial_blocks()
3536 int ext4_can_truncate(struct inode *inode) in ext4_can_truncate() argument
3538 if (S_ISREG(inode->i_mode)) in ext4_can_truncate()
3540 if (S_ISDIR(inode->i_mode)) in ext4_can_truncate()
3542 if (S_ISLNK(inode->i_mode)) in ext4_can_truncate()
3543 return !ext4_inode_is_fast_symlink(inode); in ext4_can_truncate()
3553 int ext4_update_disksize_before_punch(struct inode *inode, loff_t offset, in ext4_update_disksize_before_punch() argument
3557 loff_t size = i_size_read(inode); in ext4_update_disksize_before_punch()
3559 WARN_ON(!mutex_is_locked(&inode->i_mutex)); in ext4_update_disksize_before_punch()
3563 if (EXT4_I(inode)->i_disksize >= size) in ext4_update_disksize_before_punch()
3566 handle = ext4_journal_start(inode, EXT4_HT_MISC, 1); in ext4_update_disksize_before_punch()
3569 ext4_update_i_disksize(inode, size); in ext4_update_disksize_before_punch()
3570 ext4_mark_inode_dirty(handle, inode); in ext4_update_disksize_before_punch()
3587 int ext4_punch_hole(struct inode *inode, loff_t offset, loff_t length) in ext4_punch_hole() argument
3589 struct super_block *sb = inode->i_sb; in ext4_punch_hole()
3591 struct address_space *mapping = inode->i_mapping; in ext4_punch_hole()
3597 if (!S_ISREG(inode->i_mode)) in ext4_punch_hole()
3600 trace_ext4_punch_hole(inode, offset, length, 0); in ext4_punch_hole()
3613 mutex_lock(&inode->i_mutex); in ext4_punch_hole()
3616 if (offset >= inode->i_size) in ext4_punch_hole()
3623 if (offset + length > inode->i_size) { in ext4_punch_hole()
3624 length = inode->i_size + in ext4_punch_hole()
3625 PAGE_CACHE_SIZE - (inode->i_size & (PAGE_CACHE_SIZE - 1)) - in ext4_punch_hole()
3635 ret = ext4_inode_attach_jinode(inode); in ext4_punch_hole()
3642 ext4_inode_block_unlocked_dio(inode); in ext4_punch_hole()
3643 inode_dio_wait(inode); in ext4_punch_hole()
3649 down_write(&EXT4_I(inode)->i_mmap_sem); in ext4_punch_hole()
3655 ret = ext4_update_disksize_before_punch(inode, offset, length); in ext4_punch_hole()
3658 truncate_pagecache_range(inode, first_block_offset, in ext4_punch_hole()
3662 if (ext4_test_inode_flag(inode, EXT4_INODE_EXTENTS)) in ext4_punch_hole()
3663 credits = ext4_writepage_trans_blocks(inode); in ext4_punch_hole()
3665 credits = ext4_blocks_for_truncate(inode); in ext4_punch_hole()
3666 handle = ext4_journal_start(inode, EXT4_HT_TRUNCATE, credits); in ext4_punch_hole()
3673 ret = ext4_zero_partial_blocks(handle, inode, offset, in ext4_punch_hole()
3686 down_write(&EXT4_I(inode)->i_data_sem); in ext4_punch_hole()
3687 ext4_discard_preallocations(inode); in ext4_punch_hole()
3689 ret = ext4_es_remove_extent(inode, first_block, in ext4_punch_hole()
3692 up_write(&EXT4_I(inode)->i_data_sem); in ext4_punch_hole()
3696 if (ext4_test_inode_flag(inode, EXT4_INODE_EXTENTS)) in ext4_punch_hole()
3697 ret = ext4_ext_remove_space(inode, first_block, in ext4_punch_hole()
3700 ret = ext4_ind_remove_space(handle, inode, first_block, in ext4_punch_hole()
3703 up_write(&EXT4_I(inode)->i_data_sem); in ext4_punch_hole()
3704 if (IS_SYNC(inode)) in ext4_punch_hole()
3707 inode->i_mtime = inode->i_ctime = ext4_current_time(inode); in ext4_punch_hole()
3708 ext4_mark_inode_dirty(handle, inode); in ext4_punch_hole()
3712 up_write(&EXT4_I(inode)->i_mmap_sem); in ext4_punch_hole()
3713 ext4_inode_resume_unlocked_dio(inode); in ext4_punch_hole()
3715 mutex_unlock(&inode->i_mutex); in ext4_punch_hole()
3719 int ext4_inode_attach_jinode(struct inode *inode) in ext4_inode_attach_jinode() argument
3721 struct ext4_inode_info *ei = EXT4_I(inode); in ext4_inode_attach_jinode()
3724 if (ei->jinode || !EXT4_SB(inode->i_sb)->s_journal) in ext4_inode_attach_jinode()
3728 spin_lock(&inode->i_lock); in ext4_inode_attach_jinode()
3731 spin_unlock(&inode->i_lock); in ext4_inode_attach_jinode()
3735 jbd2_journal_init_jbd_inode(ei->jinode, inode); in ext4_inode_attach_jinode()
3738 spin_unlock(&inode->i_lock); in ext4_inode_attach_jinode()
3772 void ext4_truncate(struct inode *inode) in ext4_truncate() argument
3774 struct ext4_inode_info *ei = EXT4_I(inode); in ext4_truncate()
3777 struct address_space *mapping = inode->i_mapping; in ext4_truncate()
3784 if (!(inode->i_state & (I_NEW|I_FREEING))) in ext4_truncate()
3785 WARN_ON(!mutex_is_locked(&inode->i_mutex)); in ext4_truncate()
3786 trace_ext4_truncate_enter(inode); in ext4_truncate()
3788 if (!ext4_can_truncate(inode)) in ext4_truncate()
3791 ext4_clear_inode_flag(inode, EXT4_INODE_EOFBLOCKS); in ext4_truncate()
3793 if (inode->i_size == 0 && !test_opt(inode->i_sb, NO_AUTO_DA_ALLOC)) in ext4_truncate()
3794 ext4_set_inode_state(inode, EXT4_STATE_DA_ALLOC_CLOSE); in ext4_truncate()
3796 if (ext4_has_inline_data(inode)) { in ext4_truncate()
3799 ext4_inline_data_truncate(inode, &has_inline); in ext4_truncate()
3805 if (inode->i_size & (inode->i_sb->s_blocksize - 1)) { in ext4_truncate()
3806 if (ext4_inode_attach_jinode(inode) < 0) in ext4_truncate()
3810 if (ext4_test_inode_flag(inode, EXT4_INODE_EXTENTS)) in ext4_truncate()
3811 credits = ext4_writepage_trans_blocks(inode); in ext4_truncate()
3813 credits = ext4_blocks_for_truncate(inode); in ext4_truncate()
3815 handle = ext4_journal_start(inode, EXT4_HT_TRUNCATE, credits); in ext4_truncate()
3817 ext4_std_error(inode->i_sb, PTR_ERR(handle)); in ext4_truncate()
3821 if (inode->i_size & (inode->i_sb->s_blocksize - 1)) in ext4_truncate()
3822 ext4_block_truncate_page(handle, mapping, inode->i_size); in ext4_truncate()
3833 if (ext4_orphan_add(handle, inode)) in ext4_truncate()
3836 down_write(&EXT4_I(inode)->i_data_sem); in ext4_truncate()
3838 ext4_discard_preallocations(inode); in ext4_truncate()
3840 if (ext4_test_inode_flag(inode, EXT4_INODE_EXTENTS)) in ext4_truncate()
3841 ext4_ext_truncate(handle, inode); in ext4_truncate()
3843 ext4_ind_truncate(handle, inode); in ext4_truncate()
3847 if (IS_SYNC(inode)) in ext4_truncate()
3858 if (inode->i_nlink) in ext4_truncate()
3859 ext4_orphan_del(handle, inode); in ext4_truncate()
3861 inode->i_mtime = inode->i_ctime = ext4_current_time(inode); in ext4_truncate()
3862 ext4_mark_inode_dirty(handle, inode); in ext4_truncate()
3865 trace_ext4_truncate_exit(inode); in ext4_truncate()
3874 static int __ext4_get_inode_loc(struct inode *inode, in __ext4_get_inode_loc() argument
3879 struct super_block *sb = inode->i_sb; in __ext4_get_inode_loc()
3884 if (!ext4_valid_inum(sb, inode->i_ino)) in __ext4_get_inode_loc()
3887 iloc->block_group = (inode->i_ino - 1) / EXT4_INODES_PER_GROUP(sb); in __ext4_get_inode_loc()
3896 inode_offset = ((inode->i_ino - 1) % in __ext4_get_inode_loc()
3994 trace_ext4_load_inode(inode); in __ext4_get_inode_loc()
4000 EXT4_ERROR_INODE_BLOCK(inode, block, in __ext4_get_inode_loc()
4011 int ext4_get_inode_loc(struct inode *inode, struct ext4_iloc *iloc) in ext4_get_inode_loc() argument
4014 return __ext4_get_inode_loc(inode, iloc, in ext4_get_inode_loc()
4015 !ext4_test_inode_state(inode, EXT4_STATE_XATTR)); in ext4_get_inode_loc()
4018 void ext4_set_inode_flags(struct inode *inode) in ext4_set_inode_flags() argument
4020 unsigned int flags = EXT4_I(inode)->i_flags; in ext4_set_inode_flags()
4033 if (test_opt(inode->i_sb, DAX)) in ext4_set_inode_flags()
4035 inode_set_flags(inode, new_fl, in ext4_set_inode_flags()
4068 struct inode *inode = &(ei->vfs_inode); in ext4_inode_blocks() local
4069 struct super_block *sb = inode->i_sb; in ext4_inode_blocks()
4076 if (ext4_test_inode_flag(inode, EXT4_INODE_HUGE_FILE)) { in ext4_inode_blocks()
4078 return i_blocks << (inode->i_blkbits - 9); in ext4_inode_blocks()
4087 static inline void ext4_iget_extra_inode(struct inode *inode, in ext4_iget_extra_inode() argument
4094 ext4_set_inode_state(inode, EXT4_STATE_XATTR); in ext4_iget_extra_inode()
4095 ext4_find_inline_data_nolock(inode); in ext4_iget_extra_inode()
4097 EXT4_I(inode)->i_inline_off = 0; in ext4_iget_extra_inode()
4100 struct inode *ext4_iget(struct super_block *sb, unsigned long ino) in ext4_iget()
4105 struct inode *inode; in ext4_iget() local
4112 inode = iget_locked(sb, ino); in ext4_iget()
4113 if (!inode) in ext4_iget()
4115 if (!(inode->i_state & I_NEW)) in ext4_iget()
4116 return inode; in ext4_iget()
4118 ei = EXT4_I(inode); in ext4_iget()
4121 ret = __ext4_get_inode_loc(inode, &iloc, 0); in ext4_iget()
4126 if (EXT4_INODE_SIZE(inode->i_sb) > EXT4_GOOD_OLD_INODE_SIZE) { in ext4_iget()
4129 EXT4_INODE_SIZE(inode->i_sb)) { in ext4_iget()
4130 EXT4_ERROR_INODE(inode, "bad extra_isize (%u != %u)", in ext4_iget()
4132 EXT4_INODE_SIZE(inode->i_sb)); in ext4_iget()
4141 struct ext4_sb_info *sbi = EXT4_SB(inode->i_sb); in ext4_iget()
4143 __le32 inum = cpu_to_le32(inode->i_ino); in ext4_iget()
4151 if (!ext4_inode_csum_verify(inode, raw_inode, ei)) { in ext4_iget()
4152 EXT4_ERROR_INODE(inode, "checksum invalid"); in ext4_iget()
4157 inode->i_mode = le16_to_cpu(raw_inode->i_mode); in ext4_iget()
4160 if (!(test_opt(inode->i_sb, NO_UID32))) { in ext4_iget()
4164 i_uid_write(inode, i_uid); in ext4_iget()
4165 i_gid_write(inode, i_gid); in ext4_iget()
4166 set_nlink(inode, le16_to_cpu(raw_inode->i_links_count)); in ext4_iget()
4177 if (inode->i_nlink == 0) { in ext4_iget()
4178 if ((inode->i_mode == 0 || in ext4_iget()
4179 !(EXT4_SB(inode->i_sb)->s_mount_state & EXT4_ORPHAN_FS)) && in ext4_iget()
4193 inode->i_blocks = ext4_inode_blocks(raw_inode, ei); in ext4_iget()
4198 inode->i_size = ext4_isize(raw_inode); in ext4_iget()
4199 ei->i_disksize = inode->i_size; in ext4_iget()
4203 inode->i_generation = le32_to_cpu(raw_inode->i_generation); in ext4_iget()
4239 if (EXT4_INODE_SIZE(inode->i_sb) > EXT4_GOOD_OLD_INODE_SIZE) { in ext4_iget()
4245 ext4_iget_extra_inode(inode, raw_inode, ei); in ext4_iget()
4249 EXT4_INODE_GET_XTIME(i_ctime, inode, raw_inode); in ext4_iget()
4250 EXT4_INODE_GET_XTIME(i_mtime, inode, raw_inode); in ext4_iget()
4251 EXT4_INODE_GET_XTIME(i_atime, inode, raw_inode); in ext4_iget()
4254 if (likely(!test_opt2(inode->i_sb, HURD_COMPAT))) { in ext4_iget()
4255 inode->i_version = le32_to_cpu(raw_inode->i_disk_version); in ext4_iget()
4256 if (EXT4_INODE_SIZE(inode->i_sb) > EXT4_GOOD_OLD_INODE_SIZE) { in ext4_iget()
4258 inode->i_version |= in ext4_iget()
4266 EXT4_ERROR_INODE(inode, "bad extended attribute block %llu", in ext4_iget()
4270 } else if (!ext4_has_inline_data(inode)) { in ext4_iget()
4271 if (ext4_test_inode_flag(inode, EXT4_INODE_EXTENTS)) { in ext4_iget()
4272 if ((S_ISREG(inode->i_mode) || S_ISDIR(inode->i_mode) || in ext4_iget()
4273 (S_ISLNK(inode->i_mode) && in ext4_iget()
4274 !ext4_inode_is_fast_symlink(inode)))) in ext4_iget()
4276 ret = ext4_ext_check_inode(inode); in ext4_iget()
4277 } else if (S_ISREG(inode->i_mode) || S_ISDIR(inode->i_mode) || in ext4_iget()
4278 (S_ISLNK(inode->i_mode) && in ext4_iget()
4279 !ext4_inode_is_fast_symlink(inode))) { in ext4_iget()
4281 ret = ext4_ind_check_inode(inode); in ext4_iget()
4287 if (S_ISREG(inode->i_mode)) { in ext4_iget()
4288 inode->i_op = &ext4_file_inode_operations; in ext4_iget()
4289 inode->i_fop = &ext4_file_operations; in ext4_iget()
4290 ext4_set_aops(inode); in ext4_iget()
4291 } else if (S_ISDIR(inode->i_mode)) { in ext4_iget()
4292 inode->i_op = &ext4_dir_inode_operations; in ext4_iget()
4293 inode->i_fop = &ext4_dir_operations; in ext4_iget()
4294 } else if (S_ISLNK(inode->i_mode)) { in ext4_iget()
4295 if (ext4_inode_is_fast_symlink(inode) && in ext4_iget()
4296 !ext4_encrypted_inode(inode)) { in ext4_iget()
4297 inode->i_op = &ext4_fast_symlink_inode_operations; in ext4_iget()
4298 nd_terminate_link(ei->i_data, inode->i_size, in ext4_iget()
4301 inode->i_op = &ext4_symlink_inode_operations; in ext4_iget()
4302 ext4_set_aops(inode); in ext4_iget()
4304 } else if (S_ISCHR(inode->i_mode) || S_ISBLK(inode->i_mode) || in ext4_iget()
4305 S_ISFIFO(inode->i_mode) || S_ISSOCK(inode->i_mode)) { in ext4_iget()
4306 inode->i_op = &ext4_special_inode_operations; in ext4_iget()
4308 init_special_inode(inode, inode->i_mode, in ext4_iget()
4311 init_special_inode(inode, inode->i_mode, in ext4_iget()
4314 make_bad_inode(inode); in ext4_iget()
4317 EXT4_ERROR_INODE(inode, "bogus i_mode (%o)", inode->i_mode); in ext4_iget()
4321 ext4_set_inode_flags(inode); in ext4_iget()
4322 unlock_new_inode(inode); in ext4_iget()
4323 return inode; in ext4_iget()
4327 iget_failed(inode); in ext4_iget()
4331 struct inode *ext4_iget_normal(struct super_block *sb, unsigned long ino) in ext4_iget_normal()
4342 struct inode *inode = &(ei->vfs_inode); in ext4_inode_blocks_set() local
4343 u64 i_blocks = inode->i_blocks; in ext4_inode_blocks_set()
4344 struct super_block *sb = inode->i_sb; in ext4_inode_blocks_set()
4353 ext4_clear_inode_flag(inode, EXT4_INODE_HUGE_FILE); in ext4_inode_blocks_set()
4366 ext4_clear_inode_flag(inode, EXT4_INODE_HUGE_FILE); in ext4_inode_blocks_set()
4368 ext4_set_inode_flag(inode, EXT4_INODE_HUGE_FILE); in ext4_inode_blocks_set()
4370 i_blocks = i_blocks >> (inode->i_blkbits - 9); in ext4_inode_blocks_set()
4382 static int other_inode_match(struct inode * inode, unsigned long ino, in other_inode_match() argument
4387 if ((inode->i_ino != ino) || in other_inode_match()
4388 (inode->i_state & (I_FREEING | I_WILL_FREE | I_NEW | in other_inode_match()
4390 ((inode->i_state & I_DIRTY_TIME) == 0)) in other_inode_match()
4392 spin_lock(&inode->i_lock); in other_inode_match()
4393 if (((inode->i_state & (I_FREEING | I_WILL_FREE | I_NEW | in other_inode_match()
4395 (inode->i_state & I_DIRTY_TIME)) { in other_inode_match()
4396 struct ext4_inode_info *ei = EXT4_I(inode); in other_inode_match()
4398 inode->i_state &= ~(I_DIRTY_TIME | I_DIRTY_TIME_EXPIRED); in other_inode_match()
4399 spin_unlock(&inode->i_lock); in other_inode_match()
4402 EXT4_INODE_SET_XTIME(i_ctime, inode, oi->raw_inode); in other_inode_match()
4403 EXT4_INODE_SET_XTIME(i_mtime, inode, oi->raw_inode); in other_inode_match()
4404 EXT4_INODE_SET_XTIME(i_atime, inode, oi->raw_inode); in other_inode_match()
4405 ext4_inode_csum_set(inode, oi->raw_inode, ei); in other_inode_match()
4407 trace_ext4_other_inode_update_time(inode, oi->orig_ino); in other_inode_match()
4410 spin_unlock(&inode->i_lock); in other_inode_match()
4449 struct inode *inode, in ext4_do_update_inode() argument
4453 struct ext4_inode_info *ei = EXT4_I(inode); in ext4_do_update_inode()
4455 struct super_block *sb = inode->i_sb; in ext4_do_update_inode()
4465 if (ext4_test_inode_state(inode, EXT4_STATE_NEW)) in ext4_do_update_inode()
4466 memset(raw_inode, 0, EXT4_SB(inode->i_sb)->s_inode_size); in ext4_do_update_inode()
4469 raw_inode->i_mode = cpu_to_le16(inode->i_mode); in ext4_do_update_inode()
4470 i_uid = i_uid_read(inode); in ext4_do_update_inode()
4471 i_gid = i_gid_read(inode); in ext4_do_update_inode()
4472 if (!(test_opt(inode->i_sb, NO_UID32))) { in ext4_do_update_inode()
4494 raw_inode->i_links_count = cpu_to_le16(inode->i_nlink); in ext4_do_update_inode()
4496 EXT4_INODE_SET_XTIME(i_ctime, inode, raw_inode); in ext4_do_update_inode()
4497 EXT4_INODE_SET_XTIME(i_mtime, inode, raw_inode); in ext4_do_update_inode()
4498 EXT4_INODE_SET_XTIME(i_atime, inode, raw_inode); in ext4_do_update_inode()
4508 if (likely(!test_opt2(inode->i_sb, HURD_COMPAT))) in ext4_do_update_inode()
4523 raw_inode->i_generation = cpu_to_le32(inode->i_generation); in ext4_do_update_inode()
4524 if (S_ISCHR(inode->i_mode) || S_ISBLK(inode->i_mode)) { in ext4_do_update_inode()
4525 if (old_valid_dev(inode->i_rdev)) { in ext4_do_update_inode()
4527 cpu_to_le32(old_encode_dev(inode->i_rdev)); in ext4_do_update_inode()
4532 cpu_to_le32(new_encode_dev(inode->i_rdev)); in ext4_do_update_inode()
4535 } else if (!ext4_has_inline_data(inode)) { in ext4_do_update_inode()
4540 if (likely(!test_opt2(inode->i_sb, HURD_COMPAT))) { in ext4_do_update_inode()
4541 raw_inode->i_disk_version = cpu_to_le32(inode->i_version); in ext4_do_update_inode()
4545 cpu_to_le32(inode->i_version >> 32); in ext4_do_update_inode()
4550 ext4_inode_csum_set(inode, raw_inode, ei); in ext4_do_update_inode()
4552 if (inode->i_sb->s_flags & MS_LAZYTIME) in ext4_do_update_inode()
4553 ext4_update_other_inodes_time(inode->i_sb, inode->i_ino, in ext4_do_update_inode()
4560 ext4_clear_inode_state(inode, EXT4_STATE_NEW); in ext4_do_update_inode()
4572 ext4_update_inode_fsync_trans(handle, inode, need_datasync); in ext4_do_update_inode()
4575 ext4_std_error(inode->i_sb, err); in ext4_do_update_inode()
4613 int ext4_write_inode(struct inode *inode, struct writeback_control *wbc) in ext4_write_inode() argument
4620 if (EXT4_SB(inode->i_sb)->s_journal) { in ext4_write_inode()
4635 err = ext4_force_commit(inode->i_sb); in ext4_write_inode()
4639 err = __ext4_get_inode_loc(inode, &iloc, 0); in ext4_write_inode()
4649 EXT4_ERROR_INODE_BLOCK(inode, iloc.bh->b_blocknr, in ext4_write_inode()
4663 static void ext4_wait_for_tail_page_commit(struct inode *inode) in ext4_wait_for_tail_page_commit() argument
4667 journal_t *journal = EXT4_SB(inode->i_sb)->s_journal; in ext4_wait_for_tail_page_commit()
4671 offset = inode->i_size & (PAGE_CACHE_SIZE - 1); in ext4_wait_for_tail_page_commit()
4677 if (offset > PAGE_CACHE_SIZE - (1 << inode->i_blkbits)) in ext4_wait_for_tail_page_commit()
4680 page = find_lock_page(inode->i_mapping, in ext4_wait_for_tail_page_commit()
4681 inode->i_size >> PAGE_CACHE_SHIFT); in ext4_wait_for_tail_page_commit()
4726 struct inode *inode = d_inode(dentry); in ext4_setattr() local
4731 error = inode_change_ok(inode, attr); in ext4_setattr()
4735 if (is_quota_modification(inode, attr)) in ext4_setattr()
4736 dquot_initialize(inode); in ext4_setattr()
4737 if ((ia_valid & ATTR_UID && !uid_eq(attr->ia_uid, inode->i_uid)) || in ext4_setattr()
4738 (ia_valid & ATTR_GID && !gid_eq(attr->ia_gid, inode->i_gid))) { in ext4_setattr()
4743 handle = ext4_journal_start(inode, EXT4_HT_QUOTA, in ext4_setattr()
4744 (EXT4_MAXQUOTAS_INIT_BLOCKS(inode->i_sb) + in ext4_setattr()
4745 EXT4_MAXQUOTAS_DEL_BLOCKS(inode->i_sb)) + 3); in ext4_setattr()
4750 error = dquot_transfer(inode, attr); in ext4_setattr()
4758 inode->i_uid = attr->ia_uid; in ext4_setattr()
4760 inode->i_gid = attr->ia_gid; in ext4_setattr()
4761 error = ext4_mark_inode_dirty(handle, inode); in ext4_setattr()
4765 if (attr->ia_valid & ATTR_SIZE && attr->ia_size != inode->i_size) { in ext4_setattr()
4768 if (!(ext4_test_inode_flag(inode, EXT4_INODE_EXTENTS))) { in ext4_setattr()
4769 struct ext4_sb_info *sbi = EXT4_SB(inode->i_sb); in ext4_setattr()
4775 if (IS_I_VERSION(inode) && attr->ia_size != inode->i_size) in ext4_setattr()
4776 inode_inc_iversion(inode); in ext4_setattr()
4778 if (S_ISREG(inode->i_mode) && in ext4_setattr()
4779 (attr->ia_size < inode->i_size)) { in ext4_setattr()
4780 if (ext4_should_order_data(inode)) { in ext4_setattr()
4781 error = ext4_begin_ordered_truncate(inode, in ext4_setattr()
4786 handle = ext4_journal_start(inode, EXT4_HT_INODE, 3); in ext4_setattr()
4792 error = ext4_orphan_add(handle, inode); in ext4_setattr()
4795 down_write(&EXT4_I(inode)->i_data_sem); in ext4_setattr()
4796 EXT4_I(inode)->i_disksize = attr->ia_size; in ext4_setattr()
4797 rc = ext4_mark_inode_dirty(handle, inode); in ext4_setattr()
4806 i_size_write(inode, attr->ia_size); in ext4_setattr()
4807 up_write(&EXT4_I(inode)->i_data_sem); in ext4_setattr()
4810 ext4_orphan_del(NULL, inode); in ext4_setattr()
4814 loff_t oldsize = inode->i_size; in ext4_setattr()
4816 i_size_write(inode, attr->ia_size); in ext4_setattr()
4817 pagecache_isize_extended(inode, oldsize, inode->i_size); in ext4_setattr()
4826 if (!ext4_should_journal_data(inode)) { in ext4_setattr()
4827 ext4_inode_block_unlocked_dio(inode); in ext4_setattr()
4828 inode_dio_wait(inode); in ext4_setattr()
4829 ext4_inode_resume_unlocked_dio(inode); in ext4_setattr()
4831 ext4_wait_for_tail_page_commit(inode); in ext4_setattr()
4833 down_write(&EXT4_I(inode)->i_mmap_sem); in ext4_setattr()
4838 truncate_pagecache(inode, inode->i_size); in ext4_setattr()
4839 up_write(&EXT4_I(inode)->i_mmap_sem); in ext4_setattr()
4846 ext4_truncate(inode); in ext4_setattr()
4849 setattr_copy(inode, attr); in ext4_setattr()
4850 mark_inode_dirty(inode); in ext4_setattr()
4857 if (orphan && inode->i_nlink) in ext4_setattr()
4858 ext4_orphan_del(NULL, inode); in ext4_setattr()
4861 rc = posix_acl_chmod(inode, inode->i_mode); in ext4_setattr()
4864 ext4_std_error(inode->i_sb, error); in ext4_setattr()
4873 struct inode *inode; in ext4_getattr() local
4876 inode = d_inode(dentry); in ext4_getattr()
4877 generic_fillattr(inode, stat); in ext4_getattr()
4885 if (unlikely(ext4_has_inline_data(inode))) in ext4_getattr()
4898 delalloc_blocks = EXT4_C2B(EXT4_SB(inode->i_sb), in ext4_getattr()
4899 EXT4_I(inode)->i_reserved_data_blocks); in ext4_getattr()
4900 stat->blocks += delalloc_blocks << (inode->i_sb->s_blocksize_bits - 9); in ext4_getattr()
4904 static int ext4_index_trans_blocks(struct inode *inode, int lblocks, in ext4_index_trans_blocks() argument
4907 if (!(ext4_test_inode_flag(inode, EXT4_INODE_EXTENTS))) in ext4_index_trans_blocks()
4908 return ext4_ind_trans_blocks(inode, lblocks); in ext4_index_trans_blocks()
4909 return ext4_ext_index_trans_blocks(inode, pextents); in ext4_index_trans_blocks()
4923 static int ext4_meta_trans_blocks(struct inode *inode, int lblocks, in ext4_meta_trans_blocks() argument
4926 ext4_group_t groups, ngroups = ext4_get_groups_count(inode->i_sb); in ext4_meta_trans_blocks()
4935 idxblocks = ext4_index_trans_blocks(inode, lblocks, pextents); in ext4_meta_trans_blocks()
4947 if (groups > EXT4_SB(inode->i_sb)->s_gdb_count) in ext4_meta_trans_blocks()
4948 gdpblocks = EXT4_SB(inode->i_sb)->s_gdb_count; in ext4_meta_trans_blocks()
4954 ret += EXT4_META_TRANS_BLOCKS(inode->i_sb); in ext4_meta_trans_blocks()
4969 int ext4_writepage_trans_blocks(struct inode *inode) in ext4_writepage_trans_blocks() argument
4971 int bpp = ext4_journal_blocks_per_page(inode); in ext4_writepage_trans_blocks()
4974 ret = ext4_meta_trans_blocks(inode, bpp, bpp); in ext4_writepage_trans_blocks()
4977 if (ext4_should_journal_data(inode)) in ext4_writepage_trans_blocks()
4991 int ext4_chunk_trans_blocks(struct inode *inode, int nrblocks) in ext4_chunk_trans_blocks() argument
4993 return ext4_meta_trans_blocks(inode, nrblocks, 1); in ext4_chunk_trans_blocks()
5001 struct inode *inode, struct ext4_iloc *iloc) in ext4_mark_iloc_dirty() argument
5005 if (IS_I_VERSION(inode)) in ext4_mark_iloc_dirty()
5006 inode_inc_iversion(inode); in ext4_mark_iloc_dirty()
5012 err = ext4_do_update_inode(handle, inode, iloc); in ext4_mark_iloc_dirty()
5023 ext4_reserve_inode_write(handle_t *handle, struct inode *inode, in ext4_reserve_inode_write() argument
5028 err = ext4_get_inode_loc(inode, iloc); in ext4_reserve_inode_write()
5037 ext4_std_error(inode->i_sb, err); in ext4_reserve_inode_write()
5045 static int ext4_expand_extra_isize(struct inode *inode, in ext4_expand_extra_isize() argument
5053 if (EXT4_I(inode)->i_extra_isize >= new_extra_isize) in ext4_expand_extra_isize()
5058 header = IHDR(inode, raw_inode); in ext4_expand_extra_isize()
5061 if (!ext4_test_inode_state(inode, EXT4_STATE_XATTR) || in ext4_expand_extra_isize()
5065 EXT4_I(inode)->i_extra_isize = new_extra_isize; in ext4_expand_extra_isize()
5070 return ext4_expand_extra_isize_ea(inode, new_extra_isize, in ext4_expand_extra_isize()
5087 int ext4_mark_inode_dirty(handle_t *handle, struct inode *inode) in ext4_mark_inode_dirty() argument
5090 struct ext4_sb_info *sbi = EXT4_SB(inode->i_sb); in ext4_mark_inode_dirty()
5095 trace_ext4_mark_inode_dirty(inode, _RET_IP_); in ext4_mark_inode_dirty()
5096 err = ext4_reserve_inode_write(handle, inode, &iloc); in ext4_mark_inode_dirty()
5098 EXT4_I(inode)->i_extra_isize < sbi->s_want_extra_isize && in ext4_mark_inode_dirty()
5099 !ext4_test_inode_state(inode, EXT4_STATE_NO_EXPAND)) { in ext4_mark_inode_dirty()
5108 EXT4_DATA_TRANS_BLOCKS(inode->i_sb))) == 0) { in ext4_mark_inode_dirty()
5109 ret = ext4_expand_extra_isize(inode, in ext4_mark_inode_dirty()
5113 ext4_set_inode_state(inode, in ext4_mark_inode_dirty()
5117 ext4_warning(inode->i_sb, in ext4_mark_inode_dirty()
5120 inode->i_ino); in ext4_mark_inode_dirty()
5128 err = ext4_mark_iloc_dirty(handle, inode, &iloc); in ext4_mark_inode_dirty()
5150 void ext4_dirty_inode(struct inode *inode, int flags) in ext4_dirty_inode() argument
5156 handle = ext4_journal_start(inode, EXT4_HT_INODE, 2); in ext4_dirty_inode()
5160 ext4_mark_inode_dirty(handle, inode); in ext4_dirty_inode()
5175 static int ext4_pin_inode(handle_t *handle, struct inode *inode)
5181 err = ext4_get_inode_loc(inode, &iloc);
5192 ext4_std_error(inode->i_sb, err);
5197 int ext4_change_inode_journal_flag(struct inode *inode, int val) in ext4_change_inode_journal_flag() argument
5213 journal = EXT4_JOURNAL(inode); in ext4_change_inode_journal_flag()
5224 if (val && test_opt(inode->i_sb, DELALLOC)) { in ext4_change_inode_journal_flag()
5225 err = ext4_alloc_da_blocks(inode); in ext4_change_inode_journal_flag()
5231 ext4_inode_block_unlocked_dio(inode); in ext4_change_inode_journal_flag()
5232 inode_dio_wait(inode); in ext4_change_inode_journal_flag()
5245 ext4_set_inode_flag(inode, EXT4_INODE_JOURNAL_DATA); in ext4_change_inode_journal_flag()
5250 ext4_inode_resume_unlocked_dio(inode); in ext4_change_inode_journal_flag()
5253 ext4_clear_inode_flag(inode, EXT4_INODE_JOURNAL_DATA); in ext4_change_inode_journal_flag()
5255 ext4_set_aops(inode); in ext4_change_inode_journal_flag()
5258 ext4_inode_resume_unlocked_dio(inode); in ext4_change_inode_journal_flag()
5262 handle = ext4_journal_start(inode, EXT4_HT_INODE, 1); in ext4_change_inode_journal_flag()
5266 err = ext4_mark_inode_dirty(handle, inode); in ext4_change_inode_journal_flag()
5269 ext4_std_error(inode->i_sb, err); in ext4_change_inode_journal_flag()
5286 struct inode *inode = file_inode(file); in ext4_page_mkwrite() local
5287 struct address_space *mapping = inode->i_mapping; in ext4_page_mkwrite()
5292 sb_start_pagefault(inode->i_sb); in ext4_page_mkwrite()
5295 down_read(&EXT4_I(inode)->i_mmap_sem); in ext4_page_mkwrite()
5297 if (test_opt(inode->i_sb, DELALLOC) && in ext4_page_mkwrite()
5298 !ext4_should_journal_data(inode) && in ext4_page_mkwrite()
5299 !ext4_nonda_switch(inode->i_sb)) { in ext4_page_mkwrite()
5304 ext4_should_retry_alloc(inode->i_sb, &retries)); in ext4_page_mkwrite()
5309 size = i_size_read(inode); in ext4_page_mkwrite()
5337 if (ext4_should_dioread_nolock(inode)) in ext4_page_mkwrite()
5342 handle = ext4_journal_start(inode, EXT4_HT_WRITE_PAGE, in ext4_page_mkwrite()
5343 ext4_writepage_trans_blocks(inode)); in ext4_page_mkwrite()
5349 if (!ret && ext4_should_journal_data(inode)) { in ext4_page_mkwrite()
5357 ext4_set_inode_state(inode, EXT4_STATE_JDATA); in ext4_page_mkwrite()
5360 if (ret == -ENOSPC && ext4_should_retry_alloc(inode->i_sb, &retries)) in ext4_page_mkwrite()
5365 up_read(&EXT4_I(inode)->i_mmap_sem); in ext4_page_mkwrite()
5366 sb_end_pagefault(inode->i_sb); in ext4_page_mkwrite()
5372 struct inode *inode = file_inode(vma->vm_file); in ext4_filemap_fault() local
5375 down_read(&EXT4_I(inode)->i_mmap_sem); in ext4_filemap_fault()
5377 up_read(&EXT4_I(inode)->i_mmap_sem); in ext4_filemap_fault()