Lines Matching refs:inode

50 static __u32 ext4_inode_csum(struct inode *inode, struct ext4_inode *raw,  in ext4_inode_csum()  argument
53 struct ext4_sb_info *sbi = EXT4_SB(inode->i_sb); in ext4_inode_csum()
60 if (EXT4_INODE_SIZE(inode->i_sb) > EXT4_GOOD_OLD_INODE_SIZE && in ext4_inode_csum()
67 EXT4_INODE_SIZE(inode->i_sb)); in ext4_inode_csum()
70 if (EXT4_INODE_SIZE(inode->i_sb) > EXT4_GOOD_OLD_INODE_SIZE && in ext4_inode_csum()
77 static int ext4_inode_csum_verify(struct inode *inode, struct ext4_inode *raw, in ext4_inode_csum_verify() argument
82 if (EXT4_SB(inode->i_sb)->s_es->s_creator_os != in ext4_inode_csum_verify()
84 !ext4_has_metadata_csum(inode->i_sb)) in ext4_inode_csum_verify()
88 calculated = ext4_inode_csum(inode, raw, ei); in ext4_inode_csum_verify()
89 if (EXT4_INODE_SIZE(inode->i_sb) > EXT4_GOOD_OLD_INODE_SIZE && in ext4_inode_csum_verify()
98 static void ext4_inode_csum_set(struct inode *inode, struct ext4_inode *raw, in ext4_inode_csum_set() argument
103 if (EXT4_SB(inode->i_sb)->s_es->s_creator_os != in ext4_inode_csum_set()
105 !ext4_has_metadata_csum(inode->i_sb)) in ext4_inode_csum_set()
108 csum = ext4_inode_csum(inode, raw, ei); in ext4_inode_csum_set()
110 if (EXT4_INODE_SIZE(inode->i_sb) > EXT4_GOOD_OLD_INODE_SIZE && in ext4_inode_csum_set()
115 static inline int ext4_begin_ordered_truncate(struct inode *inode, in ext4_begin_ordered_truncate() argument
118 trace_ext4_begin_ordered_truncate(inode, new_size); in ext4_begin_ordered_truncate()
125 if (!EXT4_I(inode)->jinode) in ext4_begin_ordered_truncate()
127 return jbd2_journal_begin_ordered_truncate(EXT4_JOURNAL(inode), in ext4_begin_ordered_truncate()
128 EXT4_I(inode)->jinode, in ext4_begin_ordered_truncate()
136 static int ext4_meta_trans_blocks(struct inode *inode, int lblocks,
142 int ext4_inode_is_fast_symlink(struct inode *inode) in ext4_inode_is_fast_symlink() argument
144 int ea_blocks = EXT4_I(inode)->i_file_acl ? in ext4_inode_is_fast_symlink()
145 EXT4_CLUSTER_SIZE(inode->i_sb) >> 9 : 0; in ext4_inode_is_fast_symlink()
147 if (ext4_has_inline_data(inode)) in ext4_inode_is_fast_symlink()
150 return (S_ISLNK(inode->i_mode) && inode->i_blocks - ea_blocks == 0); in ext4_inode_is_fast_symlink()
158 int ext4_truncate_restart_trans(handle_t *handle, struct inode *inode, in ext4_truncate_restart_trans() argument
169 BUG_ON(EXT4_JOURNAL(inode) == NULL); in ext4_truncate_restart_trans()
171 up_write(&EXT4_I(inode)->i_data_sem); in ext4_truncate_restart_trans()
173 down_write(&EXT4_I(inode)->i_data_sem); in ext4_truncate_restart_trans()
174 ext4_discard_preallocations(inode); in ext4_truncate_restart_trans()
182 void ext4_evict_inode(struct inode *inode) in ext4_evict_inode() argument
187 trace_ext4_evict_inode(inode); in ext4_evict_inode()
189 if (inode->i_nlink) { in ext4_evict_inode()
208 if (ext4_should_journal_data(inode) && in ext4_evict_inode()
209 (S_ISLNK(inode->i_mode) || S_ISREG(inode->i_mode)) && in ext4_evict_inode()
210 inode->i_ino != EXT4_JOURNAL_INO) { in ext4_evict_inode()
211 journal_t *journal = EXT4_SB(inode->i_sb)->s_journal; in ext4_evict_inode()
212 tid_t commit_tid = EXT4_I(inode)->i_datasync_tid; in ext4_evict_inode()
215 filemap_write_and_wait(&inode->i_data); in ext4_evict_inode()
217 truncate_inode_pages_final(&inode->i_data); in ext4_evict_inode()
219 WARN_ON(atomic_read(&EXT4_I(inode)->i_ioend_count)); in ext4_evict_inode()
223 if (is_bad_inode(inode)) in ext4_evict_inode()
225 dquot_initialize(inode); in ext4_evict_inode()
227 if (ext4_should_order_data(inode)) in ext4_evict_inode()
228 ext4_begin_ordered_truncate(inode, 0); in ext4_evict_inode()
229 truncate_inode_pages_final(&inode->i_data); in ext4_evict_inode()
231 WARN_ON(atomic_read(&EXT4_I(inode)->i_ioend_count)); in ext4_evict_inode()
237 sb_start_intwrite(inode->i_sb); in ext4_evict_inode()
238 handle = ext4_journal_start(inode, EXT4_HT_TRUNCATE, in ext4_evict_inode()
239 ext4_blocks_for_truncate(inode)+3); in ext4_evict_inode()
241 ext4_std_error(inode->i_sb, PTR_ERR(handle)); in ext4_evict_inode()
247 ext4_orphan_del(NULL, inode); in ext4_evict_inode()
248 sb_end_intwrite(inode->i_sb); in ext4_evict_inode()
252 if (IS_SYNC(inode)) in ext4_evict_inode()
254 inode->i_size = 0; in ext4_evict_inode()
255 err = ext4_mark_inode_dirty(handle, inode); in ext4_evict_inode()
257 ext4_warning(inode->i_sb, in ext4_evict_inode()
261 if (inode->i_blocks) in ext4_evict_inode()
262 ext4_truncate(inode); in ext4_evict_inode()
275 ext4_warning(inode->i_sb, in ext4_evict_inode()
279 ext4_orphan_del(NULL, inode); in ext4_evict_inode()
280 sb_end_intwrite(inode->i_sb); in ext4_evict_inode()
293 ext4_orphan_del(handle, inode); in ext4_evict_inode()
294 EXT4_I(inode)->i_dtime = get_seconds(); in ext4_evict_inode()
303 if (ext4_mark_inode_dirty(handle, inode)) in ext4_evict_inode()
305 ext4_clear_inode(inode); in ext4_evict_inode()
307 ext4_free_inode(handle, inode); in ext4_evict_inode()
309 sb_end_intwrite(inode->i_sb); in ext4_evict_inode()
312 ext4_clear_inode(inode); /* We must guarantee clearing of inode... */ in ext4_evict_inode()
316 qsize_t *ext4_get_reserved_space(struct inode *inode) in ext4_get_reserved_space() argument
318 return &EXT4_I(inode)->i_reserved_quota; in ext4_get_reserved_space()
326 void ext4_da_update_reserve_space(struct inode *inode, in ext4_da_update_reserve_space() argument
329 struct ext4_sb_info *sbi = EXT4_SB(inode->i_sb); in ext4_da_update_reserve_space()
330 struct ext4_inode_info *ei = EXT4_I(inode); in ext4_da_update_reserve_space()
333 trace_ext4_da_update_reserve_space(inode, used, quota_claim); in ext4_da_update_reserve_space()
335 ext4_warning(inode->i_sb, "%s: ino %lu, used %d " in ext4_da_update_reserve_space()
337 __func__, inode->i_ino, used, in ext4_da_update_reserve_space()
347 spin_unlock(&EXT4_I(inode)->i_block_reservation_lock); in ext4_da_update_reserve_space()
351 dquot_claim_block(inode, EXT4_C2B(sbi, used)); in ext4_da_update_reserve_space()
358 dquot_release_reservation_block(inode, EXT4_C2B(sbi, used)); in ext4_da_update_reserve_space()
367 (atomic_read(&inode->i_writecount) == 0)) in ext4_da_update_reserve_space()
368 ext4_discard_preallocations(inode); in ext4_da_update_reserve_space()
371 static int __check_block_validity(struct inode *inode, const char *func, in __check_block_validity() argument
375 if (!ext4_data_block_valid(EXT4_SB(inode->i_sb), map->m_pblk, in __check_block_validity()
377 ext4_error_inode(inode, func, line, map->m_pblk, in __check_block_validity()
386 #define check_block_validity(inode, map) \ argument
387 __check_block_validity((inode), __func__, __LINE__, (map))
391 struct inode *inode, in ext4_map_blocks_es_recheck() argument
407 down_read(&EXT4_I(inode)->i_data_sem); in ext4_map_blocks_es_recheck()
408 if (ext4_test_inode_flag(inode, EXT4_INODE_EXTENTS)) { in ext4_map_blocks_es_recheck()
409 retval = ext4_ext_map_blocks(handle, inode, map, flags & in ext4_map_blocks_es_recheck()
412 retval = ext4_ind_map_blocks(handle, inode, map, flags & in ext4_map_blocks_es_recheck()
416 up_read((&EXT4_I(inode)->i_data_sem)); in ext4_map_blocks_es_recheck()
428 inode->i_ino, es_map->m_lblk, es_map->m_len, in ext4_map_blocks_es_recheck()
458 int ext4_map_blocks(handle_t *handle, struct inode *inode, in ext4_map_blocks() argument
472 "logical block %lu\n", inode->i_ino, flags, map->m_len, in ext4_map_blocks()
486 if (ext4_es_lookup_extent(inode, map->m_lblk, &es)) { in ext4_map_blocks()
502 ext4_map_blocks_es_recheck(handle, inode, map, in ext4_map_blocks()
513 down_read(&EXT4_I(inode)->i_data_sem); in ext4_map_blocks()
514 if (ext4_test_inode_flag(inode, EXT4_INODE_EXTENTS)) { in ext4_map_blocks()
515 retval = ext4_ext_map_blocks(handle, inode, map, flags & in ext4_map_blocks()
518 retval = ext4_ind_map_blocks(handle, inode, map, flags & in ext4_map_blocks()
525 ext4_warning(inode->i_sb, in ext4_map_blocks()
528 inode->i_ino, retval, map->m_len); in ext4_map_blocks()
536 ext4_find_delalloc_range(inode, map->m_lblk, in ext4_map_blocks()
539 ret = ext4_es_insert_extent(inode, map->m_lblk, in ext4_map_blocks()
545 up_read((&EXT4_I(inode)->i_data_sem)); in ext4_map_blocks()
549 ret = check_block_validity(inode, map); in ext4_map_blocks()
586 down_write(&EXT4_I(inode)->i_data_sem); in ext4_map_blocks()
592 if (ext4_test_inode_flag(inode, EXT4_INODE_EXTENTS)) { in ext4_map_blocks()
593 retval = ext4_ext_map_blocks(handle, inode, map, flags); in ext4_map_blocks()
595 retval = ext4_ind_map_blocks(handle, inode, map, flags); in ext4_map_blocks()
603 ext4_clear_inode_state(inode, EXT4_STATE_EXT_MIGRATE); in ext4_map_blocks()
614 ext4_da_update_reserve_space(inode, retval, 1); in ext4_map_blocks()
621 ext4_warning(inode->i_sb, in ext4_map_blocks()
624 inode->i_ino, retval, map->m_len); in ext4_map_blocks()
633 ext4_es_lookup_extent(inode, map->m_lblk, &es)) { in ext4_map_blocks()
641 ext4_find_delalloc_range(inode, map->m_lblk, in ext4_map_blocks()
644 ret = ext4_es_insert_extent(inode, map->m_lblk, map->m_len, in ext4_map_blocks()
651 up_write((&EXT4_I(inode)->i_data_sem)); in ext4_map_blocks()
653 ret = check_block_validity(inode, map); in ext4_map_blocks()
691 static int _ext4_get_block(struct inode *inode, sector_t iblock, in _ext4_get_block() argument
699 if (ext4_has_inline_data(inode)) in _ext4_get_block()
703 map.m_len = bh->b_size >> inode->i_blkbits; in _ext4_get_block()
709 dio_credits = ext4_chunk_trans_blocks(inode, map.m_len); in _ext4_get_block()
710 handle = ext4_journal_start(inode, EXT4_HT_MAP_BLOCKS, in _ext4_get_block()
719 ret = ext4_map_blocks(handle, inode, &map, flags); in _ext4_get_block()
721 ext4_io_end_t *io_end = ext4_inode_aio(inode); in _ext4_get_block()
723 map_bh(bh, inode->i_sb, map.m_pblk); in _ext4_get_block()
725 if (IS_DAX(inode) && buffer_unwritten(bh)) { in _ext4_get_block()
732 bh->b_assoc_map = inode->i_mapping; in _ext4_get_block()
737 bh->b_size = inode->i_sb->s_blocksize * map.m_len; in _ext4_get_block()
745 int ext4_get_block(struct inode *inode, sector_t iblock, in ext4_get_block() argument
748 return _ext4_get_block(inode, iblock, bh, in ext4_get_block()
755 struct buffer_head *ext4_getblk(handle_t *handle, struct inode *inode, in ext4_getblk() argument
767 err = ext4_map_blocks(handle, inode, &map, map_flags); in ext4_getblk()
774 bh = sb_getblk(inode->i_sb, map.m_pblk); in ext4_getblk()
796 memset(bh->b_data, 0, inode->i_sb->s_blocksize); in ext4_getblk()
801 err = ext4_handle_dirty_metadata(handle, inode, bh); in ext4_getblk()
812 struct buffer_head *ext4_bread(handle_t *handle, struct inode *inode, in ext4_bread() argument
817 bh = ext4_getblk(handle, inode, block, map_flags); in ext4_bread()
910 static int ext4_get_block_write_nolock(struct inode *inode, sector_t iblock,
919 struct inode *inode = page->mapping->host; in ext4_block_write_begin() local
923 unsigned blocksize = inode->i_sb->s_blocksize; in ext4_block_write_begin()
953 err = get_block(inode, block, bh, 1); in ext4_block_write_begin()
981 decrypt = ext4_encrypted_inode(inode) && in ext4_block_write_begin()
982 S_ISREG(inode->i_mode); in ext4_block_write_begin()
1005 struct inode *inode = mapping->host; in ext4_write_begin() local
1013 trace_ext4_write_begin(inode, pos, len, flags); in ext4_write_begin()
1018 needed_blocks = ext4_writepage_trans_blocks(inode) + 1; in ext4_write_begin()
1023 if (ext4_test_inode_state(inode, EXT4_STATE_MAY_INLINE_DATA)) { in ext4_write_begin()
1024 ret = ext4_try_to_write_inline_data(mapping, inode, pos, len, in ext4_write_begin()
1046 handle = ext4_journal_start(inode, EXT4_HT_WRITE_PAGE, needed_blocks); in ext4_write_begin()
1064 if (ext4_should_dioread_nolock(inode)) in ext4_write_begin()
1071 if (ext4_should_dioread_nolock(inode)) in ext4_write_begin()
1076 if (!ret && ext4_should_journal_data(inode)) { in ext4_write_begin()
1092 if (pos + len > inode->i_size && ext4_can_truncate(inode)) in ext4_write_begin()
1093 ext4_orphan_add(handle, inode); in ext4_write_begin()
1096 if (pos + len > inode->i_size) { in ext4_write_begin()
1097 ext4_truncate_failed_write(inode); in ext4_write_begin()
1104 if (inode->i_nlink) in ext4_write_begin()
1105 ext4_orphan_del(NULL, inode); in ext4_write_begin()
1109 ext4_should_retry_alloc(inode->i_sb, &retries)) in ext4_write_begin()
1144 struct inode *inode = mapping->host; in ext4_write_end() local
1145 loff_t old_size = inode->i_size; in ext4_write_end()
1149 trace_ext4_write_end(inode, pos, len, copied); in ext4_write_end()
1150 if (ext4_test_inode_state(inode, EXT4_STATE_ORDERED_MODE)) { in ext4_write_end()
1151 ret = ext4_jbd2_file_inode(handle, inode); in ext4_write_end()
1159 if (ext4_has_inline_data(inode)) { in ext4_write_end()
1160 ret = ext4_write_inline_data_end(inode, pos, len, in ext4_write_end()
1172 i_size_changed = ext4_update_inode_size(inode, pos + copied); in ext4_write_end()
1177 pagecache_isize_extended(inode, old_size, pos); in ext4_write_end()
1185 ext4_mark_inode_dirty(handle, inode); in ext4_write_end()
1187 if (pos + len > inode->i_size && ext4_can_truncate(inode)) in ext4_write_end()
1192 ext4_orphan_add(handle, inode); in ext4_write_end()
1198 if (pos + len > inode->i_size) { in ext4_write_end()
1199 ext4_truncate_failed_write(inode); in ext4_write_end()
1205 if (inode->i_nlink) in ext4_write_end()
1206 ext4_orphan_del(NULL, inode); in ext4_write_end()
1250 struct inode *inode = mapping->host; in ext4_journalled_write_end() local
1251 loff_t old_size = inode->i_size; in ext4_journalled_write_end()
1257 trace_ext4_journalled_write_end(inode, pos, len, copied); in ext4_journalled_write_end()
1263 if (ext4_has_inline_data(inode)) in ext4_journalled_write_end()
1264 copied = ext4_write_inline_data_end(inode, pos, len, in ext4_journalled_write_end()
1278 size_changed = ext4_update_inode_size(inode, pos + copied); in ext4_journalled_write_end()
1279 ext4_set_inode_state(inode, EXT4_STATE_JDATA); in ext4_journalled_write_end()
1280 EXT4_I(inode)->i_datasync_tid = handle->h_transaction->t_tid; in ext4_journalled_write_end()
1285 pagecache_isize_extended(inode, old_size, pos); in ext4_journalled_write_end()
1288 ret2 = ext4_mark_inode_dirty(handle, inode); in ext4_journalled_write_end()
1293 if (pos + len > inode->i_size && ext4_can_truncate(inode)) in ext4_journalled_write_end()
1298 ext4_orphan_add(handle, inode); in ext4_journalled_write_end()
1303 if (pos + len > inode->i_size) { in ext4_journalled_write_end()
1304 ext4_truncate_failed_write(inode); in ext4_journalled_write_end()
1310 if (inode->i_nlink) in ext4_journalled_write_end()
1311 ext4_orphan_del(NULL, inode); in ext4_journalled_write_end()
1320 static int ext4_da_reserve_space(struct inode *inode) in ext4_da_reserve_space() argument
1322 struct ext4_sb_info *sbi = EXT4_SB(inode->i_sb); in ext4_da_reserve_space()
1323 struct ext4_inode_info *ei = EXT4_I(inode); in ext4_da_reserve_space()
1331 ret = dquot_reserve_block(inode, EXT4_C2B(sbi, 1)); in ext4_da_reserve_space()
1338 dquot_release_reservation_block(inode, EXT4_C2B(sbi, 1)); in ext4_da_reserve_space()
1342 trace_ext4_da_reserve_space(inode); in ext4_da_reserve_space()
1348 static void ext4_da_release_space(struct inode *inode, int to_free) in ext4_da_release_space() argument
1350 struct ext4_sb_info *sbi = EXT4_SB(inode->i_sb); in ext4_da_release_space()
1351 struct ext4_inode_info *ei = EXT4_I(inode); in ext4_da_release_space()
1356 spin_lock(&EXT4_I(inode)->i_block_reservation_lock); in ext4_da_release_space()
1358 trace_ext4_da_release_space(inode, to_free); in ext4_da_release_space()
1366 ext4_warning(inode->i_sb, "ext4_da_release_space: " in ext4_da_release_space()
1368 "data blocks", inode->i_ino, to_free, in ext4_da_release_space()
1378 spin_unlock(&EXT4_I(inode)->i_block_reservation_lock); in ext4_da_release_space()
1380 dquot_release_reservation_block(inode, EXT4_C2B(sbi, to_free)); in ext4_da_release_space()
1390 struct inode *inode = page->mapping->host; in ext4_da_page_release_reservation() local
1391 struct ext4_sb_info *sbi = EXT4_SB(inode->i_sb); in ext4_da_page_release_reservation()
1412 (PAGE_CACHE_SHIFT - inode->i_blkbits); in ext4_da_page_release_reservation()
1413 lblk += (curr_off >> inode->i_blkbits) - in ext4_da_page_release_reservation()
1415 ext4_es_remove_extent(inode, lblk, contiguous_blks); in ext4_da_page_release_reservation()
1422 lblk = page->index << (PAGE_CACHE_SHIFT - inode->i_blkbits); in ext4_da_page_release_reservation()
1423 lblk += (curr_off >> inode->i_blkbits) - contiguous_blks; in ext4_da_page_release_reservation()
1424 ext4_es_remove_extent(inode, lblk, contiguous_blks); in ext4_da_page_release_reservation()
1431 lblk = (page->index << (PAGE_CACHE_SHIFT - inode->i_blkbits)) + in ext4_da_page_release_reservation()
1434 !ext4_find_delalloc_cluster(inode, lblk)) in ext4_da_page_release_reservation()
1435 ext4_da_release_space(inode, 1); in ext4_da_page_release_reservation()
1446 struct inode *inode; member
1467 struct inode *inode = mpd->inode; in mpage_release_unused_pages() local
1468 struct address_space *mapping = inode->i_mapping; in mpage_release_unused_pages()
1478 start = index << (PAGE_CACHE_SHIFT - inode->i_blkbits); in mpage_release_unused_pages()
1479 last = end << (PAGE_CACHE_SHIFT - inode->i_blkbits); in mpage_release_unused_pages()
1480 ext4_es_remove_extent(inode, start, last - start + 1); in mpage_release_unused_pages()
1505 static void ext4_print_free_blocks(struct inode *inode) in ext4_print_free_blocks() argument
1507 struct ext4_sb_info *sbi = EXT4_SB(inode->i_sb); in ext4_print_free_blocks()
1508 struct super_block *sb = inode->i_sb; in ext4_print_free_blocks()
1509 struct ext4_inode_info *ei = EXT4_I(inode); in ext4_print_free_blocks()
1512 EXT4_C2B(EXT4_SB(inode->i_sb), in ext4_print_free_blocks()
1538 static int ext4_da_map_blocks(struct inode *inode, sector_t iblock, in ext4_da_map_blocks() argument
1551 if (invalid_block < ext4_blocks_count(EXT4_SB(inode->i_sb)->s_es)) in ext4_da_map_blocks()
1556 "logical block %lu\n", inode->i_ino, map->m_len, in ext4_da_map_blocks()
1560 if (ext4_es_lookup_extent(inode, iblock, &es)) { in ext4_da_map_blocks()
1563 down_read(&EXT4_I(inode)->i_data_sem); in ext4_da_map_blocks()
1572 map_bh(bh, inode->i_sb, invalid_block); in ext4_da_map_blocks()
1591 ext4_map_blocks_es_recheck(NULL, inode, map, &orig_map, 0); in ext4_da_map_blocks()
1600 down_read(&EXT4_I(inode)->i_data_sem); in ext4_da_map_blocks()
1601 if (ext4_has_inline_data(inode)) in ext4_da_map_blocks()
1603 else if (ext4_test_inode_flag(inode, EXT4_INODE_EXTENTS)) in ext4_da_map_blocks()
1604 retval = ext4_ext_map_blocks(NULL, inode, map, 0); in ext4_da_map_blocks()
1606 retval = ext4_ind_map_blocks(NULL, inode, map, 0); in ext4_da_map_blocks()
1620 if (EXT4_SB(inode->i_sb)->s_cluster_ratio == 1 || in ext4_da_map_blocks()
1621 !ext4_find_delalloc_cluster(inode, map->m_lblk)) { in ext4_da_map_blocks()
1622 ret = ext4_da_reserve_space(inode); in ext4_da_map_blocks()
1630 ret = ext4_es_insert_extent(inode, map->m_lblk, map->m_len, in ext4_da_map_blocks()
1637 map_bh(bh, inode->i_sb, invalid_block); in ext4_da_map_blocks()
1645 ext4_warning(inode->i_sb, in ext4_da_map_blocks()
1648 inode->i_ino, retval, map->m_len); in ext4_da_map_blocks()
1654 ret = ext4_es_insert_extent(inode, map->m_lblk, map->m_len, in ext4_da_map_blocks()
1661 up_read((&EXT4_I(inode)->i_data_sem)); in ext4_da_map_blocks()
1678 int ext4_da_get_block_prep(struct inode *inode, sector_t iblock, in ext4_da_get_block_prep() argument
1685 BUG_ON(bh->b_size != inode->i_sb->s_blocksize); in ext4_da_get_block_prep()
1695 ret = ext4_da_map_blocks(inode, iblock, &map, bh); in ext4_da_get_block_prep()
1699 map_bh(bh, inode->i_sb, map.m_pblk); in ext4_da_get_block_prep()
1731 struct inode *inode = mapping->host; in __ext4_journalled_writepage() local
1735 int inline_data = ext4_has_inline_data(inode); in __ext4_journalled_writepage()
1742 BUG_ON(len > ext4_get_max_inline_size(inode)); in __ext4_journalled_writepage()
1743 inode_bh = ext4_journalled_write_inline_data(inode, len, page); in __ext4_journalled_writepage()
1763 handle = ext4_journal_start(inode, EXT4_HT_WRITE_PAGE, in __ext4_journalled_writepage()
1764 ext4_writepage_trans_blocks(inode)); in __ext4_journalled_writepage()
1785 err = ext4_handle_dirty_metadata(handle, inode, inode_bh); in __ext4_journalled_writepage()
1796 EXT4_I(inode)->i_datasync_tid = handle->h_transaction->t_tid; in __ext4_journalled_writepage()
1801 if (!ext4_has_inline_data(inode)) in __ext4_journalled_writepage()
1804 ext4_set_inode_state(inode, EXT4_STATE_JDATA); in __ext4_journalled_writepage()
1860 struct inode *inode = page->mapping->host; in ext4_writepage() local
1865 size = i_size_read(inode); in ext4_writepage()
1893 (inode->i_sb->s_blocksize == PAGE_CACHE_SIZE)) { in ext4_writepage()
1907 if (PageChecked(page) && ext4_should_journal_data(inode)) in ext4_writepage()
1915 io_submit.io_end = ext4_init_io_end(inode, GFP_NOFS); in ext4_writepage()
1931 loff_t size = i_size_read(mpd->inode); in mpage_submit_page()
2027 struct inode *inode = mpd->inode; in mpage_process_page_bufs() local
2029 ext4_lblk_t blocks = (i_size_read(inode) + (1 << inode->i_blkbits) - 1) in mpage_process_page_bufs()
2030 >> inode->i_blkbits; in mpage_process_page_bufs()
2070 struct inode *inode = mpd->inode; in mpage_map_and_submit_buffers() local
2072 int bpp_bits = PAGE_CACHE_SHIFT - inode->i_blkbits; in mpage_map_and_submit_buffers()
2085 nr_pages = pagevec_lookup(&pvec, inode->i_mapping, start, in mpage_map_and_submit_buffers()
2152 struct inode *inode = mpd->inode; in mpage_map_one_extent() local
2157 trace_ext4_da_write_pages_extent(inode, map); in mpage_map_one_extent()
2175 dioread_nolock = ext4_should_dioread_nolock(inode); in mpage_map_one_extent()
2181 err = ext4_map_blocks(handle, inode, map, get_blocks_flags); in mpage_map_one_extent()
2190 ext4_set_io_unwritten_flag(inode, mpd->io_submit.io_end); in mpage_map_one_extent()
2195 struct block_device *bdev = inode->i_sb->s_bdev; in mpage_map_one_extent()
2228 struct inode *inode = mpd->inode; in mpage_map_and_submit_extent() local
2235 ((loff_t)map->m_lblk) << inode->i_blkbits; in mpage_map_and_submit_extent()
2239 struct super_block *sb = inode->i_sb; in mpage_map_and_submit_extent()
2258 inode->i_ino, in mpage_map_and_submit_extent()
2265 ext4_print_free_blocks(inode); in mpage_map_and_submit_extent()
2286 if (disksize > EXT4_I(inode)->i_disksize) { in mpage_map_and_submit_extent()
2290 down_write(&EXT4_I(inode)->i_data_sem); in mpage_map_and_submit_extent()
2291 i_size = i_size_read(inode); in mpage_map_and_submit_extent()
2294 if (disksize > EXT4_I(inode)->i_disksize) in mpage_map_and_submit_extent()
2295 EXT4_I(inode)->i_disksize = disksize; in mpage_map_and_submit_extent()
2296 err2 = ext4_mark_inode_dirty(handle, inode); in mpage_map_and_submit_extent()
2297 up_write(&EXT4_I(inode)->i_data_sem); in mpage_map_and_submit_extent()
2299 ext4_error(inode->i_sb, in mpage_map_and_submit_extent()
2301 inode->i_ino); in mpage_map_and_submit_extent()
2315 static int ext4_da_writepages_trans_blocks(struct inode *inode) in ext4_da_writepages_trans_blocks() argument
2317 int bpp = ext4_journal_blocks_per_page(inode); in ext4_da_writepages_trans_blocks()
2319 return ext4_meta_trans_blocks(inode, in ext4_da_writepages_trans_blocks()
2343 struct address_space *mapping = mpd->inode->i_mapping; in mpage_prepare_extent_to_map()
2351 int blkbits = mpd->inode->i_blkbits; in mpage_prepare_extent_to_map()
2456 struct inode *inode = mapping->host; in ext4_writepages() local
2463 trace_ext4_writepages(inode, wbc); in ext4_writepages()
2473 if (ext4_should_journal_data(inode)) { in ext4_writepages()
2497 if (ext4_should_dioread_nolock(inode)) { in ext4_writepages()
2502 rsv_blocks = 1 + (PAGE_CACHE_SIZE >> inode->i_blkbits); in ext4_writepages()
2510 if (ext4_has_inline_data(inode)) { in ext4_writepages()
2512 handle = ext4_journal_start(inode, EXT4_HT_INODE, 1); in ext4_writepages()
2517 BUG_ON(ext4_test_inode_state(inode, in ext4_writepages()
2519 ext4_destroy_inline_data(handle, inode); in ext4_writepages()
2537 mpd.inode = inode; in ext4_writepages()
2547 mpd.io_submit.io_end = ext4_init_io_end(inode, GFP_KERNEL); in ext4_writepages()
2560 BUG_ON(ext4_should_journal_data(inode)); in ext4_writepages()
2561 needed_blocks = ext4_da_writepages_trans_blocks(inode); in ext4_writepages()
2564 handle = ext4_journal_start_with_reserve(inode, in ext4_writepages()
2568 ext4_msg(inode->i_sb, KERN_CRIT, "%s: jbd2_start: " in ext4_writepages()
2570 wbc->nr_to_write, inode->i_ino, ret); in ext4_writepages()
2576 trace_ext4_da_write_pages(inode, mpd.first_page, mpd.wbc); in ext4_writepages()
2631 trace_ext4_writepages_result(inode, wbc, ret, in ext4_writepages()
2671 static int ext4_da_write_credits(struct inode *inode, loff_t pos, unsigned len) in ext4_da_write_credits() argument
2673 if (likely(ext4_has_feature_large_file(inode->i_sb))) in ext4_da_write_credits()
2690 struct inode *inode = mapping->host; in ext4_da_write_begin() local
2695 if (ext4_nonda_switch(inode->i_sb)) { in ext4_da_write_begin()
2701 trace_ext4_da_write_begin(inode, pos, len, flags); in ext4_da_write_begin()
2703 if (ext4_test_inode_state(inode, EXT4_STATE_MAY_INLINE_DATA)) { in ext4_da_write_begin()
2704 ret = ext4_da_write_inline_data_begin(mapping, inode, in ext4_da_write_begin()
2733 handle = ext4_journal_start(inode, EXT4_HT_WRITE_PAGE, in ext4_da_write_begin()
2734 ext4_da_write_credits(inode, pos, len)); in ext4_da_write_begin()
2765 if (pos + len > inode->i_size) in ext4_da_write_begin()
2766 ext4_truncate_failed_write(inode); in ext4_da_write_begin()
2769 ext4_should_retry_alloc(inode->i_sb, &retries)) in ext4_da_write_begin()
2788 struct inode *inode = page->mapping->host; in ext4_da_should_update_i_disksize() local
2793 idx = offset >> inode->i_blkbits; in ext4_da_should_update_i_disksize()
2808 struct inode *inode = mapping->host; in ext4_da_write_end() local
2819 trace_ext4_da_write_end(inode, pos, len, copied); in ext4_da_write_end()
2829 if (copied && new_i_size > EXT4_I(inode)->i_disksize) { in ext4_da_write_end()
2830 if (ext4_has_inline_data(inode) || in ext4_da_write_end()
2832 ext4_update_i_disksize(inode, new_i_size); in ext4_da_write_end()
2837 ext4_mark_inode_dirty(handle, inode); in ext4_da_write_end()
2842 ext4_test_inode_state(inode, EXT4_STATE_MAY_INLINE_DATA) && in ext4_da_write_end()
2843 ext4_has_inline_data(inode)) in ext4_da_write_end()
2844 ret2 = ext4_da_write_inline_data_end(inode, pos, len, copied, in ext4_da_write_end()
2881 int ext4_alloc_da_blocks(struct inode *inode) in ext4_alloc_da_blocks() argument
2883 trace_ext4_alloc_da_blocks(inode); in ext4_alloc_da_blocks()
2885 if (!EXT4_I(inode)->i_reserved_data_blocks) in ext4_alloc_da_blocks()
2919 return filemap_flush(inode->i_mapping); in ext4_alloc_da_blocks()
2938 struct inode *inode = mapping->host; in ext4_bmap() local
2945 if (ext4_has_inline_data(inode)) in ext4_bmap()
2949 test_opt(inode->i_sb, DELALLOC)) { in ext4_bmap()
2958 if (EXT4_JOURNAL(inode) && in ext4_bmap()
2959 ext4_test_inode_state(inode, EXT4_STATE_JDATA)) { in ext4_bmap()
2978 ext4_clear_inode_state(inode, EXT4_STATE_JDATA); in ext4_bmap()
2979 journal = EXT4_JOURNAL(inode); in ext4_bmap()
2994 struct inode *inode = page->mapping->host; in ext4_readpage() local
2998 if (ext4_has_inline_data(inode)) in ext4_readpage()
2999 ret = ext4_readpage_inline(inode, page); in ext4_readpage()
3011 struct inode *inode = mapping->host; in ext4_readpages() local
3014 if (ext4_has_inline_data(inode)) in ext4_readpages()
3076 int ext4_get_block_write(struct inode *inode, sector_t iblock, in ext4_get_block_write() argument
3080 inode->i_ino, create); in ext4_get_block_write()
3081 return _ext4_get_block(inode, iblock, bh_result, in ext4_get_block_write()
3085 static int ext4_get_block_write_nolock(struct inode *inode, sector_t iblock, in ext4_get_block_write_nolock() argument
3089 inode->i_ino, create); in ext4_get_block_write_nolock()
3090 return _ext4_get_block(inode, iblock, bh_result, in ext4_get_block_write_nolock()
3094 int ext4_get_block_dax(struct inode *inode, sector_t iblock, in ext4_get_block_dax() argument
3101 inode->i_ino, create); in ext4_get_block_dax()
3102 return _ext4_get_block(inode, iblock, bh_result, flags); in ext4_get_block_dax()
3116 iocb->private, io_end->inode->i_ino, iocb, offset, in ext4_end_io_dio()
3148 struct inode *inode = file->f_mapping->host; in ext4_ext_direct_IO() local
3158 if (iov_iter_rw(iter) != WRITE || final_size > inode->i_size) in ext4_ext_direct_IO()
3169 inode_dio_begin(inode); in ext4_ext_direct_IO()
3175 down_read(&EXT4_I(inode)->i_data_sem); in ext4_ext_direct_IO()
3176 mutex_unlock(&inode->i_mutex); in ext4_ext_direct_IO()
3199 ext4_inode_aio_set(inode, NULL); in ext4_ext_direct_IO()
3201 io_end = ext4_init_io_end(inode, GFP_NOFS); in ext4_ext_direct_IO()
3216 ext4_inode_aio_set(inode, io_end); in ext4_ext_direct_IO()
3226 BUG_ON(ext4_encrypted_inode(inode) && S_ISREG(inode->i_mode)); in ext4_ext_direct_IO()
3228 if (IS_DAX(inode)) in ext4_ext_direct_IO()
3229 ret = dax_do_io(iocb, inode, iter, offset, get_block_func, in ext4_ext_direct_IO()
3232 ret = __blockdev_direct_IO(iocb, inode, in ext4_ext_direct_IO()
3233 inode->i_sb->s_bdev, iter, offset, in ext4_ext_direct_IO()
3245 ext4_inode_aio_set(inode, NULL); in ext4_ext_direct_IO()
3258 if (ret > 0 && !overwrite && ext4_test_inode_state(inode, in ext4_ext_direct_IO()
3265 err = ext4_convert_unwritten_extents(NULL, inode, in ext4_ext_direct_IO()
3269 ext4_clear_inode_state(inode, EXT4_STATE_DIO_UNWRITTEN); in ext4_ext_direct_IO()
3274 inode_dio_end(inode); in ext4_ext_direct_IO()
3277 up_read(&EXT4_I(inode)->i_data_sem); in ext4_ext_direct_IO()
3278 mutex_lock(&inode->i_mutex); in ext4_ext_direct_IO()
3288 struct inode *inode = file->f_mapping->host; in ext4_direct_IO() local
3293 if (ext4_encrypted_inode(inode) && S_ISREG(inode->i_mode)) in ext4_direct_IO()
3300 if (ext4_should_journal_data(inode)) in ext4_direct_IO()
3304 if (ext4_has_inline_data(inode)) in ext4_direct_IO()
3307 trace_ext4_direct_IO_enter(inode, offset, count, iov_iter_rw(iter)); in ext4_direct_IO()
3308 if (ext4_test_inode_flag(inode, EXT4_INODE_EXTENTS)) in ext4_direct_IO()
3312 trace_ext4_direct_IO_exit(inode, offset, count, iov_iter_rw(iter), ret); in ext4_direct_IO()
3383 void ext4_set_aops(struct inode *inode) in ext4_set_aops() argument
3385 switch (ext4_inode_journal_mode(inode)) { in ext4_set_aops()
3387 ext4_set_inode_state(inode, EXT4_STATE_ORDERED_MODE); in ext4_set_aops()
3390 ext4_clear_inode_state(inode, EXT4_STATE_ORDERED_MODE); in ext4_set_aops()
3393 inode->i_mapping->a_ops = &ext4_journalled_aops; in ext4_set_aops()
3398 if (test_opt(inode->i_sb, DELALLOC)) in ext4_set_aops()
3399 inode->i_mapping->a_ops = &ext4_da_aops; in ext4_set_aops()
3401 inode->i_mapping->a_ops = &ext4_aops; in ext4_set_aops()
3411 struct inode *inode = mapping->host; in __ext4_block_zero_page_range() local
3421 blocksize = inode->i_sb->s_blocksize; in __ext4_block_zero_page_range()
3423 iblock = index << (PAGE_CACHE_SHIFT - inode->i_sb->s_blocksize_bits); in __ext4_block_zero_page_range()
3442 ext4_get_block(inode, iblock, bh, 0); in __ext4_block_zero_page_range()
3461 if (S_ISREG(inode->i_mode) && in __ext4_block_zero_page_range()
3462 ext4_encrypted_inode(inode)) { in __ext4_block_zero_page_range()
3464 BUG_ON(!ext4_has_encryption_key(inode)); in __ext4_block_zero_page_range()
3469 if (ext4_should_journal_data(inode)) { in __ext4_block_zero_page_range()
3478 if (ext4_should_journal_data(inode)) { in __ext4_block_zero_page_range()
3479 err = ext4_handle_dirty_metadata(handle, inode, bh); in __ext4_block_zero_page_range()
3483 if (ext4_test_inode_state(inode, EXT4_STATE_ORDERED_MODE)) in __ext4_block_zero_page_range()
3484 err = ext4_jbd2_file_inode(handle, inode); in __ext4_block_zero_page_range()
3503 struct inode *inode = mapping->host; in ext4_block_zero_page_range() local
3505 unsigned blocksize = inode->i_sb->s_blocksize; in ext4_block_zero_page_range()
3515 if (IS_DAX(inode)) in ext4_block_zero_page_range()
3516 return dax_zero_page_range(inode, from, length, ext4_get_block); in ext4_block_zero_page_range()
3532 struct inode *inode = mapping->host; in ext4_block_truncate_page() local
3534 blocksize = inode->i_sb->s_blocksize; in ext4_block_truncate_page()
3540 int ext4_zero_partial_blocks(handle_t *handle, struct inode *inode, in ext4_zero_partial_blocks() argument
3543 struct super_block *sb = inode->i_sb; in ext4_zero_partial_blocks()
3544 struct address_space *mapping = inode->i_mapping; in ext4_zero_partial_blocks()
3578 int ext4_can_truncate(struct inode *inode) in ext4_can_truncate() argument
3580 if (S_ISREG(inode->i_mode)) in ext4_can_truncate()
3582 if (S_ISDIR(inode->i_mode)) in ext4_can_truncate()
3584 if (S_ISLNK(inode->i_mode)) in ext4_can_truncate()
3585 return !ext4_inode_is_fast_symlink(inode); in ext4_can_truncate()
3595 int ext4_update_disksize_before_punch(struct inode *inode, loff_t offset, in ext4_update_disksize_before_punch() argument
3599 loff_t size = i_size_read(inode); in ext4_update_disksize_before_punch()
3601 WARN_ON(!mutex_is_locked(&inode->i_mutex)); in ext4_update_disksize_before_punch()
3605 if (EXT4_I(inode)->i_disksize >= size) in ext4_update_disksize_before_punch()
3608 handle = ext4_journal_start(inode, EXT4_HT_MISC, 1); in ext4_update_disksize_before_punch()
3611 ext4_update_i_disksize(inode, size); in ext4_update_disksize_before_punch()
3612 ext4_mark_inode_dirty(handle, inode); in ext4_update_disksize_before_punch()
3629 int ext4_punch_hole(struct inode *inode, loff_t offset, loff_t length) in ext4_punch_hole() argument
3631 struct super_block *sb = inode->i_sb; in ext4_punch_hole()
3633 struct address_space *mapping = inode->i_mapping; in ext4_punch_hole()
3639 if (!S_ISREG(inode->i_mode)) in ext4_punch_hole()
3642 trace_ext4_punch_hole(inode, offset, length, 0); in ext4_punch_hole()
3655 mutex_lock(&inode->i_mutex); in ext4_punch_hole()
3658 if (offset >= inode->i_size) in ext4_punch_hole()
3665 if (offset + length > inode->i_size) { in ext4_punch_hole()
3666 length = inode->i_size + in ext4_punch_hole()
3667 PAGE_CACHE_SIZE - (inode->i_size & (PAGE_CACHE_SIZE - 1)) - in ext4_punch_hole()
3677 ret = ext4_inode_attach_jinode(inode); in ext4_punch_hole()
3684 ext4_inode_block_unlocked_dio(inode); in ext4_punch_hole()
3685 inode_dio_wait(inode); in ext4_punch_hole()
3691 down_write(&EXT4_I(inode)->i_mmap_sem); in ext4_punch_hole()
3697 ret = ext4_update_disksize_before_punch(inode, offset, length); in ext4_punch_hole()
3700 truncate_pagecache_range(inode, first_block_offset, in ext4_punch_hole()
3704 if (ext4_test_inode_flag(inode, EXT4_INODE_EXTENTS)) in ext4_punch_hole()
3705 credits = ext4_writepage_trans_blocks(inode); in ext4_punch_hole()
3707 credits = ext4_blocks_for_truncate(inode); in ext4_punch_hole()
3708 handle = ext4_journal_start(inode, EXT4_HT_TRUNCATE, credits); in ext4_punch_hole()
3715 ret = ext4_zero_partial_blocks(handle, inode, offset, in ext4_punch_hole()
3728 down_write(&EXT4_I(inode)->i_data_sem); in ext4_punch_hole()
3729 ext4_discard_preallocations(inode); in ext4_punch_hole()
3731 ret = ext4_es_remove_extent(inode, first_block, in ext4_punch_hole()
3734 up_write(&EXT4_I(inode)->i_data_sem); in ext4_punch_hole()
3738 if (ext4_test_inode_flag(inode, EXT4_INODE_EXTENTS)) in ext4_punch_hole()
3739 ret = ext4_ext_remove_space(inode, first_block, in ext4_punch_hole()
3742 ret = ext4_ind_remove_space(handle, inode, first_block, in ext4_punch_hole()
3745 up_write(&EXT4_I(inode)->i_data_sem); in ext4_punch_hole()
3746 if (IS_SYNC(inode)) in ext4_punch_hole()
3749 inode->i_mtime = inode->i_ctime = ext4_current_time(inode); in ext4_punch_hole()
3750 ext4_mark_inode_dirty(handle, inode); in ext4_punch_hole()
3754 up_write(&EXT4_I(inode)->i_mmap_sem); in ext4_punch_hole()
3755 ext4_inode_resume_unlocked_dio(inode); in ext4_punch_hole()
3757 mutex_unlock(&inode->i_mutex); in ext4_punch_hole()
3761 int ext4_inode_attach_jinode(struct inode *inode) in ext4_inode_attach_jinode() argument
3763 struct ext4_inode_info *ei = EXT4_I(inode); in ext4_inode_attach_jinode()
3766 if (ei->jinode || !EXT4_SB(inode->i_sb)->s_journal) in ext4_inode_attach_jinode()
3770 spin_lock(&inode->i_lock); in ext4_inode_attach_jinode()
3773 spin_unlock(&inode->i_lock); in ext4_inode_attach_jinode()
3777 jbd2_journal_init_jbd_inode(ei->jinode, inode); in ext4_inode_attach_jinode()
3780 spin_unlock(&inode->i_lock); in ext4_inode_attach_jinode()
3814 void ext4_truncate(struct inode *inode) in ext4_truncate() argument
3816 struct ext4_inode_info *ei = EXT4_I(inode); in ext4_truncate()
3819 struct address_space *mapping = inode->i_mapping; in ext4_truncate()
3826 if (!(inode->i_state & (I_NEW|I_FREEING))) in ext4_truncate()
3827 WARN_ON(!mutex_is_locked(&inode->i_mutex)); in ext4_truncate()
3828 trace_ext4_truncate_enter(inode); in ext4_truncate()
3830 if (!ext4_can_truncate(inode)) in ext4_truncate()
3833 ext4_clear_inode_flag(inode, EXT4_INODE_EOFBLOCKS); in ext4_truncate()
3835 if (inode->i_size == 0 && !test_opt(inode->i_sb, NO_AUTO_DA_ALLOC)) in ext4_truncate()
3836 ext4_set_inode_state(inode, EXT4_STATE_DA_ALLOC_CLOSE); in ext4_truncate()
3838 if (ext4_has_inline_data(inode)) { in ext4_truncate()
3841 ext4_inline_data_truncate(inode, &has_inline); in ext4_truncate()
3847 if (inode->i_size & (inode->i_sb->s_blocksize - 1)) { in ext4_truncate()
3848 if (ext4_inode_attach_jinode(inode) < 0) in ext4_truncate()
3852 if (ext4_test_inode_flag(inode, EXT4_INODE_EXTENTS)) in ext4_truncate()
3853 credits = ext4_writepage_trans_blocks(inode); in ext4_truncate()
3855 credits = ext4_blocks_for_truncate(inode); in ext4_truncate()
3857 handle = ext4_journal_start(inode, EXT4_HT_TRUNCATE, credits); in ext4_truncate()
3859 ext4_std_error(inode->i_sb, PTR_ERR(handle)); in ext4_truncate()
3863 if (inode->i_size & (inode->i_sb->s_blocksize - 1)) in ext4_truncate()
3864 ext4_block_truncate_page(handle, mapping, inode->i_size); in ext4_truncate()
3875 if (ext4_orphan_add(handle, inode)) in ext4_truncate()
3878 down_write(&EXT4_I(inode)->i_data_sem); in ext4_truncate()
3880 ext4_discard_preallocations(inode); in ext4_truncate()
3882 if (ext4_test_inode_flag(inode, EXT4_INODE_EXTENTS)) in ext4_truncate()
3883 ext4_ext_truncate(handle, inode); in ext4_truncate()
3885 ext4_ind_truncate(handle, inode); in ext4_truncate()
3889 if (IS_SYNC(inode)) in ext4_truncate()
3900 if (inode->i_nlink) in ext4_truncate()
3901 ext4_orphan_del(handle, inode); in ext4_truncate()
3903 inode->i_mtime = inode->i_ctime = ext4_current_time(inode); in ext4_truncate()
3904 ext4_mark_inode_dirty(handle, inode); in ext4_truncate()
3907 trace_ext4_truncate_exit(inode); in ext4_truncate()
3916 static int __ext4_get_inode_loc(struct inode *inode, in __ext4_get_inode_loc() argument
3921 struct super_block *sb = inode->i_sb; in __ext4_get_inode_loc()
3926 if (!ext4_valid_inum(sb, inode->i_ino)) in __ext4_get_inode_loc()
3929 iloc->block_group = (inode->i_ino - 1) / EXT4_INODES_PER_GROUP(sb); in __ext4_get_inode_loc()
3938 inode_offset = ((inode->i_ino - 1) % in __ext4_get_inode_loc()
4036 trace_ext4_load_inode(inode); in __ext4_get_inode_loc()
4042 EXT4_ERROR_INODE_BLOCK(inode, block, in __ext4_get_inode_loc()
4053 int ext4_get_inode_loc(struct inode *inode, struct ext4_iloc *iloc) in ext4_get_inode_loc() argument
4056 return __ext4_get_inode_loc(inode, iloc, in ext4_get_inode_loc()
4057 !ext4_test_inode_state(inode, EXT4_STATE_XATTR)); in ext4_get_inode_loc()
4060 void ext4_set_inode_flags(struct inode *inode) in ext4_set_inode_flags() argument
4062 unsigned int flags = EXT4_I(inode)->i_flags; in ext4_set_inode_flags()
4075 if (test_opt(inode->i_sb, DAX)) in ext4_set_inode_flags()
4077 inode_set_flags(inode, new_fl, in ext4_set_inode_flags()
4110 struct inode *inode = &(ei->vfs_inode); in ext4_inode_blocks() local
4111 struct super_block *sb = inode->i_sb; in ext4_inode_blocks()
4117 if (ext4_test_inode_flag(inode, EXT4_INODE_HUGE_FILE)) { in ext4_inode_blocks()
4119 return i_blocks << (inode->i_blkbits - 9); in ext4_inode_blocks()
4128 static inline void ext4_iget_extra_inode(struct inode *inode, in ext4_iget_extra_inode() argument
4135 ext4_set_inode_state(inode, EXT4_STATE_XATTR); in ext4_iget_extra_inode()
4136 ext4_find_inline_data_nolock(inode); in ext4_iget_extra_inode()
4138 EXT4_I(inode)->i_inline_off = 0; in ext4_iget_extra_inode()
4141 struct inode *ext4_iget(struct super_block *sb, unsigned long ino) in ext4_iget()
4146 struct inode *inode; in ext4_iget() local
4153 inode = iget_locked(sb, ino); in ext4_iget()
4154 if (!inode) in ext4_iget()
4156 if (!(inode->i_state & I_NEW)) in ext4_iget()
4157 return inode; in ext4_iget()
4159 ei = EXT4_I(inode); in ext4_iget()
4162 ret = __ext4_get_inode_loc(inode, &iloc, 0); in ext4_iget()
4167 if (EXT4_INODE_SIZE(inode->i_sb) > EXT4_GOOD_OLD_INODE_SIZE) { in ext4_iget()
4170 EXT4_INODE_SIZE(inode->i_sb)) { in ext4_iget()
4171 EXT4_ERROR_INODE(inode, "bad extra_isize (%u != %u)", in ext4_iget()
4173 EXT4_INODE_SIZE(inode->i_sb)); in ext4_iget()
4182 struct ext4_sb_info *sbi = EXT4_SB(inode->i_sb); in ext4_iget()
4184 __le32 inum = cpu_to_le32(inode->i_ino); in ext4_iget()
4192 if (!ext4_inode_csum_verify(inode, raw_inode, ei)) { in ext4_iget()
4193 EXT4_ERROR_INODE(inode, "checksum invalid"); in ext4_iget()
4198 inode->i_mode = le16_to_cpu(raw_inode->i_mode); in ext4_iget()
4201 if (!(test_opt(inode->i_sb, NO_UID32))) { in ext4_iget()
4205 i_uid_write(inode, i_uid); in ext4_iget()
4206 i_gid_write(inode, i_gid); in ext4_iget()
4207 set_nlink(inode, le16_to_cpu(raw_inode->i_links_count)); in ext4_iget()
4218 if (inode->i_nlink == 0) { in ext4_iget()
4219 if ((inode->i_mode == 0 || in ext4_iget()
4220 !(EXT4_SB(inode->i_sb)->s_mount_state & EXT4_ORPHAN_FS)) && in ext4_iget()
4234 inode->i_blocks = ext4_inode_blocks(raw_inode, ei); in ext4_iget()
4239 inode->i_size = ext4_isize(raw_inode); in ext4_iget()
4240 ei->i_disksize = inode->i_size; in ext4_iget()
4244 inode->i_generation = le32_to_cpu(raw_inode->i_generation); in ext4_iget()
4280 if (EXT4_INODE_SIZE(inode->i_sb) > EXT4_GOOD_OLD_INODE_SIZE) { in ext4_iget()
4286 ext4_iget_extra_inode(inode, raw_inode, ei); in ext4_iget()
4290 EXT4_INODE_GET_XTIME(i_ctime, inode, raw_inode); in ext4_iget()
4291 EXT4_INODE_GET_XTIME(i_mtime, inode, raw_inode); in ext4_iget()
4292 EXT4_INODE_GET_XTIME(i_atime, inode, raw_inode); in ext4_iget()
4295 if (likely(!test_opt2(inode->i_sb, HURD_COMPAT))) { in ext4_iget()
4296 inode->i_version = le32_to_cpu(raw_inode->i_disk_version); in ext4_iget()
4297 if (EXT4_INODE_SIZE(inode->i_sb) > EXT4_GOOD_OLD_INODE_SIZE) { in ext4_iget()
4299 inode->i_version |= in ext4_iget()
4307 EXT4_ERROR_INODE(inode, "bad extended attribute block %llu", in ext4_iget()
4311 } else if (!ext4_has_inline_data(inode)) { in ext4_iget()
4312 if (ext4_test_inode_flag(inode, EXT4_INODE_EXTENTS)) { in ext4_iget()
4313 if ((S_ISREG(inode->i_mode) || S_ISDIR(inode->i_mode) || in ext4_iget()
4314 (S_ISLNK(inode->i_mode) && in ext4_iget()
4315 !ext4_inode_is_fast_symlink(inode)))) in ext4_iget()
4317 ret = ext4_ext_check_inode(inode); in ext4_iget()
4318 } else if (S_ISREG(inode->i_mode) || S_ISDIR(inode->i_mode) || in ext4_iget()
4319 (S_ISLNK(inode->i_mode) && in ext4_iget()
4320 !ext4_inode_is_fast_symlink(inode))) { in ext4_iget()
4322 ret = ext4_ind_check_inode(inode); in ext4_iget()
4328 if (S_ISREG(inode->i_mode)) { in ext4_iget()
4329 inode->i_op = &ext4_file_inode_operations; in ext4_iget()
4330 inode->i_fop = &ext4_file_operations; in ext4_iget()
4331 ext4_set_aops(inode); in ext4_iget()
4332 } else if (S_ISDIR(inode->i_mode)) { in ext4_iget()
4333 inode->i_op = &ext4_dir_inode_operations; in ext4_iget()
4334 inode->i_fop = &ext4_dir_operations; in ext4_iget()
4335 } else if (S_ISLNK(inode->i_mode)) { in ext4_iget()
4336 if (ext4_encrypted_inode(inode)) { in ext4_iget()
4337 inode->i_op = &ext4_encrypted_symlink_inode_operations; in ext4_iget()
4338 ext4_set_aops(inode); in ext4_iget()
4339 } else if (ext4_inode_is_fast_symlink(inode)) { in ext4_iget()
4340 inode->i_link = (char *)ei->i_data; in ext4_iget()
4341 inode->i_op = &ext4_fast_symlink_inode_operations; in ext4_iget()
4342 nd_terminate_link(ei->i_data, inode->i_size, in ext4_iget()
4345 inode->i_op = &ext4_symlink_inode_operations; in ext4_iget()
4346 ext4_set_aops(inode); in ext4_iget()
4348 } else if (S_ISCHR(inode->i_mode) || S_ISBLK(inode->i_mode) || in ext4_iget()
4349 S_ISFIFO(inode->i_mode) || S_ISSOCK(inode->i_mode)) { in ext4_iget()
4350 inode->i_op = &ext4_special_inode_operations; in ext4_iget()
4352 init_special_inode(inode, inode->i_mode, in ext4_iget()
4355 init_special_inode(inode, inode->i_mode, in ext4_iget()
4358 make_bad_inode(inode); in ext4_iget()
4361 EXT4_ERROR_INODE(inode, "bogus i_mode (%o)", inode->i_mode); in ext4_iget()
4365 ext4_set_inode_flags(inode); in ext4_iget()
4366 unlock_new_inode(inode); in ext4_iget()
4367 return inode; in ext4_iget()
4371 iget_failed(inode); in ext4_iget()
4375 struct inode *ext4_iget_normal(struct super_block *sb, unsigned long ino) in ext4_iget_normal()
4386 struct inode *inode = &(ei->vfs_inode); in ext4_inode_blocks_set() local
4387 u64 i_blocks = inode->i_blocks; in ext4_inode_blocks_set()
4388 struct super_block *sb = inode->i_sb; in ext4_inode_blocks_set()
4397 ext4_clear_inode_flag(inode, EXT4_INODE_HUGE_FILE); in ext4_inode_blocks_set()
4410 ext4_clear_inode_flag(inode, EXT4_INODE_HUGE_FILE); in ext4_inode_blocks_set()
4412 ext4_set_inode_flag(inode, EXT4_INODE_HUGE_FILE); in ext4_inode_blocks_set()
4414 i_blocks = i_blocks >> (inode->i_blkbits - 9); in ext4_inode_blocks_set()
4426 static int other_inode_match(struct inode * inode, unsigned long ino, in other_inode_match() argument
4431 if ((inode->i_ino != ino) || in other_inode_match()
4432 (inode->i_state & (I_FREEING | I_WILL_FREE | I_NEW | in other_inode_match()
4434 ((inode->i_state & I_DIRTY_TIME) == 0)) in other_inode_match()
4436 spin_lock(&inode->i_lock); in other_inode_match()
4437 if (((inode->i_state & (I_FREEING | I_WILL_FREE | I_NEW | in other_inode_match()
4439 (inode->i_state & I_DIRTY_TIME)) { in other_inode_match()
4440 struct ext4_inode_info *ei = EXT4_I(inode); in other_inode_match()
4442 inode->i_state &= ~(I_DIRTY_TIME | I_DIRTY_TIME_EXPIRED); in other_inode_match()
4443 spin_unlock(&inode->i_lock); in other_inode_match()
4446 EXT4_INODE_SET_XTIME(i_ctime, inode, oi->raw_inode); in other_inode_match()
4447 EXT4_INODE_SET_XTIME(i_mtime, inode, oi->raw_inode); in other_inode_match()
4448 EXT4_INODE_SET_XTIME(i_atime, inode, oi->raw_inode); in other_inode_match()
4449 ext4_inode_csum_set(inode, oi->raw_inode, ei); in other_inode_match()
4451 trace_ext4_other_inode_update_time(inode, oi->orig_ino); in other_inode_match()
4454 spin_unlock(&inode->i_lock); in other_inode_match()
4493 struct inode *inode, in ext4_do_update_inode() argument
4497 struct ext4_inode_info *ei = EXT4_I(inode); in ext4_do_update_inode()
4499 struct super_block *sb = inode->i_sb; in ext4_do_update_inode()
4509 if (ext4_test_inode_state(inode, EXT4_STATE_NEW)) in ext4_do_update_inode()
4510 memset(raw_inode, 0, EXT4_SB(inode->i_sb)->s_inode_size); in ext4_do_update_inode()
4513 raw_inode->i_mode = cpu_to_le16(inode->i_mode); in ext4_do_update_inode()
4514 i_uid = i_uid_read(inode); in ext4_do_update_inode()
4515 i_gid = i_gid_read(inode); in ext4_do_update_inode()
4516 if (!(test_opt(inode->i_sb, NO_UID32))) { in ext4_do_update_inode()
4538 raw_inode->i_links_count = cpu_to_le16(inode->i_nlink); in ext4_do_update_inode()
4540 EXT4_INODE_SET_XTIME(i_ctime, inode, raw_inode); in ext4_do_update_inode()
4541 EXT4_INODE_SET_XTIME(i_mtime, inode, raw_inode); in ext4_do_update_inode()
4542 EXT4_INODE_SET_XTIME(i_atime, inode, raw_inode); in ext4_do_update_inode()
4552 if (likely(!test_opt2(inode->i_sb, HURD_COMPAT))) in ext4_do_update_inode()
4566 raw_inode->i_generation = cpu_to_le32(inode->i_generation); in ext4_do_update_inode()
4567 if (S_ISCHR(inode->i_mode) || S_ISBLK(inode->i_mode)) { in ext4_do_update_inode()
4568 if (old_valid_dev(inode->i_rdev)) { in ext4_do_update_inode()
4570 cpu_to_le32(old_encode_dev(inode->i_rdev)); in ext4_do_update_inode()
4575 cpu_to_le32(new_encode_dev(inode->i_rdev)); in ext4_do_update_inode()
4578 } else if (!ext4_has_inline_data(inode)) { in ext4_do_update_inode()
4583 if (likely(!test_opt2(inode->i_sb, HURD_COMPAT))) { in ext4_do_update_inode()
4584 raw_inode->i_disk_version = cpu_to_le32(inode->i_version); in ext4_do_update_inode()
4588 cpu_to_le32(inode->i_version >> 32); in ext4_do_update_inode()
4593 ext4_inode_csum_set(inode, raw_inode, ei); in ext4_do_update_inode()
4595 if (inode->i_sb->s_flags & MS_LAZYTIME) in ext4_do_update_inode()
4596 ext4_update_other_inodes_time(inode->i_sb, inode->i_ino, in ext4_do_update_inode()
4603 ext4_clear_inode_state(inode, EXT4_STATE_NEW); in ext4_do_update_inode()
4614 ext4_update_inode_fsync_trans(handle, inode, need_datasync); in ext4_do_update_inode()
4617 ext4_std_error(inode->i_sb, err); in ext4_do_update_inode()
4655 int ext4_write_inode(struct inode *inode, struct writeback_control *wbc) in ext4_write_inode() argument
4662 if (EXT4_SB(inode->i_sb)->s_journal) { in ext4_write_inode()
4677 err = ext4_force_commit(inode->i_sb); in ext4_write_inode()
4681 err = __ext4_get_inode_loc(inode, &iloc, 0); in ext4_write_inode()
4691 EXT4_ERROR_INODE_BLOCK(inode, iloc.bh->b_blocknr, in ext4_write_inode()
4705 static void ext4_wait_for_tail_page_commit(struct inode *inode) in ext4_wait_for_tail_page_commit() argument
4709 journal_t *journal = EXT4_SB(inode->i_sb)->s_journal; in ext4_wait_for_tail_page_commit()
4713 offset = inode->i_size & (PAGE_CACHE_SIZE - 1); in ext4_wait_for_tail_page_commit()
4719 if (offset > PAGE_CACHE_SIZE - (1 << inode->i_blkbits)) in ext4_wait_for_tail_page_commit()
4722 page = find_lock_page(inode->i_mapping, in ext4_wait_for_tail_page_commit()
4723 inode->i_size >> PAGE_CACHE_SHIFT); in ext4_wait_for_tail_page_commit()
4768 struct inode *inode = d_inode(dentry); in ext4_setattr() local
4773 error = inode_change_ok(inode, attr); in ext4_setattr()
4777 if (is_quota_modification(inode, attr)) { in ext4_setattr()
4778 error = dquot_initialize(inode); in ext4_setattr()
4782 if ((ia_valid & ATTR_UID && !uid_eq(attr->ia_uid, inode->i_uid)) || in ext4_setattr()
4783 (ia_valid & ATTR_GID && !gid_eq(attr->ia_gid, inode->i_gid))) { in ext4_setattr()
4788 handle = ext4_journal_start(inode, EXT4_HT_QUOTA, in ext4_setattr()
4789 (EXT4_MAXQUOTAS_INIT_BLOCKS(inode->i_sb) + in ext4_setattr()
4790 EXT4_MAXQUOTAS_DEL_BLOCKS(inode->i_sb)) + 3); in ext4_setattr()
4795 error = dquot_transfer(inode, attr); in ext4_setattr()
4803 inode->i_uid = attr->ia_uid; in ext4_setattr()
4805 inode->i_gid = attr->ia_gid; in ext4_setattr()
4806 error = ext4_mark_inode_dirty(handle, inode); in ext4_setattr()
4812 loff_t oldsize = inode->i_size; in ext4_setattr()
4813 int shrink = (attr->ia_size <= inode->i_size); in ext4_setattr()
4815 if (!(ext4_test_inode_flag(inode, EXT4_INODE_EXTENTS))) { in ext4_setattr()
4816 struct ext4_sb_info *sbi = EXT4_SB(inode->i_sb); in ext4_setattr()
4821 if (!S_ISREG(inode->i_mode)) in ext4_setattr()
4824 if (IS_I_VERSION(inode) && attr->ia_size != inode->i_size) in ext4_setattr()
4825 inode_inc_iversion(inode); in ext4_setattr()
4827 if (ext4_should_order_data(inode) && in ext4_setattr()
4828 (attr->ia_size < inode->i_size)) { in ext4_setattr()
4829 error = ext4_begin_ordered_truncate(inode, in ext4_setattr()
4834 if (attr->ia_size != inode->i_size) { in ext4_setattr()
4835 handle = ext4_journal_start(inode, EXT4_HT_INODE, 3); in ext4_setattr()
4841 error = ext4_orphan_add(handle, inode); in ext4_setattr()
4849 inode->i_mtime = ext4_current_time(inode); in ext4_setattr()
4850 inode->i_ctime = inode->i_mtime; in ext4_setattr()
4852 down_write(&EXT4_I(inode)->i_data_sem); in ext4_setattr()
4853 EXT4_I(inode)->i_disksize = attr->ia_size; in ext4_setattr()
4854 rc = ext4_mark_inode_dirty(handle, inode); in ext4_setattr()
4863 i_size_write(inode, attr->ia_size); in ext4_setattr()
4864 up_write(&EXT4_I(inode)->i_data_sem); in ext4_setattr()
4868 ext4_orphan_del(NULL, inode); in ext4_setattr()
4873 pagecache_isize_extended(inode, oldsize, inode->i_size); in ext4_setattr()
4881 if (!ext4_should_journal_data(inode)) { in ext4_setattr()
4882 ext4_inode_block_unlocked_dio(inode); in ext4_setattr()
4883 inode_dio_wait(inode); in ext4_setattr()
4884 ext4_inode_resume_unlocked_dio(inode); in ext4_setattr()
4886 ext4_wait_for_tail_page_commit(inode); in ext4_setattr()
4888 down_write(&EXT4_I(inode)->i_mmap_sem); in ext4_setattr()
4893 truncate_pagecache(inode, inode->i_size); in ext4_setattr()
4895 ext4_truncate(inode); in ext4_setattr()
4896 up_write(&EXT4_I(inode)->i_mmap_sem); in ext4_setattr()
4900 setattr_copy(inode, attr); in ext4_setattr()
4901 mark_inode_dirty(inode); in ext4_setattr()
4908 if (orphan && inode->i_nlink) in ext4_setattr()
4909 ext4_orphan_del(NULL, inode); in ext4_setattr()
4912 rc = posix_acl_chmod(inode, inode->i_mode); in ext4_setattr()
4915 ext4_std_error(inode->i_sb, error); in ext4_setattr()
4924 struct inode *inode; in ext4_getattr() local
4927 inode = d_inode(dentry); in ext4_getattr()
4928 generic_fillattr(inode, stat); in ext4_getattr()
4936 if (unlikely(ext4_has_inline_data(inode))) in ext4_getattr()
4949 delalloc_blocks = EXT4_C2B(EXT4_SB(inode->i_sb), in ext4_getattr()
4950 EXT4_I(inode)->i_reserved_data_blocks); in ext4_getattr()
4951 stat->blocks += delalloc_blocks << (inode->i_sb->s_blocksize_bits - 9); in ext4_getattr()
4955 static int ext4_index_trans_blocks(struct inode *inode, int lblocks, in ext4_index_trans_blocks() argument
4958 if (!(ext4_test_inode_flag(inode, EXT4_INODE_EXTENTS))) in ext4_index_trans_blocks()
4959 return ext4_ind_trans_blocks(inode, lblocks); in ext4_index_trans_blocks()
4960 return ext4_ext_index_trans_blocks(inode, pextents); in ext4_index_trans_blocks()
4974 static int ext4_meta_trans_blocks(struct inode *inode, int lblocks, in ext4_meta_trans_blocks() argument
4977 ext4_group_t groups, ngroups = ext4_get_groups_count(inode->i_sb); in ext4_meta_trans_blocks()
4986 idxblocks = ext4_index_trans_blocks(inode, lblocks, pextents); in ext4_meta_trans_blocks()
4998 if (groups > EXT4_SB(inode->i_sb)->s_gdb_count) in ext4_meta_trans_blocks()
4999 gdpblocks = EXT4_SB(inode->i_sb)->s_gdb_count; in ext4_meta_trans_blocks()
5005 ret += EXT4_META_TRANS_BLOCKS(inode->i_sb); in ext4_meta_trans_blocks()
5020 int ext4_writepage_trans_blocks(struct inode *inode) in ext4_writepage_trans_blocks() argument
5022 int bpp = ext4_journal_blocks_per_page(inode); in ext4_writepage_trans_blocks()
5025 ret = ext4_meta_trans_blocks(inode, bpp, bpp); in ext4_writepage_trans_blocks()
5028 if (ext4_should_journal_data(inode)) in ext4_writepage_trans_blocks()
5042 int ext4_chunk_trans_blocks(struct inode *inode, int nrblocks) in ext4_chunk_trans_blocks() argument
5044 return ext4_meta_trans_blocks(inode, nrblocks, 1); in ext4_chunk_trans_blocks()
5052 struct inode *inode, struct ext4_iloc *iloc) in ext4_mark_iloc_dirty() argument
5056 if (IS_I_VERSION(inode)) in ext4_mark_iloc_dirty()
5057 inode_inc_iversion(inode); in ext4_mark_iloc_dirty()
5063 err = ext4_do_update_inode(handle, inode, iloc); in ext4_mark_iloc_dirty()
5074 ext4_reserve_inode_write(handle_t *handle, struct inode *inode, in ext4_reserve_inode_write() argument
5079 err = ext4_get_inode_loc(inode, iloc); in ext4_reserve_inode_write()
5088 ext4_std_error(inode->i_sb, err); in ext4_reserve_inode_write()
5096 static int ext4_expand_extra_isize(struct inode *inode, in ext4_expand_extra_isize() argument
5104 if (EXT4_I(inode)->i_extra_isize >= new_extra_isize) in ext4_expand_extra_isize()
5109 header = IHDR(inode, raw_inode); in ext4_expand_extra_isize()
5112 if (!ext4_test_inode_state(inode, EXT4_STATE_XATTR) || in ext4_expand_extra_isize()
5116 EXT4_I(inode)->i_extra_isize = new_extra_isize; in ext4_expand_extra_isize()
5121 return ext4_expand_extra_isize_ea(inode, new_extra_isize, in ext4_expand_extra_isize()
5138 int ext4_mark_inode_dirty(handle_t *handle, struct inode *inode) in ext4_mark_inode_dirty() argument
5141 struct ext4_sb_info *sbi = EXT4_SB(inode->i_sb); in ext4_mark_inode_dirty()
5146 trace_ext4_mark_inode_dirty(inode, _RET_IP_); in ext4_mark_inode_dirty()
5147 err = ext4_reserve_inode_write(handle, inode, &iloc); in ext4_mark_inode_dirty()
5151 EXT4_I(inode)->i_extra_isize < sbi->s_want_extra_isize && in ext4_mark_inode_dirty()
5152 !ext4_test_inode_state(inode, EXT4_STATE_NO_EXPAND)) { in ext4_mark_inode_dirty()
5161 EXT4_DATA_TRANS_BLOCKS(inode->i_sb))) == 0) { in ext4_mark_inode_dirty()
5162 ret = ext4_expand_extra_isize(inode, in ext4_mark_inode_dirty()
5166 ext4_set_inode_state(inode, in ext4_mark_inode_dirty()
5170 ext4_warning(inode->i_sb, in ext4_mark_inode_dirty()
5173 inode->i_ino); in ext4_mark_inode_dirty()
5180 return ext4_mark_iloc_dirty(handle, inode, &iloc); in ext4_mark_inode_dirty()
5201 void ext4_dirty_inode(struct inode *inode, int flags) in ext4_dirty_inode() argument
5207 handle = ext4_journal_start(inode, EXT4_HT_INODE, 2); in ext4_dirty_inode()
5211 ext4_mark_inode_dirty(handle, inode); in ext4_dirty_inode()
5226 static int ext4_pin_inode(handle_t *handle, struct inode *inode)
5232 err = ext4_get_inode_loc(inode, &iloc);
5243 ext4_std_error(inode->i_sb, err);
5248 int ext4_change_inode_journal_flag(struct inode *inode, int val) in ext4_change_inode_journal_flag() argument
5264 journal = EXT4_JOURNAL(inode); in ext4_change_inode_journal_flag()
5275 if (val && test_opt(inode->i_sb, DELALLOC)) { in ext4_change_inode_journal_flag()
5276 err = ext4_alloc_da_blocks(inode); in ext4_change_inode_journal_flag()
5282 ext4_inode_block_unlocked_dio(inode); in ext4_change_inode_journal_flag()
5283 inode_dio_wait(inode); in ext4_change_inode_journal_flag()
5296 ext4_set_inode_flag(inode, EXT4_INODE_JOURNAL_DATA); in ext4_change_inode_journal_flag()
5301 ext4_inode_resume_unlocked_dio(inode); in ext4_change_inode_journal_flag()
5304 ext4_clear_inode_flag(inode, EXT4_INODE_JOURNAL_DATA); in ext4_change_inode_journal_flag()
5306 ext4_set_aops(inode); in ext4_change_inode_journal_flag()
5309 ext4_inode_resume_unlocked_dio(inode); in ext4_change_inode_journal_flag()
5313 handle = ext4_journal_start(inode, EXT4_HT_INODE, 1); in ext4_change_inode_journal_flag()
5317 err = ext4_mark_inode_dirty(handle, inode); in ext4_change_inode_journal_flag()
5320 ext4_std_error(inode->i_sb, err); in ext4_change_inode_journal_flag()
5337 struct inode *inode = file_inode(file); in ext4_page_mkwrite() local
5338 struct address_space *mapping = inode->i_mapping; in ext4_page_mkwrite()
5343 sb_start_pagefault(inode->i_sb); in ext4_page_mkwrite()
5346 down_read(&EXT4_I(inode)->i_mmap_sem); in ext4_page_mkwrite()
5348 if (test_opt(inode->i_sb, DELALLOC) && in ext4_page_mkwrite()
5349 !ext4_should_journal_data(inode) && in ext4_page_mkwrite()
5350 !ext4_nonda_switch(inode->i_sb)) { in ext4_page_mkwrite()
5355 ext4_should_retry_alloc(inode->i_sb, &retries)); in ext4_page_mkwrite()
5360 size = i_size_read(inode); in ext4_page_mkwrite()
5388 if (ext4_should_dioread_nolock(inode)) in ext4_page_mkwrite()
5393 handle = ext4_journal_start(inode, EXT4_HT_WRITE_PAGE, in ext4_page_mkwrite()
5394 ext4_writepage_trans_blocks(inode)); in ext4_page_mkwrite()
5400 if (!ret && ext4_should_journal_data(inode)) { in ext4_page_mkwrite()
5408 ext4_set_inode_state(inode, EXT4_STATE_JDATA); in ext4_page_mkwrite()
5411 if (ret == -ENOSPC && ext4_should_retry_alloc(inode->i_sb, &retries)) in ext4_page_mkwrite()
5416 up_read(&EXT4_I(inode)->i_mmap_sem); in ext4_page_mkwrite()
5417 sb_end_pagefault(inode->i_sb); in ext4_page_mkwrite()
5423 struct inode *inode = file_inode(vma->vm_file); in ext4_filemap_fault() local
5426 down_read(&EXT4_I(inode)->i_mmap_sem); in ext4_filemap_fault()
5428 up_read(&EXT4_I(inode)->i_mmap_sem); in ext4_filemap_fault()