• Home
  • Raw
  • Download

Lines Matching refs:inode

28 static int ext4_get_inline_size(struct inode *inode)  in ext4_get_inline_size()  argument
30 if (EXT4_I(inode)->i_inline_off) in ext4_get_inline_size()
31 return EXT4_I(inode)->i_inline_size; in ext4_get_inline_size()
36 static int get_max_inline_xattr_value_size(struct inode *inode, in get_max_inline_xattr_value_size() argument
44 min_offs = EXT4_SB(inode->i_sb)->s_inode_size - in get_max_inline_xattr_value_size()
46 EXT4_I(inode)->i_extra_isize - in get_max_inline_xattr_value_size()
54 if (!ext4_test_inode_state(inode, EXT4_STATE_XATTR)) in get_max_inline_xattr_value_size()
60 header = IHDR(inode, raw_inode); in get_max_inline_xattr_value_size()
74 if (EXT4_I(inode)->i_inline_off) { in get_max_inline_xattr_value_size()
76 ((void *)raw_inode + EXT4_I(inode)->i_inline_off); in get_max_inline_xattr_value_size()
98 int ext4_get_max_inline_size(struct inode *inode) in ext4_get_max_inline_size() argument
103 if (EXT4_I(inode)->i_extra_isize == 0) in ext4_get_max_inline_size()
106 error = ext4_get_inode_loc(inode, &iloc); in ext4_get_max_inline_size()
108 ext4_error_inode(inode, __func__, __LINE__, 0, in ext4_get_max_inline_size()
110 inode->i_ino); in ext4_get_max_inline_size()
114 down_read(&EXT4_I(inode)->xattr_sem); in ext4_get_max_inline_size()
115 max_inline_size = get_max_inline_xattr_value_size(inode, &iloc); in ext4_get_max_inline_size()
116 up_read(&EXT4_I(inode)->xattr_sem); in ext4_get_max_inline_size()
131 int ext4_find_inline_data_nolock(struct inode *inode) in ext4_find_inline_data_nolock() argument
142 if (EXT4_I(inode)->i_extra_isize == 0) in ext4_find_inline_data_nolock()
145 error = ext4_get_inode_loc(inode, &is.iloc); in ext4_find_inline_data_nolock()
149 error = ext4_xattr_ibody_find(inode, &i, &is); in ext4_find_inline_data_nolock()
154 EXT4_I(inode)->i_inline_off = (u16)((void *)is.s.here - in ext4_find_inline_data_nolock()
156 EXT4_I(inode)->i_inline_size = EXT4_MIN_INLINE_DATA_SIZE + in ext4_find_inline_data_nolock()
158 ext4_set_inode_state(inode, EXT4_STATE_MAY_INLINE_DATA); in ext4_find_inline_data_nolock()
165 static int ext4_read_inline_data(struct inode *inode, void *buffer, in ext4_read_inline_data() argument
177 BUG_ON(len > EXT4_I(inode)->i_inline_size); in ext4_read_inline_data()
191 header = IHDR(inode, raw_inode); in ext4_read_inline_data()
193 EXT4_I(inode)->i_inline_off); in ext4_read_inline_data()
211 static void ext4_write_inline_data(struct inode *inode, struct ext4_iloc *iloc, in ext4_write_inline_data() argument
219 BUG_ON(!EXT4_I(inode)->i_inline_off); in ext4_write_inline_data()
220 BUG_ON(pos + len > EXT4_I(inode)->i_inline_size); in ext4_write_inline_data()
239 header = IHDR(inode, raw_inode); in ext4_write_inline_data()
241 EXT4_I(inode)->i_inline_off); in ext4_write_inline_data()
248 struct inode *inode, unsigned len) in ext4_create_inline_data() argument
260 error = ext4_get_inode_loc(inode, &is.iloc); in ext4_create_inline_data()
281 error = ext4_xattr_ibody_find(inode, &i, &is); in ext4_create_inline_data()
287 error = ext4_xattr_ibody_inline_set(handle, inode, &i, &is); in ext4_create_inline_data()
290 ext4_clear_inode_state(inode, in ext4_create_inline_data()
298 EXT4_I(inode)->i_inline_off = (u16)((void *)is.s.here - in ext4_create_inline_data()
300 EXT4_I(inode)->i_inline_size = len + EXT4_MIN_INLINE_DATA_SIZE; in ext4_create_inline_data()
301 ext4_clear_inode_flag(inode, EXT4_INODE_EXTENTS); in ext4_create_inline_data()
302 ext4_set_inode_flag(inode, EXT4_INODE_INLINE_DATA); in ext4_create_inline_data()
304 error = ext4_mark_iloc_dirty(handle, inode, &is.iloc); in ext4_create_inline_data()
311 static int ext4_update_inline_data(handle_t *handle, struct inode *inode, in ext4_update_inline_data() argument
325 if (len <= EXT4_I(inode)->i_inline_size) in ext4_update_inline_data()
328 error = ext4_get_inode_loc(inode, &is.iloc); in ext4_update_inline_data()
332 error = ext4_xattr_ibody_find(inode, &i, &is); in ext4_update_inline_data()
345 error = ext4_xattr_ibody_get(inode, i.name_index, i.name, in ext4_update_inline_data()
359 error = ext4_xattr_ibody_inline_set(handle, inode, &i, &is); in ext4_update_inline_data()
363 EXT4_I(inode)->i_inline_off = (u16)((void *)is.s.here - in ext4_update_inline_data()
365 EXT4_I(inode)->i_inline_size = EXT4_MIN_INLINE_DATA_SIZE + in ext4_update_inline_data()
367 ext4_set_inode_state(inode, EXT4_STATE_MAY_INLINE_DATA); in ext4_update_inline_data()
369 error = ext4_mark_iloc_dirty(handle, inode, &is.iloc); in ext4_update_inline_data()
377 static int ext4_prepare_inline_data(handle_t *handle, struct inode *inode, in ext4_prepare_inline_data() argument
381 struct ext4_inode_info *ei = EXT4_I(inode); in ext4_prepare_inline_data()
383 if (!ext4_test_inode_state(inode, EXT4_STATE_MAY_INLINE_DATA)) in ext4_prepare_inline_data()
386 size = ext4_get_max_inline_size(inode); in ext4_prepare_inline_data()
390 ext4_write_lock_xattr(inode, &no_expand); in ext4_prepare_inline_data()
393 ret = ext4_update_inline_data(handle, inode, len); in ext4_prepare_inline_data()
395 ret = ext4_create_inline_data(handle, inode, len); in ext4_prepare_inline_data()
397 ext4_write_unlock_xattr(inode, &no_expand); in ext4_prepare_inline_data()
402 struct inode *inode) in ext4_destroy_inline_data_nolock() argument
404 struct ext4_inode_info *ei = EXT4_I(inode); in ext4_destroy_inline_data_nolock()
419 error = ext4_get_inode_loc(inode, &is.iloc); in ext4_destroy_inline_data_nolock()
423 error = ext4_xattr_ibody_find(inode, &i, &is); in ext4_destroy_inline_data_nolock()
432 error = ext4_xattr_ibody_inline_set(handle, inode, &i, &is); in ext4_destroy_inline_data_nolock()
440 if (ext4_has_feature_extents(inode->i_sb)) { in ext4_destroy_inline_data_nolock()
441 if (S_ISDIR(inode->i_mode) || in ext4_destroy_inline_data_nolock()
442 S_ISREG(inode->i_mode) || S_ISLNK(inode->i_mode)) { in ext4_destroy_inline_data_nolock()
443 ext4_set_inode_flag(inode, EXT4_INODE_EXTENTS); in ext4_destroy_inline_data_nolock()
444 ext4_ext_tree_init(handle, inode); in ext4_destroy_inline_data_nolock()
447 ext4_clear_inode_flag(inode, EXT4_INODE_INLINE_DATA); in ext4_destroy_inline_data_nolock()
450 error = ext4_mark_iloc_dirty(handle, inode, &is.iloc); in ext4_destroy_inline_data_nolock()
452 EXT4_I(inode)->i_inline_off = 0; in ext4_destroy_inline_data_nolock()
453 EXT4_I(inode)->i_inline_size = 0; in ext4_destroy_inline_data_nolock()
454 ext4_clear_inode_state(inode, EXT4_STATE_MAY_INLINE_DATA); in ext4_destroy_inline_data_nolock()
462 static int ext4_read_inline_page(struct inode *inode, struct page *page) in ext4_read_inline_page() argument
470 BUG_ON(!ext4_has_inline_data(inode)); in ext4_read_inline_page()
473 if (!EXT4_I(inode)->i_inline_off) { in ext4_read_inline_page()
474 ext4_warning(inode->i_sb, "inode %lu doesn't have inline data.", in ext4_read_inline_page()
475 inode->i_ino); in ext4_read_inline_page()
479 ret = ext4_get_inode_loc(inode, &iloc); in ext4_read_inline_page()
483 len = min_t(size_t, ext4_get_inline_size(inode), i_size_read(inode)); in ext4_read_inline_page()
485 ret = ext4_read_inline_data(inode, kaddr, len, &iloc); in ext4_read_inline_page()
496 int ext4_readpage_inline(struct inode *inode, struct page *page) in ext4_readpage_inline() argument
500 down_read(&EXT4_I(inode)->xattr_sem); in ext4_readpage_inline()
501 if (!ext4_has_inline_data(inode)) { in ext4_readpage_inline()
502 up_read(&EXT4_I(inode)->xattr_sem); in ext4_readpage_inline()
511 inode); in ext4_readpage_inline()
512 trace_android_fs_dataread_start(inode, page_offset(page), in ext4_readpage_inline()
522 ret = ext4_read_inline_page(inode, page); in ext4_readpage_inline()
528 trace_android_fs_dataread_end(inode, page_offset(page), PAGE_SIZE); in ext4_readpage_inline()
530 up_read(&EXT4_I(inode)->xattr_sem); in ext4_readpage_inline()
537 struct inode *inode, in ext4_convert_inline_data_to_extent() argument
547 if (!ext4_has_inline_data(inode)) { in ext4_convert_inline_data_to_extent()
552 ext4_clear_inode_state(inode, EXT4_STATE_MAY_INLINE_DATA); in ext4_convert_inline_data_to_extent()
556 needed_blocks = ext4_writepage_trans_blocks(inode); in ext4_convert_inline_data_to_extent()
558 ret = ext4_get_inode_loc(inode, &iloc); in ext4_convert_inline_data_to_extent()
563 handle = ext4_journal_start(inode, EXT4_HT_WRITE_PAGE, needed_blocks); in ext4_convert_inline_data_to_extent()
580 ext4_write_lock_xattr(inode, &no_expand); in ext4_convert_inline_data_to_extent()
583 if (!ext4_has_inline_data(inode)) { in ext4_convert_inline_data_to_extent()
589 to = ext4_get_inline_size(inode); in ext4_convert_inline_data_to_extent()
591 ret = ext4_read_inline_page(inode, page); in ext4_convert_inline_data_to_extent()
596 ret = ext4_destroy_inline_data_nolock(handle, inode); in ext4_convert_inline_data_to_extent()
600 if (ext4_should_dioread_nolock(inode)) in ext4_convert_inline_data_to_extent()
605 if (!ret && ext4_should_journal_data(inode)) { in ext4_convert_inline_data_to_extent()
615 ext4_orphan_add(handle, inode); in ext4_convert_inline_data_to_extent()
616 ext4_write_unlock_xattr(inode, &no_expand); in ext4_convert_inline_data_to_extent()
620 ext4_truncate_failed_write(inode); in ext4_convert_inline_data_to_extent()
627 if (inode->i_nlink) in ext4_convert_inline_data_to_extent()
628 ext4_orphan_del(NULL, inode); in ext4_convert_inline_data_to_extent()
631 if (ret == -ENOSPC && ext4_should_retry_alloc(inode->i_sb, &retries)) in ext4_convert_inline_data_to_extent()
642 ext4_write_unlock_xattr(inode, &no_expand); in ext4_convert_inline_data_to_extent()
656 struct inode *inode, in ext4_try_to_write_inline_data() argument
666 if (pos + len > ext4_get_max_inline_size(inode)) in ext4_try_to_write_inline_data()
669 ret = ext4_get_inode_loc(inode, &iloc); in ext4_try_to_write_inline_data()
677 handle = ext4_journal_start(inode, EXT4_HT_INODE, 1); in ext4_try_to_write_inline_data()
684 ret = ext4_prepare_inline_data(handle, inode, pos + len); in ext4_try_to_write_inline_data()
708 down_read(&EXT4_I(inode)->xattr_sem); in ext4_try_to_write_inline_data()
709 if (!ext4_has_inline_data(inode)) { in ext4_try_to_write_inline_data()
717 ret = ext4_read_inline_page(inode, page); in ext4_try_to_write_inline_data()
728 up_read(&EXT4_I(inode)->xattr_sem); in ext4_try_to_write_inline_data()
736 inode, flags); in ext4_try_to_write_inline_data()
739 int ext4_write_inline_data_end(struct inode *inode, loff_t pos, unsigned len, in ext4_write_inline_data_end() argument
753 ret = ext4_get_inode_loc(inode, &iloc); in ext4_write_inline_data_end()
755 ext4_std_error(inode->i_sb, ret); in ext4_write_inline_data_end()
760 ext4_write_lock_xattr(inode, &no_expand); in ext4_write_inline_data_end()
761 BUG_ON(!ext4_has_inline_data(inode)); in ext4_write_inline_data_end()
767 (void) ext4_find_inline_data_nolock(inode); in ext4_write_inline_data_end()
770 ext4_write_inline_data(inode, &iloc, kaddr, pos, len); in ext4_write_inline_data_end()
776 ext4_write_unlock_xattr(inode, &no_expand); in ext4_write_inline_data_end()
778 mark_inode_dirty(inode); in ext4_write_inline_data_end()
784 ext4_journalled_write_inline_data(struct inode *inode, in ext4_journalled_write_inline_data() argument
792 ret = ext4_get_inode_loc(inode, &iloc); in ext4_journalled_write_inline_data()
794 ext4_std_error(inode->i_sb, ret); in ext4_journalled_write_inline_data()
798 ext4_write_lock_xattr(inode, &no_expand); in ext4_journalled_write_inline_data()
800 ext4_write_inline_data(inode, &iloc, kaddr, 0, len); in ext4_journalled_write_inline_data()
802 ext4_write_unlock_xattr(inode, &no_expand); in ext4_journalled_write_inline_data()
817 struct inode *inode, in ext4_da_convert_inline_data_to_extent() argument
828 down_read(&EXT4_I(inode)->xattr_sem); in ext4_da_convert_inline_data_to_extent()
829 if (!ext4_has_inline_data(inode)) { in ext4_da_convert_inline_data_to_extent()
830 ext4_clear_inode_state(inode, EXT4_STATE_MAY_INLINE_DATA); in ext4_da_convert_inline_data_to_extent()
834 inline_size = ext4_get_inline_size(inode); in ext4_da_convert_inline_data_to_extent()
837 ret = ext4_read_inline_page(inode, page); in ext4_da_convert_inline_data_to_extent()
845 up_read(&EXT4_I(inode)->xattr_sem); in ext4_da_convert_inline_data_to_extent()
848 ext4_truncate_failed_write(inode); in ext4_da_convert_inline_data_to_extent()
854 ext4_clear_inode_state(inode, EXT4_STATE_MAY_INLINE_DATA); in ext4_da_convert_inline_data_to_extent()
858 up_read(&EXT4_I(inode)->xattr_sem); in ext4_da_convert_inline_data_to_extent()
875 struct inode *inode, in ext4_da_write_inline_data_begin() argument
887 ret = ext4_get_inode_loc(inode, &iloc); in ext4_da_write_inline_data_begin()
892 handle = ext4_journal_start(inode, EXT4_HT_INODE, 1); in ext4_da_write_inline_data_begin()
898 inline_size = ext4_get_max_inline_size(inode); in ext4_da_write_inline_data_begin()
902 ret = ext4_prepare_inline_data(handle, inode, pos + len); in ext4_da_write_inline_data_begin()
916 inode, in ext4_da_write_inline_data_begin()
920 ext4_should_retry_alloc(inode->i_sb, &retries)) in ext4_da_write_inline_data_begin()
931 down_read(&EXT4_I(inode)->xattr_sem); in ext4_da_write_inline_data_begin()
932 if (!ext4_has_inline_data(inode)) { in ext4_da_write_inline_data_begin()
938 ret = ext4_read_inline_page(inode, page); in ext4_da_write_inline_data_begin()
946 up_read(&EXT4_I(inode)->xattr_sem); in ext4_da_write_inline_data_begin()
951 up_read(&EXT4_I(inode)->xattr_sem); in ext4_da_write_inline_data_begin()
961 int ext4_da_write_inline_data_end(struct inode *inode, loff_t pos, in ext4_da_write_inline_data_end() argument
967 ret = ext4_write_inline_data_end(inode, pos, len, copied, page); in ext4_da_write_inline_data_end()
982 if (pos+copied > inode->i_size) in ext4_da_write_inline_data_end()
983 i_size_write(inode, pos+copied); in ext4_da_write_inline_data_end()
993 mark_inode_dirty(inode); in ext4_da_write_inline_data_end()
999 void ext4_show_inline_dir(struct inode *dir, struct buffer_head *bh, in ext4_show_inline_dir()
1013 de->name_len, le32_to_cpu(de->inode)); in ext4_show_inline_dir()
1034 struct inode *inode, in ext4_add_dirent_to_inline() argument
1038 struct inode *dir = d_inode(dentry->d_parent); in ext4_add_dirent_to_inline()
1042 err = ext4_find_dest_de(dir, inode, iloc->bh, inline_start, in ext4_add_dirent_to_inline()
1051 ext4_insert_dentry(dir, inode, de, inline_size, fname); in ext4_add_dirent_to_inline()
1073 static void *ext4_get_inline_xattr_pos(struct inode *inode, in ext4_get_inline_xattr_pos() argument
1079 BUG_ON(!EXT4_I(inode)->i_inline_off); in ext4_get_inline_xattr_pos()
1081 header = IHDR(inode, ext4_raw_inode(iloc)); in ext4_get_inline_xattr_pos()
1083 EXT4_I(inode)->i_inline_off); in ext4_get_inline_xattr_pos()
1109 de->inode = 0; in ext4_update_final_de()
1114 static int ext4_update_inline_dir(handle_t *handle, struct inode *dir, in ext4_update_inline_dir()
1136 static void ext4_restore_inline_data(handle_t *handle, struct inode *inode, in ext4_restore_inline_data() argument
1140 ext4_create_inline_data(handle, inode, inline_size); in ext4_restore_inline_data()
1141 ext4_write_inline_data(inode, iloc, buf, 0, inline_size); in ext4_restore_inline_data()
1142 ext4_set_inode_state(inode, EXT4_STATE_MAY_INLINE_DATA); in ext4_restore_inline_data()
1146 struct inode *inode, in ext4_finish_convert_inline_dir() argument
1161 de = ext4_init_dot_dotdot(inode, de, in ext4_finish_convert_inline_dir()
1162 inode->i_sb->s_blocksize, csum_size, in ext4_finish_convert_inline_dir()
1163 le32_to_cpu(((struct ext4_dir_entry_2 *)buf)->inode), 1); in ext4_finish_convert_inline_dir()
1169 if (ext4_has_metadata_csum(inode->i_sb)) in ext4_finish_convert_inline_dir()
1172 inode->i_size = inode->i_sb->s_blocksize; in ext4_finish_convert_inline_dir()
1173 i_size_write(inode, inode->i_sb->s_blocksize); in ext4_finish_convert_inline_dir()
1174 EXT4_I(inode)->i_disksize = inode->i_sb->s_blocksize; in ext4_finish_convert_inline_dir()
1177 inode->i_sb->s_blocksize - csum_size); in ext4_finish_convert_inline_dir()
1181 inode->i_sb->s_blocksize); in ext4_finish_convert_inline_dir()
1182 initialize_dirent_tail(t, inode->i_sb->s_blocksize); in ext4_finish_convert_inline_dir()
1185 err = ext4_handle_dirty_dirent_node(handle, inode, dir_block); in ext4_finish_convert_inline_dir()
1189 return ext4_mark_inode_dirty(handle, inode); in ext4_finish_convert_inline_dir()
1193 struct inode *inode, in ext4_convert_inline_data_nolock() argument
1202 inline_size = ext4_get_inline_size(inode); in ext4_convert_inline_data_nolock()
1209 error = ext4_read_inline_data(inode, buf, inline_size, iloc); in ext4_convert_inline_data_nolock()
1217 if (S_ISDIR(inode->i_mode)) { in ext4_convert_inline_data_nolock()
1218 error = ext4_check_all_de(inode, iloc->bh, in ext4_convert_inline_data_nolock()
1225 error = ext4_destroy_inline_data_nolock(handle, inode); in ext4_convert_inline_data_nolock()
1232 error = ext4_map_blocks(handle, inode, &map, EXT4_GET_BLOCKS_CREATE); in ext4_convert_inline_data_nolock()
1240 data_bh = sb_getblk(inode->i_sb, map.m_pblk); in ext4_convert_inline_data_nolock()
1253 memset(data_bh->b_data, 0, inode->i_sb->s_blocksize); in ext4_convert_inline_data_nolock()
1255 if (!S_ISDIR(inode->i_mode)) { in ext4_convert_inline_data_nolock()
1259 inode, data_bh); in ext4_convert_inline_data_nolock()
1261 error = ext4_finish_convert_inline_dir(handle, inode, data_bh, in ext4_convert_inline_data_nolock()
1268 ext4_restore_inline_data(handle, inode, iloc, buf, inline_size); in ext4_convert_inline_data_nolock()
1282 struct dentry *dentry, struct inode *inode) in ext4_try_add_inline_entry() argument
1287 struct inode *dir = d_inode(dentry->d_parent); in ext4_try_add_inline_entry()
1301 ret = ext4_add_dirent_to_inline(handle, fname, dentry, inode, &iloc, in ext4_try_add_inline_entry()
1323 inode, &iloc, inline_start, in ext4_try_add_inline_entry()
1350 struct inode *dir, ext4_lblk_t block, in htree_inlinedir_to_tree()
1359 struct inode *inode = file_inode(dir_file); in htree_inlinedir_to_tree() local
1366 ret = ext4_get_inode_loc(inode, &iloc); in htree_inlinedir_to_tree()
1370 down_read(&EXT4_I(inode)->xattr_sem); in htree_inlinedir_to_tree()
1371 if (!ext4_has_inline_data(inode)) { in htree_inlinedir_to_tree()
1372 up_read(&EXT4_I(inode)->xattr_sem); in htree_inlinedir_to_tree()
1377 inline_size = ext4_get_inline_size(inode); in htree_inlinedir_to_tree()
1381 up_read(&EXT4_I(inode)->xattr_sem); in htree_inlinedir_to_tree()
1385 ret = ext4_read_inline_data(inode, dir_buf, inline_size, &iloc); in htree_inlinedir_to_tree()
1386 up_read(&EXT4_I(inode)->xattr_sem); in htree_inlinedir_to_tree()
1391 parent_ino = le32_to_cpu(((struct ext4_dir_entry_2 *)dir_buf)->inode); in htree_inlinedir_to_tree()
1399 fake.inode = cpu_to_le32(inode->i_ino); in htree_inlinedir_to_tree()
1405 ext4_set_de_type(inode->i_sb, &fake, S_IFDIR); in htree_inlinedir_to_tree()
1409 fake.inode = cpu_to_le32(parent_ino); in htree_inlinedir_to_tree()
1415 ext4_set_de_type(inode->i_sb, &fake, S_IFDIR); in htree_inlinedir_to_tree()
1421 if (ext4_check_dir_entry(inode, dir_file, de, in htree_inlinedir_to_tree()
1434 if (de->inode == 0) in htree_inlinedir_to_tree()
1469 struct inode *inode = file_inode(file); in ext4_read_inline_dir() local
1475 ret = ext4_get_inode_loc(inode, &iloc); in ext4_read_inline_dir()
1479 down_read(&EXT4_I(inode)->xattr_sem); in ext4_read_inline_dir()
1480 if (!ext4_has_inline_data(inode)) { in ext4_read_inline_dir()
1481 up_read(&EXT4_I(inode)->xattr_sem); in ext4_read_inline_dir()
1486 inline_size = ext4_get_inline_size(inode); in ext4_read_inline_dir()
1490 up_read(&EXT4_I(inode)->xattr_sem); in ext4_read_inline_dir()
1494 ret = ext4_read_inline_data(inode, dir_buf, inline_size, &iloc); in ext4_read_inline_dir()
1495 up_read(&EXT4_I(inode)->xattr_sem); in ext4_read_inline_dir()
1500 sb = inode->i_sb; in ext4_read_inline_dir()
1501 parent_ino = le32_to_cpu(((struct ext4_dir_entry_2 *)dir_buf)->inode); in ext4_read_inline_dir()
1522 if (file->f_version != inode->i_version) { in ext4_read_inline_dir()
1554 file->f_version = inode->i_version; in ext4_read_inline_dir()
1559 if (!dir_emit(ctx, ".", 1, inode->i_ino, DT_DIR)) in ext4_read_inline_dir()
1574 if (ext4_check_dir_entry(inode, file, de, iloc.bh, dir_buf, in ext4_read_inline_dir()
1577 if (le32_to_cpu(de->inode)) { in ext4_read_inline_dir()
1579 le32_to_cpu(de->inode), in ext4_read_inline_dir()
1591 struct buffer_head *ext4_get_first_inline_block(struct inode *inode, in ext4_get_first_inline_block() argument
1597 *retval = ext4_get_inode_loc(inode, &iloc); in ext4_get_first_inline_block()
1611 int ext4_try_create_inline_dir(handle_t *handle, struct inode *parent, in ext4_try_create_inline_dir()
1612 struct inode *inode) in ext4_try_create_inline_dir() argument
1618 ret = ext4_get_inode_loc(inode, &iloc); in ext4_try_create_inline_dir()
1622 ret = ext4_prepare_inline_data(handle, inode, inline_size); in ext4_try_create_inline_dir()
1631 de->inode = cpu_to_le32(parent->i_ino); in ext4_try_create_inline_dir()
1633 de->inode = 0; in ext4_try_create_inline_dir()
1637 set_nlink(inode, 2); in ext4_try_create_inline_dir()
1638 inode->i_size = EXT4_I(inode)->i_disksize = inline_size; in ext4_try_create_inline_dir()
1644 struct buffer_head *ext4_find_inline_entry(struct inode *dir, in ext4_find_inline_entry()
1694 struct inode *dir, in ext4_delete_inline_entry()
1753 ext4_get_inline_entry(struct inode *inode, in ext4_get_inline_entry() argument
1761 BUG_ON(offset > ext4_get_inline_size(inode)); in ext4_get_inline_entry()
1767 inline_pos = ext4_get_inline_xattr_pos(inode, iloc); in ext4_get_inline_entry()
1769 *inline_size = ext4_get_inline_size(inode) - in ext4_get_inline_entry()
1778 int empty_inline_dir(struct inode *dir, int *has_inline_data) in empty_inline_dir()
1802 if (!le32_to_cpu(de->inode)) { in empty_inline_dir()
1822 dir->i_ino, le32_to_cpu(de->inode), in empty_inline_dir()
1828 if (le32_to_cpu(de->inode)) { in empty_inline_dir()
1841 int ext4_destroy_inline_data(handle_t *handle, struct inode *inode) in ext4_destroy_inline_data() argument
1845 ext4_write_lock_xattr(inode, &no_expand); in ext4_destroy_inline_data()
1846 ret = ext4_destroy_inline_data_nolock(handle, inode); in ext4_destroy_inline_data()
1847 ext4_write_unlock_xattr(inode, &no_expand); in ext4_destroy_inline_data()
1852 int ext4_inline_data_fiemap(struct inode *inode, in ext4_inline_data_fiemap() argument
1863 down_read(&EXT4_I(inode)->xattr_sem); in ext4_inline_data_fiemap()
1864 if (!ext4_has_inline_data(inode)) { in ext4_inline_data_fiemap()
1868 inline_len = min_t(size_t, ext4_get_inline_size(inode), in ext4_inline_data_fiemap()
1869 i_size_read(inode)); in ext4_inline_data_fiemap()
1876 error = ext4_get_inode_loc(inode, &iloc); in ext4_inline_data_fiemap()
1880 physical = (__u64)iloc.bh->b_blocknr << inode->i_sb->s_blocksize_bits; in ext4_inline_data_fiemap()
1886 up_read(&EXT4_I(inode)->xattr_sem); in ext4_inline_data_fiemap()
1893 void ext4_inline_data_truncate(struct inode *inode, int *has_inline) in ext4_inline_data_truncate() argument
1908 needed_blocks = ext4_writepage_trans_blocks(inode); in ext4_inline_data_truncate()
1909 handle = ext4_journal_start(inode, EXT4_HT_INODE, needed_blocks); in ext4_inline_data_truncate()
1913 ext4_write_lock_xattr(inode, &no_expand); in ext4_inline_data_truncate()
1914 if (!ext4_has_inline_data(inode)) { in ext4_inline_data_truncate()
1915 ext4_write_unlock_xattr(inode, &no_expand); in ext4_inline_data_truncate()
1921 if (ext4_orphan_add(handle, inode)) in ext4_inline_data_truncate()
1924 if (ext4_get_inode_loc(inode, &is.iloc)) in ext4_inline_data_truncate()
1927 down_write(&EXT4_I(inode)->i_data_sem); in ext4_inline_data_truncate()
1928 i_size = inode->i_size; in ext4_inline_data_truncate()
1929 inline_size = ext4_get_inline_size(inode); in ext4_inline_data_truncate()
1930 EXT4_I(inode)->i_disksize = i_size; in ext4_inline_data_truncate()
1935 if (ext4_xattr_ibody_find(inode, &i, &is)) in ext4_inline_data_truncate()
1945 if (ext4_xattr_ibody_get(inode, i.name_index, i.name, in ext4_inline_data_truncate()
1952 if (ext4_xattr_ibody_inline_set(handle, inode, &i, &is)) in ext4_inline_data_truncate()
1963 EXT4_I(inode)->i_inline_size = i_size < in ext4_inline_data_truncate()
1969 up_write(&EXT4_I(inode)->i_data_sem); in ext4_inline_data_truncate()
1972 ext4_write_unlock_xattr(inode, &no_expand); in ext4_inline_data_truncate()
1974 if (inode->i_nlink) in ext4_inline_data_truncate()
1975 ext4_orphan_del(handle, inode); in ext4_inline_data_truncate()
1977 inode->i_mtime = inode->i_ctime = ext4_current_time(inode); in ext4_inline_data_truncate()
1978 ext4_mark_inode_dirty(handle, inode); in ext4_inline_data_truncate()
1979 if (IS_SYNC(inode)) in ext4_inline_data_truncate()
1986 int ext4_convert_inline_data(struct inode *inode) in ext4_convert_inline_data() argument
1992 if (!ext4_has_inline_data(inode)) { in ext4_convert_inline_data()
1993 ext4_clear_inode_state(inode, EXT4_STATE_MAY_INLINE_DATA); in ext4_convert_inline_data()
1997 needed_blocks = ext4_writepage_trans_blocks(inode); in ext4_convert_inline_data()
2000 error = ext4_get_inode_loc(inode, &iloc); in ext4_convert_inline_data()
2004 handle = ext4_journal_start(inode, EXT4_HT_WRITE_PAGE, needed_blocks); in ext4_convert_inline_data()
2010 ext4_write_lock_xattr(inode, &no_expand); in ext4_convert_inline_data()
2011 if (ext4_has_inline_data(inode)) in ext4_convert_inline_data()
2012 error = ext4_convert_inline_data_nolock(handle, inode, &iloc); in ext4_convert_inline_data()
2013 ext4_write_unlock_xattr(inode, &no_expand); in ext4_convert_inline_data()