Lines Matching refs:inode

187 static inline void ext4_fc_reset_inode(struct inode *inode)  in ext4_fc_reset_inode()  argument
189 struct ext4_inode_info *ei = EXT4_I(inode); in ext4_fc_reset_inode()
195 void ext4_fc_init_inode(struct inode *inode) in ext4_fc_init_inode() argument
197 struct ext4_inode_info *ei = EXT4_I(inode); in ext4_fc_init_inode()
199 ext4_fc_reset_inode(inode); in ext4_fc_init_inode()
200 ext4_clear_inode_state(inode, EXT4_STATE_FC_COMMITTING); in ext4_fc_init_inode()
208 static void ext4_fc_wait_committing_inode(struct inode *inode) in ext4_fc_wait_committing_inode() argument
209 __releases(&EXT4_SB(inode->i_sb)->s_fc_lock) in ext4_fc_wait_committing_inode()
212 struct ext4_inode_info *ei = EXT4_I(inode); in ext4_fc_wait_committing_inode()
225 lockdep_assert_held(&EXT4_SB(inode->i_sb)->s_fc_lock); in ext4_fc_wait_committing_inode()
227 spin_unlock(&EXT4_SB(inode->i_sb)->s_fc_lock); in ext4_fc_wait_committing_inode()
245 void ext4_fc_start_update(struct inode *inode) in ext4_fc_start_update() argument
247 struct ext4_inode_info *ei = EXT4_I(inode); in ext4_fc_start_update()
249 if (ext4_fc_disabled(inode->i_sb)) in ext4_fc_start_update()
253 spin_lock(&EXT4_SB(inode->i_sb)->s_fc_lock); in ext4_fc_start_update()
257 if (ext4_test_inode_state(inode, EXT4_STATE_FC_COMMITTING)) { in ext4_fc_start_update()
258 ext4_fc_wait_committing_inode(inode); in ext4_fc_start_update()
263 spin_unlock(&EXT4_SB(inode->i_sb)->s_fc_lock); in ext4_fc_start_update()
269 void ext4_fc_stop_update(struct inode *inode) in ext4_fc_stop_update() argument
271 struct ext4_inode_info *ei = EXT4_I(inode); in ext4_fc_stop_update()
273 if (ext4_fc_disabled(inode->i_sb)) in ext4_fc_stop_update()
284 void ext4_fc_del(struct inode *inode) in ext4_fc_del() argument
286 struct ext4_inode_info *ei = EXT4_I(inode); in ext4_fc_del()
287 struct ext4_sb_info *sbi = EXT4_SB(inode->i_sb); in ext4_fc_del()
290 if (ext4_fc_disabled(inode->i_sb)) in ext4_fc_del()
294 spin_lock(&EXT4_SB(inode->i_sb)->s_fc_lock); in ext4_fc_del()
296 spin_unlock(&EXT4_SB(inode->i_sb)->s_fc_lock); in ext4_fc_del()
300 if (ext4_test_inode_state(inode, EXT4_STATE_FC_COMMITTING)) { in ext4_fc_del()
301 ext4_fc_wait_committing_inode(inode); in ext4_fc_del()
374 handle_t *handle, struct inode *inode, in ext4_fc_track_template() argument
375 int (*__fc_track_fn)(struct inode *, void *, bool), in ext4_fc_track_template() argument
379 struct ext4_inode_info *ei = EXT4_I(inode); in ext4_fc_track_template()
380 struct ext4_sb_info *sbi = EXT4_SB(inode->i_sb); in ext4_fc_track_template()
389 ext4_fc_reset_inode(inode); in ext4_fc_track_template()
392 ret = __fc_track_fn(inode, args, update); in ext4_fc_track_template()
399 if (list_empty(&EXT4_I(inode)->i_fc_list)) in ext4_fc_track_template()
400 list_add_tail(&EXT4_I(inode)->i_fc_list, in ext4_fc_track_template()
416 static int __track_dentry_update(struct inode *inode, void *arg, bool update) in __track_dentry_update() argument
419 struct ext4_inode_info *ei = EXT4_I(inode); in __track_dentry_update()
423 struct inode *dir = dentry->d_parent->d_inode; in __track_dentry_update()
424 struct super_block *sb = inode->i_sb; in __track_dentry_update()
445 node->fcd_ino = inode->i_ino; in __track_dentry_update()
491 struct inode *inode, struct dentry *dentry) in __ext4_fc_track_unlink() argument
499 ret = ext4_fc_track_template(handle, inode, __track_dentry_update, in __ext4_fc_track_unlink()
501 trace_ext4_fc_track_unlink(handle, inode, dentry, ret); in __ext4_fc_track_unlink()
506 struct inode *inode = d_inode(dentry); in ext4_fc_track_unlink() local
508 if (ext4_fc_disabled(inode->i_sb)) in ext4_fc_track_unlink()
511 if (ext4_test_mount_flag(inode->i_sb, EXT4_MF_FC_INELIGIBLE)) in ext4_fc_track_unlink()
514 __ext4_fc_track_unlink(handle, inode, dentry); in ext4_fc_track_unlink()
518 struct inode *inode, struct dentry *dentry) in __ext4_fc_track_link() argument
526 ret = ext4_fc_track_template(handle, inode, __track_dentry_update, in __ext4_fc_track_link()
528 trace_ext4_fc_track_link(handle, inode, dentry, ret); in __ext4_fc_track_link()
533 struct inode *inode = d_inode(dentry); in ext4_fc_track_link() local
535 if (ext4_fc_disabled(inode->i_sb)) in ext4_fc_track_link()
538 if (ext4_test_mount_flag(inode->i_sb, EXT4_MF_FC_INELIGIBLE)) in ext4_fc_track_link()
541 __ext4_fc_track_link(handle, inode, dentry); in ext4_fc_track_link()
544 void __ext4_fc_track_create(handle_t *handle, struct inode *inode, in __ext4_fc_track_create() argument
553 ret = ext4_fc_track_template(handle, inode, __track_dentry_update, in __ext4_fc_track_create()
555 trace_ext4_fc_track_create(handle, inode, dentry, ret); in __ext4_fc_track_create()
560 struct inode *inode = d_inode(dentry); in ext4_fc_track_create() local
562 if (ext4_fc_disabled(inode->i_sb)) in ext4_fc_track_create()
565 if (ext4_test_mount_flag(inode->i_sb, EXT4_MF_FC_INELIGIBLE)) in ext4_fc_track_create()
568 __ext4_fc_track_create(handle, inode, dentry); in ext4_fc_track_create()
572 static int __track_inode(struct inode *inode, void *arg, bool update) in __track_inode() argument
577 EXT4_I(inode)->i_fc_lblk_len = 0; in __track_inode()
582 void ext4_fc_track_inode(handle_t *handle, struct inode *inode) in ext4_fc_track_inode() argument
586 if (S_ISDIR(inode->i_mode)) in ext4_fc_track_inode()
589 if (ext4_fc_disabled(inode->i_sb)) in ext4_fc_track_inode()
592 if (ext4_should_journal_data(inode)) { in ext4_fc_track_inode()
593 ext4_fc_mark_ineligible(inode->i_sb, in ext4_fc_track_inode()
598 if (ext4_test_mount_flag(inode->i_sb, EXT4_MF_FC_INELIGIBLE)) in ext4_fc_track_inode()
601 ret = ext4_fc_track_template(handle, inode, __track_inode, NULL, 1); in ext4_fc_track_inode()
602 trace_ext4_fc_track_inode(handle, inode, ret); in ext4_fc_track_inode()
610 static int __track_range(struct inode *inode, void *arg, bool update) in __track_range() argument
612 struct ext4_inode_info *ei = EXT4_I(inode); in __track_range()
617 if (inode->i_ino < EXT4_FIRST_INO(inode->i_sb)) { in __track_range()
618 ext4_debug("Special inode %ld being modified\n", inode->i_ino); in __track_range()
637 void ext4_fc_track_range(handle_t *handle, struct inode *inode, ext4_lblk_t start, in ext4_fc_track_range() argument
643 if (S_ISDIR(inode->i_mode)) in ext4_fc_track_range()
646 if (ext4_fc_disabled(inode->i_sb)) in ext4_fc_track_range()
649 if (ext4_test_mount_flag(inode->i_sb, EXT4_MF_FC_INELIGIBLE)) in ext4_fc_track_range()
655 ret = ext4_fc_track_template(handle, inode, __track_range, &args, 1); in ext4_fc_track_range()
657 trace_ext4_fc_track_range(handle, inode, start, end, ret); in ext4_fc_track_range()
845 static int ext4_fc_write_inode(struct inode *inode, u32 *crc) in ext4_fc_write_inode() argument
847 struct ext4_inode_info *ei = EXT4_I(inode); in ext4_fc_write_inode()
855 ret = ext4_get_inode_loc(inode, &iloc); in ext4_fc_write_inode()
859 if (ext4_test_inode_flag(inode, EXT4_INODE_INLINE_DATA)) in ext4_fc_write_inode()
860 inode_len = EXT4_INODE_SIZE(inode->i_sb); in ext4_fc_write_inode()
861 else if (EXT4_INODE_SIZE(inode->i_sb) > EXT4_GOOD_OLD_INODE_SIZE) in ext4_fc_write_inode()
864 fc_inode.fc_ino = cpu_to_le32(inode->i_ino); in ext4_fc_write_inode()
869 dst = ext4_fc_reserve_space(inode->i_sb, in ext4_fc_write_inode()
889 static int ext4_fc_write_inode_data(struct inode *inode, u32 *crc) in ext4_fc_write_inode_data() argument
892 struct ext4_inode_info *ei = EXT4_I(inode); in ext4_fc_write_inode_data()
911 cur_lblk_off, new_blk_size, inode->i_ino); in ext4_fc_write_inode_data()
916 ret = ext4_map_blocks(NULL, inode, &map, 0); in ext4_fc_write_inode_data()
926 lrange.fc_ino = cpu_to_le32(inode->i_ino); in ext4_fc_write_inode_data()
929 if (!ext4_fc_add_tlv(inode->i_sb, EXT4_FC_TAG_DEL_RANGE, in ext4_fc_write_inode_data()
939 fc_ext.fc_ino = cpu_to_le32(inode->i_ino); in ext4_fc_write_inode_data()
948 if (!ext4_fc_add_tlv(inode->i_sb, EXT4_FC_TAG_ADD_RANGE, in ext4_fc_write_inode_data()
1027 struct inode *inode; in ext4_fc_commit_dentry_updates() local
1051 inode = &ei->vfs_inode; in ext4_fc_commit_dentry_updates()
1052 WARN_ON(inode->i_ino != fc_dentry->fcd_ino); in ext4_fc_commit_dentry_updates()
1063 ret = ext4_fc_write_inode(inode, crc); in ext4_fc_commit_dentry_updates()
1067 ret = ext4_fc_write_inode_data(inode, crc); in ext4_fc_commit_dentry_updates()
1090 struct inode *inode; in ext4_fc_perform_commit() local
1134 inode = &iter->vfs_inode; in ext4_fc_perform_commit()
1135 if (!ext4_test_inode_state(inode, EXT4_STATE_FC_COMMITTING)) in ext4_fc_perform_commit()
1139 ret = ext4_fc_write_inode_data(inode, &crc); in ext4_fc_perform_commit()
1142 ret = ext4_fc_write_inode(inode, &crc); in ext4_fc_perform_commit()
1367 struct inode *inode, *old_parent; in ext4_fc_replay_unlink() local
1379 inode = ext4_iget(sb, darg.ino, EXT4_IGET_NORMAL); in ext4_fc_replay_unlink()
1381 if (IS_ERR(inode)) { in ext4_fc_replay_unlink()
1390 iput(inode); in ext4_fc_replay_unlink()
1394 ret = __ext4_unlink(old_parent, &entry, inode, NULL); in ext4_fc_replay_unlink()
1399 iput(inode); in ext4_fc_replay_unlink()
1405 struct inode *inode) in ext4_fc_replay_link_internal() argument
1407 struct inode *dir = NULL; in ext4_fc_replay_link_internal()
1433 ret = __ext4_link(dir, inode, dentry_inode); in ext4_fc_replay_link_internal()
1465 struct inode *inode; in ext4_fc_replay_link() local
1473 inode = ext4_iget(sb, darg.ino, EXT4_IGET_NORMAL); in ext4_fc_replay_link()
1474 if (IS_ERR(inode)) { in ext4_fc_replay_link()
1479 ret = ext4_fc_replay_link_internal(sb, &darg, inode); in ext4_fc_replay_link()
1480 iput(inode); in ext4_fc_replay_link()
1523 struct inode *inode = NULL; in ext4_fc_replay_inode() local
1534 inode = ext4_iget(sb, ino, EXT4_IGET_NORMAL); in ext4_fc_replay_inode()
1535 if (!IS_ERR(inode)) { in ext4_fc_replay_inode()
1536 ext4_ext_clear_bb(inode); in ext4_fc_replay_inode()
1537 iput(inode); in ext4_fc_replay_inode()
1539 inode = NULL; in ext4_fc_replay_inode()
1584 inode = ext4_iget(sb, ino, EXT4_IGET_NORMAL); in ext4_fc_replay_inode()
1585 if (IS_ERR(inode)) { in ext4_fc_replay_inode()
1595 if (!ext4_test_inode_flag(inode, EXT4_INODE_INLINE_DATA)) in ext4_fc_replay_inode()
1596 ext4_ext_replay_set_iblocks(inode); in ext4_fc_replay_inode()
1598 inode->i_generation = le32_to_cpu(ext4_raw_inode(&iloc)->i_generation); in ext4_fc_replay_inode()
1599 ext4_reset_inode_seed(inode); in ext4_fc_replay_inode()
1601 ext4_inode_csum_set(inode, ext4_raw_inode(&iloc), EXT4_I(inode)); in ext4_fc_replay_inode()
1606 iput(inode); in ext4_fc_replay_inode()
1624 struct inode *inode = NULL; in ext4_fc_replay_create() local
1625 struct inode *dir = NULL; in ext4_fc_replay_create()
1638 inode = ext4_iget(sb, darg.ino, EXT4_IGET_NORMAL); in ext4_fc_replay_create()
1639 if (IS_ERR(inode)) { in ext4_fc_replay_create()
1641 inode = NULL; in ext4_fc_replay_create()
1646 if (S_ISDIR(inode->i_mode)) { in ext4_fc_replay_create()
1656 ret = ext4_init_new_dir(NULL, dir, inode); in ext4_fc_replay_create()
1663 ret = ext4_fc_replay_link_internal(sb, &darg, inode); in ext4_fc_replay_create()
1666 set_nlink(inode, 1); in ext4_fc_replay_create()
1667 ext4_mark_inode_dirty(NULL, inode); in ext4_fc_replay_create()
1669 iput(inode); in ext4_fc_replay_create()
1723 struct inode *inode; in ext4_fc_replay_add_range() local
1738 inode = ext4_iget(sb, le32_to_cpu(fc_add_ex.fc_ino), EXT4_IGET_NORMAL); in ext4_fc_replay_add_range()
1739 if (IS_ERR(inode)) { in ext4_fc_replay_add_range()
1744 ret = ext4_fc_record_modified_inode(sb, inode->i_ino); in ext4_fc_replay_add_range()
1756 inode->i_ino); in ext4_fc_replay_add_range()
1762 ret = ext4_map_blocks(NULL, inode, &map, 0); in ext4_fc_replay_add_range()
1769 path = ext4_find_extent(inode, cur, NULL, 0); in ext4_fc_replay_add_range()
1779 down_write(&EXT4_I(inode)->i_data_sem); in ext4_fc_replay_add_range()
1781 NULL, inode, &path, &newex, 0); in ext4_fc_replay_add_range()
1782 up_write((&EXT4_I(inode)->i_data_sem)); in ext4_fc_replay_add_range()
1795 ret = ext4_ext_replay_update_ex(inode, cur, map.m_len, in ext4_fc_replay_add_range()
1809 ext4_mb_mark_bb(inode->i_sb, map.m_pblk, map.m_len, 0); in ext4_fc_replay_add_range()
1817 ret = ext4_ext_replay_update_ex(inode, cur, map.m_len, in ext4_fc_replay_add_range()
1825 ext4_ext_replay_shrink_inode(inode, start + len); in ext4_fc_replay_add_range()
1830 ext4_ext_replay_shrink_inode(inode, i_size_read(inode) >> in ext4_fc_replay_add_range()
1833 iput(inode); in ext4_fc_replay_add_range()
1842 struct inode *inode; in ext4_fc_replay_del_range() local
1855 inode = ext4_iget(sb, le32_to_cpu(lrange.fc_ino), EXT4_IGET_NORMAL); in ext4_fc_replay_del_range()
1856 if (IS_ERR(inode)) { in ext4_fc_replay_del_range()
1861 ret = ext4_fc_record_modified_inode(sb, inode->i_ino); in ext4_fc_replay_del_range()
1866 inode->i_ino, le32_to_cpu(lrange.fc_lblk), in ext4_fc_replay_del_range()
1872 ret = ext4_map_blocks(NULL, inode, &map, 0); in ext4_fc_replay_del_range()
1878 ext4_mb_mark_bb(inode->i_sb, map.m_pblk, map.m_len, 0); in ext4_fc_replay_del_range()
1885 down_write(&EXT4_I(inode)->i_data_sem); in ext4_fc_replay_del_range()
1886 ret = ext4_ext_remove_space(inode, le32_to_cpu(lrange.fc_lblk), in ext4_fc_replay_del_range()
1889 up_write(&EXT4_I(inode)->i_data_sem); in ext4_fc_replay_del_range()
1892 ext4_ext_replay_shrink_inode(inode, in ext4_fc_replay_del_range()
1893 i_size_read(inode) >> sb->s_blocksize_bits); in ext4_fc_replay_del_range()
1894 ext4_mark_inode_dirty(NULL, inode); in ext4_fc_replay_del_range()
1896 iput(inode); in ext4_fc_replay_del_range()
1903 struct inode *inode; in ext4_fc_set_bitmaps_and_counters() local
1911 inode = ext4_iget(sb, state->fc_modified_inodes[i], in ext4_fc_set_bitmaps_and_counters()
1913 if (IS_ERR(inode)) { in ext4_fc_set_bitmaps_and_counters()
1920 if (ext4_test_inode_flag(inode, EXT4_INODE_INLINE_DATA)) { in ext4_fc_set_bitmaps_and_counters()
1921 iput(inode); in ext4_fc_set_bitmaps_and_counters()
1928 ret = ext4_map_blocks(NULL, inode, &map, 0); in ext4_fc_set_bitmaps_and_counters()
1933 path = ext4_find_extent(inode, map.m_lblk, NULL, 0); in ext4_fc_set_bitmaps_and_counters()
1936 ext4_mb_mark_bb(inode->i_sb, in ext4_fc_set_bitmaps_and_counters()
1941 ext4_mb_mark_bb(inode->i_sb, map.m_pblk, in ext4_fc_set_bitmaps_and_counters()
1947 iput(inode); in ext4_fc_set_bitmaps_and_counters()