Lines Matching refs:inode

18 static bool support_inline_data(struct inode *inode)  in support_inline_data()  argument
20 if (f2fs_used_in_atomic_write(inode)) in support_inline_data()
22 if (!S_ISREG(inode->i_mode) && !S_ISLNK(inode->i_mode)) in support_inline_data()
24 if (i_size_read(inode) > MAX_INLINE_DATA(inode)) in support_inline_data()
29 bool f2fs_may_inline_data(struct inode *inode) in f2fs_may_inline_data() argument
31 if (!support_inline_data(inode)) in f2fs_may_inline_data()
34 return !f2fs_post_read_required(inode); in f2fs_may_inline_data()
37 static bool inode_has_blocks(struct inode *inode, struct folio *ifolio) in inode_has_blocks() argument
42 if (F2FS_HAS_BLOCKS(inode)) in inode_has_blocks()
52 bool f2fs_sanity_check_inline_data(struct inode *inode, struct folio *ifolio) in f2fs_sanity_check_inline_data() argument
54 if (!f2fs_has_inline_data(inode)) in f2fs_sanity_check_inline_data()
57 if (inode_has_blocks(inode, ifolio)) in f2fs_sanity_check_inline_data()
60 if (!support_inline_data(inode)) in f2fs_sanity_check_inline_data()
67 return (S_ISREG(inode->i_mode) && in f2fs_sanity_check_inline_data()
68 (file_is_encrypt(inode) || file_is_verity(inode) || in f2fs_sanity_check_inline_data()
69 (F2FS_I(inode)->i_flags & F2FS_COMPR_FL))); in f2fs_sanity_check_inline_data()
72 bool f2fs_may_inline_dentry(struct inode *inode) in f2fs_may_inline_dentry() argument
74 if (!test_opt(F2FS_I_SB(inode), INLINE_DENTRY)) in f2fs_may_inline_dentry()
77 if (!S_ISDIR(inode->i_mode)) in f2fs_may_inline_dentry()
85 struct inode *inode = folio->mapping->host; in f2fs_do_read_inline_data() local
90 f2fs_bug_on(F2FS_I_SB(inode), folio->index); in f2fs_do_read_inline_data()
92 folio_zero_segment(folio, MAX_INLINE_DATA(inode), folio_size(folio)); in f2fs_do_read_inline_data()
95 memcpy_to_folio(folio, 0, inline_data_addr(inode, ifolio), in f2fs_do_read_inline_data()
96 MAX_INLINE_DATA(inode)); in f2fs_do_read_inline_data()
101 void f2fs_truncate_inline_inode(struct inode *inode, struct folio *ifolio, in f2fs_truncate_inline_inode() argument
106 if (from >= MAX_INLINE_DATA(inode)) in f2fs_truncate_inline_inode()
109 addr = inline_data_addr(inode, ifolio); in f2fs_truncate_inline_inode()
112 memset(addr + from, 0, MAX_INLINE_DATA(inode) - from); in f2fs_truncate_inline_inode()
116 clear_inode_flag(inode, FI_DATA_EXIST); in f2fs_truncate_inline_inode()
119 int f2fs_read_inline_data(struct inode *inode, struct folio *folio) in f2fs_read_inline_data() argument
123 ifolio = f2fs_get_inode_folio(F2FS_I_SB(inode), inode->i_ino); in f2fs_read_inline_data()
129 if (!f2fs_has_inline_data(inode)) { in f2fs_read_inline_data()
149 .sbi = F2FS_I_SB(dn->inode), in f2fs_convert_inline_folio()
150 .ino = dn->inode->i_ino, in f2fs_convert_inline_folio()
161 if (!f2fs_exist_data(dn->inode)) in f2fs_convert_inline_folio()
181 __func__, dn->inode->i_ino, dn->data_blkaddr); in f2fs_convert_inline_folio()
183 fserror_report_file_metadata(dn->inode, -EFSCORRUPTED, GFP_NOFS); in f2fs_convert_inline_folio()
198 set_inode_flag(dn->inode, FI_HOT_DATA); in f2fs_convert_inline_folio()
202 inode_dec_dirty_pages(dn->inode); in f2fs_convert_inline_folio()
203 f2fs_remove_dirty_inode(dn->inode); in f2fs_convert_inline_folio()
207 set_inode_flag(dn->inode, FI_APPEND_WRITE); in f2fs_convert_inline_folio()
210 f2fs_truncate_inline_inode(dn->inode, dn->inode_folio, 0); in f2fs_convert_inline_folio()
213 stat_dec_inline_inode(dn->inode); in f2fs_convert_inline_folio()
214 clear_inode_flag(dn->inode, FI_INLINE_DATA); in f2fs_convert_inline_folio()
219 int f2fs_convert_inline_inode(struct inode *inode) in f2fs_convert_inline_inode() argument
221 struct f2fs_sb_info *sbi = F2FS_I_SB(inode); in f2fs_convert_inline_inode()
230 if (!f2fs_has_inline_data(inode)) in f2fs_convert_inline_inode()
233 err = f2fs_dquot_initialize(inode); in f2fs_convert_inline_inode()
237 folio = f2fs_grab_cache_folio(inode->i_mapping, 0, false); in f2fs_convert_inline_inode()
243 ifolio = f2fs_get_inode_folio(sbi, inode->i_ino); in f2fs_convert_inline_inode()
249 set_new_dnode(&dn, inode, ifolio, ifolio, 0); in f2fs_convert_inline_inode()
251 if (f2fs_has_inline_data(inode)) in f2fs_convert_inline_inode()
266 int f2fs_write_inline_data(struct inode *inode, struct folio *folio) in f2fs_write_inline_data() argument
268 struct f2fs_sb_info *sbi = F2FS_I_SB(inode); in f2fs_write_inline_data()
271 ifolio = f2fs_get_inode_folio(sbi, inode->i_ino); in f2fs_write_inline_data()
275 if (!f2fs_has_inline_data(inode)) { in f2fs_write_inline_data()
280 f2fs_bug_on(F2FS_I_SB(inode), folio->index); in f2fs_write_inline_data()
283 memcpy_from_folio(inline_data_addr(inode, ifolio), in f2fs_write_inline_data()
284 folio, 0, MAX_INLINE_DATA(inode)); in f2fs_write_inline_data()
289 set_inode_flag(inode, FI_APPEND_WRITE); in f2fs_write_inline_data()
290 set_inode_flag(inode, FI_DATA_EXIST); in f2fs_write_inline_data()
297 int f2fs_recover_inline_data(struct inode *inode, struct folio *nfolio) in f2fs_recover_inline_data() argument
299 struct f2fs_sb_info *sbi = F2FS_I_SB(inode); in f2fs_recover_inline_data()
314 if (f2fs_has_inline_data(inode) && in f2fs_recover_inline_data()
318 ifolio = f2fs_get_inode_folio(sbi, inode->i_ino); in f2fs_recover_inline_data()
324 src_addr = inline_data_addr(inode, nfolio); in f2fs_recover_inline_data()
325 dst_addr = inline_data_addr(inode, ifolio); in f2fs_recover_inline_data()
326 memcpy(dst_addr, src_addr, MAX_INLINE_DATA(inode)); in f2fs_recover_inline_data()
328 set_inode_flag(inode, FI_INLINE_DATA); in f2fs_recover_inline_data()
329 set_inode_flag(inode, FI_DATA_EXIST); in f2fs_recover_inline_data()
336 if (f2fs_has_inline_data(inode)) { in f2fs_recover_inline_data()
337 struct folio *ifolio = f2fs_get_inode_folio(sbi, inode->i_ino); in f2fs_recover_inline_data()
340 f2fs_truncate_inline_inode(inode, ifolio, 0); in f2fs_recover_inline_data()
341 stat_dec_inline_inode(inode); in f2fs_recover_inline_data()
342 clear_inode_flag(inode, FI_INLINE_DATA); in f2fs_recover_inline_data()
347 ret = f2fs_truncate_blocks(inode, 0, false); in f2fs_recover_inline_data()
350 stat_inc_inline_inode(inode); in f2fs_recover_inline_data()
356 struct f2fs_dir_entry *f2fs_find_in_inline_dir(struct inode *dir, in f2fs_find_in_inline_dir()
390 int f2fs_make_empty_inline_dir(struct inode *inode, struct inode *parent, in f2fs_make_empty_inline_dir() argument
396 inline_dentry = inline_data_addr(inode, ifolio); in f2fs_make_empty_inline_dir()
398 make_dentry_ptr_inline(inode, &d, inline_dentry); in f2fs_make_empty_inline_dir()
399 f2fs_do_make_empty_dir(inode, parent, &d); in f2fs_make_empty_inline_dir()
404 if (i_size_read(inode) < MAX_INLINE_DATA(inode)) in f2fs_make_empty_inline_dir()
405 f2fs_i_size_write(inode, MAX_INLINE_DATA(inode)); in f2fs_make_empty_inline_dir()
413 static int f2fs_move_inline_dirents(struct inode *dir, struct folio *ifolio, in f2fs_move_inline_dirents()
440 fserror_report_file_metadata(dn.inode, err, GFP_NOFS); in f2fs_move_inline_dirents()
488 static int f2fs_add_inline_entries(struct inode *dir, void *inline_dentry) in f2fs_add_inline_entries()
547 static int f2fs_move_rehashed_dirents(struct inode *dir, struct folio *ifolio, in f2fs_move_rehashed_dirents()
597 static int do_convert_inline_dir(struct inode *dir, struct folio *ifolio, in do_convert_inline_dir()
606 int f2fs_try_convert_inline_dir(struct inode *dir, struct dentry *dentry) in f2fs_try_convert_inline_dir()
647 int f2fs_add_inline_entry(struct inode *dir, const struct f2fs_filename *fname, in f2fs_add_inline_entry()
648 struct inode *inode, nid_t ino, umode_t mode) in f2fs_add_inline_entry() argument
675 if (inode) { in f2fs_add_inline_entry()
676 f2fs_down_write_nested(&F2FS_I(inode)->i_sem, in f2fs_add_inline_entry()
678 folio = f2fs_init_inode_metadata(inode, dir, fname, ifolio); in f2fs_add_inline_entry()
693 if (inode) { in f2fs_add_inline_entry()
694 f2fs_i_pino_write(inode, dir->i_ino); in f2fs_add_inline_entry()
697 if (is_inode_flag_set(inode, FI_NEW_INODE)) in f2fs_add_inline_entry()
698 f2fs_update_inode(inode, folio); in f2fs_add_inline_entry()
703 f2fs_update_parent_metadata(dir, inode, 0); in f2fs_add_inline_entry()
705 if (inode) in f2fs_add_inline_entry()
706 f2fs_up_write(&F2FS_I(inode)->i_sem); in f2fs_add_inline_entry()
713 struct folio *folio, struct inode *dir, struct inode *inode) in f2fs_delete_inline_entry() argument
737 if (inode) in f2fs_delete_inline_entry()
738 f2fs_drop_nlink(dir, inode); in f2fs_delete_inline_entry()
741 bool f2fs_empty_inline_dir(struct inode *dir) in f2fs_empty_inline_dir()
769 struct inode *inode = file_inode(file); in f2fs_read_inline_dir() local
775 make_dentry_ptr_inline(inode, &d, inline_dentry); in f2fs_read_inline_dir()
780 ifolio = f2fs_get_inode_folio(F2FS_I_SB(inode), inode->i_ino); in f2fs_read_inline_dir()
790 inline_dentry = inline_data_addr(inode, ifolio); in f2fs_read_inline_dir()
792 make_dentry_ptr_inline(inode, &d, inline_dentry); in f2fs_read_inline_dir()
802 int f2fs_inline_data_fiemap(struct inode *inode, in f2fs_inline_data_fiemap() argument
812 ifolio = f2fs_get_inode_folio(F2FS_I_SB(inode), inode->i_ino); in f2fs_inline_data_fiemap()
816 if ((S_ISREG(inode->i_mode) || S_ISLNK(inode->i_mode)) && in f2fs_inline_data_fiemap()
817 !f2fs_has_inline_data(inode)) { in f2fs_inline_data_fiemap()
822 if (S_ISDIR(inode->i_mode) && !f2fs_has_inline_dentry(inode)) { in f2fs_inline_data_fiemap()
831 ifolio = f2fs_get_inode_folio(F2FS_I_SB(inode), inode->i_ino); in f2fs_inline_data_fiemap()
836 ilen = min_t(size_t, MAX_INLINE_DATA(inode), i_size_read(inode)); in f2fs_inline_data_fiemap()
843 err = f2fs_get_node_info(F2FS_I_SB(inode), inode->i_ino, &ni, false); in f2fs_inline_data_fiemap()
848 byteaddr = (__u64)ni.blk_addr << inode->i_sb->s_blocksize_bits; in f2fs_inline_data_fiemap()
849 byteaddr += (char *)inline_data_addr(inode, ifolio) - in f2fs_inline_data_fiemap()
852 f2fs_bug_on(F2FS_I_SB(inode), ni.blk_addr != NEW_ADDR); in f2fs_inline_data_fiemap()
856 trace_f2fs_fiemap(inode, start, byteaddr, ilen, flags, err); in f2fs_inline_data_fiemap()