Lines Matching refs:inode

22 static int ext4_get_inline_size(struct inode *inode)  in ext4_get_inline_size()  argument
24 if (EXT4_I(inode)->i_inline_off) in ext4_get_inline_size()
25 return EXT4_I(inode)->i_inline_size; in ext4_get_inline_size()
30 static int get_max_inline_xattr_value_size(struct inode *inode, in get_max_inline_xattr_value_size() argument
38 if (!EXT4_INODE_HAS_XATTR_SPACE(inode)) in get_max_inline_xattr_value_size()
41 min_offs = EXT4_SB(inode->i_sb)->s_inode_size - in get_max_inline_xattr_value_size()
43 EXT4_I(inode)->i_extra_isize - in get_max_inline_xattr_value_size()
51 if (!ext4_test_inode_state(inode, EXT4_STATE_XATTR)) in get_max_inline_xattr_value_size()
57 header = IHDR(inode, raw_inode); in get_max_inline_xattr_value_size()
71 if (EXT4_I(inode)->i_inline_off) { in get_max_inline_xattr_value_size()
73 ((void *)raw_inode + EXT4_I(inode)->i_inline_off); in get_max_inline_xattr_value_size()
95 int ext4_get_max_inline_size(struct inode *inode) in ext4_get_max_inline_size() argument
100 if (EXT4_I(inode)->i_extra_isize == 0) in ext4_get_max_inline_size()
103 error = ext4_get_inode_loc(inode, &iloc); in ext4_get_max_inline_size()
105 ext4_error_inode_err(inode, __func__, __LINE__, 0, -error, in ext4_get_max_inline_size()
107 inode->i_ino); in ext4_get_max_inline_size()
111 down_read(&EXT4_I(inode)->xattr_sem); in ext4_get_max_inline_size()
112 max_inline_size = get_max_inline_xattr_value_size(inode, &iloc); in ext4_get_max_inline_size()
113 up_read(&EXT4_I(inode)->xattr_sem); in ext4_get_max_inline_size()
128 int ext4_find_inline_data_nolock(struct inode *inode) in ext4_find_inline_data_nolock() argument
139 if (EXT4_I(inode)->i_extra_isize == 0) in ext4_find_inline_data_nolock()
142 error = ext4_get_inode_loc(inode, &is.iloc); in ext4_find_inline_data_nolock()
146 error = ext4_xattr_ibody_find(inode, &i, &is); in ext4_find_inline_data_nolock()
152 EXT4_ERROR_INODE(inode, "inline data xattr refers " in ext4_find_inline_data_nolock()
157 EXT4_I(inode)->i_inline_off = (u16)((void *)is.s.here - in ext4_find_inline_data_nolock()
159 EXT4_I(inode)->i_inline_size = EXT4_MIN_INLINE_DATA_SIZE + in ext4_find_inline_data_nolock()
161 ext4_set_inode_state(inode, EXT4_STATE_MAY_INLINE_DATA); in ext4_find_inline_data_nolock()
168 static int ext4_read_inline_data(struct inode *inode, void *buffer, in ext4_read_inline_data() argument
180 BUG_ON(len > EXT4_I(inode)->i_inline_size); in ext4_read_inline_data()
194 header = IHDR(inode, raw_inode); in ext4_read_inline_data()
196 EXT4_I(inode)->i_inline_off); in ext4_read_inline_data()
214 static void ext4_write_inline_data(struct inode *inode, struct ext4_iloc *iloc, in ext4_write_inline_data() argument
222 if (unlikely(ext4_forced_shutdown(EXT4_SB(inode->i_sb)))) in ext4_write_inline_data()
225 BUG_ON(!EXT4_I(inode)->i_inline_off); in ext4_write_inline_data()
226 BUG_ON(pos + len > EXT4_I(inode)->i_inline_size); in ext4_write_inline_data()
245 header = IHDR(inode, raw_inode); in ext4_write_inline_data()
247 EXT4_I(inode)->i_inline_off); in ext4_write_inline_data()
254 struct inode *inode, unsigned len) in ext4_create_inline_data() argument
266 error = ext4_get_inode_loc(inode, &is.iloc); in ext4_create_inline_data()
287 error = ext4_xattr_ibody_find(inode, &i, &is); in ext4_create_inline_data()
293 error = ext4_xattr_ibody_inline_set(handle, inode, &i, &is); in ext4_create_inline_data()
296 ext4_clear_inode_state(inode, in ext4_create_inline_data()
304 EXT4_I(inode)->i_inline_off = (u16)((void *)is.s.here - in ext4_create_inline_data()
306 EXT4_I(inode)->i_inline_size = len + EXT4_MIN_INLINE_DATA_SIZE; in ext4_create_inline_data()
307 ext4_clear_inode_flag(inode, EXT4_INODE_EXTENTS); in ext4_create_inline_data()
308 ext4_set_inode_flag(inode, EXT4_INODE_INLINE_DATA); in ext4_create_inline_data()
310 error = ext4_mark_iloc_dirty(handle, inode, &is.iloc); in ext4_create_inline_data()
317 static int ext4_update_inline_data(handle_t *handle, struct inode *inode, in ext4_update_inline_data() argument
331 if (len <= EXT4_I(inode)->i_inline_size) in ext4_update_inline_data()
334 error = ext4_get_inode_loc(inode, &is.iloc); in ext4_update_inline_data()
338 error = ext4_xattr_ibody_find(inode, &i, &is); in ext4_update_inline_data()
351 error = ext4_xattr_ibody_get(inode, i.name_index, i.name, in ext4_update_inline_data()
365 error = ext4_xattr_ibody_inline_set(handle, inode, &i, &is); in ext4_update_inline_data()
369 EXT4_I(inode)->i_inline_off = (u16)((void *)is.s.here - in ext4_update_inline_data()
371 EXT4_I(inode)->i_inline_size = EXT4_MIN_INLINE_DATA_SIZE + in ext4_update_inline_data()
373 ext4_set_inode_state(inode, EXT4_STATE_MAY_INLINE_DATA); in ext4_update_inline_data()
375 error = ext4_mark_iloc_dirty(handle, inode, &is.iloc); in ext4_update_inline_data()
383 static int ext4_prepare_inline_data(handle_t *handle, struct inode *inode, in ext4_prepare_inline_data() argument
387 struct ext4_inode_info *ei = EXT4_I(inode); in ext4_prepare_inline_data()
389 if (!ext4_test_inode_state(inode, EXT4_STATE_MAY_INLINE_DATA)) in ext4_prepare_inline_data()
392 size = ext4_get_max_inline_size(inode); in ext4_prepare_inline_data()
396 ext4_write_lock_xattr(inode, &no_expand); in ext4_prepare_inline_data()
399 ret = ext4_update_inline_data(handle, inode, len); in ext4_prepare_inline_data()
401 ret = ext4_create_inline_data(handle, inode, len); in ext4_prepare_inline_data()
403 ext4_write_unlock_xattr(inode, &no_expand); in ext4_prepare_inline_data()
408 struct inode *inode) in ext4_destroy_inline_data_nolock() argument
410 struct ext4_inode_info *ei = EXT4_I(inode); in ext4_destroy_inline_data_nolock()
425 error = ext4_get_inode_loc(inode, &is.iloc); in ext4_destroy_inline_data_nolock()
429 error = ext4_xattr_ibody_find(inode, &i, &is); in ext4_destroy_inline_data_nolock()
438 error = ext4_xattr_ibody_inline_set(handle, inode, &i, &is); in ext4_destroy_inline_data_nolock()
446 if (ext4_has_feature_extents(inode->i_sb)) { in ext4_destroy_inline_data_nolock()
447 if (S_ISDIR(inode->i_mode) || in ext4_destroy_inline_data_nolock()
448 S_ISREG(inode->i_mode) || S_ISLNK(inode->i_mode)) { in ext4_destroy_inline_data_nolock()
449 ext4_set_inode_flag(inode, EXT4_INODE_EXTENTS); in ext4_destroy_inline_data_nolock()
450 ext4_ext_tree_init(handle, inode); in ext4_destroy_inline_data_nolock()
453 ext4_clear_inode_flag(inode, EXT4_INODE_INLINE_DATA); in ext4_destroy_inline_data_nolock()
456 error = ext4_mark_iloc_dirty(handle, inode, &is.iloc); in ext4_destroy_inline_data_nolock()
458 EXT4_I(inode)->i_inline_off = 0; in ext4_destroy_inline_data_nolock()
459 EXT4_I(inode)->i_inline_size = 0; in ext4_destroy_inline_data_nolock()
460 ext4_clear_inode_state(inode, EXT4_STATE_MAY_INLINE_DATA); in ext4_destroy_inline_data_nolock()
468 static int ext4_read_inline_page(struct inode *inode, struct page *page) in ext4_read_inline_page() argument
476 BUG_ON(!ext4_has_inline_data(inode)); in ext4_read_inline_page()
479 if (!EXT4_I(inode)->i_inline_off) { in ext4_read_inline_page()
480 ext4_warning(inode->i_sb, "inode %lu doesn't have inline data.", in ext4_read_inline_page()
481 inode->i_ino); in ext4_read_inline_page()
485 ret = ext4_get_inode_loc(inode, &iloc); in ext4_read_inline_page()
489 len = min_t(size_t, ext4_get_inline_size(inode), i_size_read(inode)); in ext4_read_inline_page()
491 ret = ext4_read_inline_data(inode, kaddr, len, &iloc); in ext4_read_inline_page()
502 int ext4_readpage_inline(struct inode *inode, struct page *page) in ext4_readpage_inline() argument
506 down_read(&EXT4_I(inode)->xattr_sem); in ext4_readpage_inline()
507 if (!ext4_has_inline_data(inode)) { in ext4_readpage_inline()
508 up_read(&EXT4_I(inode)->xattr_sem); in ext4_readpage_inline()
517 inode); in ext4_readpage_inline()
518 trace_android_fs_dataread_start(inode, page_offset(page), in ext4_readpage_inline()
528 ret = ext4_read_inline_page(inode, page); in ext4_readpage_inline()
534 trace_android_fs_dataread_end(inode, page_offset(page), PAGE_SIZE); in ext4_readpage_inline()
536 up_read(&EXT4_I(inode)->xattr_sem); in ext4_readpage_inline()
543 struct inode *inode, in ext4_convert_inline_data_to_extent() argument
553 if (!ext4_has_inline_data(inode)) { in ext4_convert_inline_data_to_extent()
558 ext4_clear_inode_state(inode, EXT4_STATE_MAY_INLINE_DATA); in ext4_convert_inline_data_to_extent()
562 needed_blocks = ext4_writepage_trans_blocks(inode); in ext4_convert_inline_data_to_extent()
564 ret = ext4_get_inode_loc(inode, &iloc); in ext4_convert_inline_data_to_extent()
569 handle = ext4_journal_start(inode, EXT4_HT_WRITE_PAGE, needed_blocks); in ext4_convert_inline_data_to_extent()
586 ext4_write_lock_xattr(inode, &no_expand); in ext4_convert_inline_data_to_extent()
589 if (!ext4_has_inline_data(inode)) { in ext4_convert_inline_data_to_extent()
595 to = ext4_get_inline_size(inode); in ext4_convert_inline_data_to_extent()
597 ret = ext4_read_inline_page(inode, page); in ext4_convert_inline_data_to_extent()
602 ret = ext4_destroy_inline_data_nolock(handle, inode); in ext4_convert_inline_data_to_extent()
606 if (ext4_should_dioread_nolock(inode)) { in ext4_convert_inline_data_to_extent()
612 if (!ret && ext4_should_journal_data(inode)) { in ext4_convert_inline_data_to_extent()
622 ext4_orphan_add(handle, inode); in ext4_convert_inline_data_to_extent()
623 ext4_write_unlock_xattr(inode, &no_expand); in ext4_convert_inline_data_to_extent()
627 ext4_truncate_failed_write(inode); in ext4_convert_inline_data_to_extent()
634 if (inode->i_nlink) in ext4_convert_inline_data_to_extent()
635 ext4_orphan_del(NULL, inode); in ext4_convert_inline_data_to_extent()
638 if (ret == -ENOSPC && ext4_should_retry_alloc(inode->i_sb, &retries)) in ext4_convert_inline_data_to_extent()
649 ext4_write_unlock_xattr(inode, &no_expand); in ext4_convert_inline_data_to_extent()
663 struct inode *inode, in ext4_try_to_write_inline_data() argument
673 if (pos + len > ext4_get_max_inline_size(inode)) in ext4_try_to_write_inline_data()
676 ret = ext4_get_inode_loc(inode, &iloc); in ext4_try_to_write_inline_data()
684 handle = ext4_journal_start(inode, EXT4_HT_INODE, 1); in ext4_try_to_write_inline_data()
691 ret = ext4_prepare_inline_data(handle, inode, pos + len); in ext4_try_to_write_inline_data()
715 down_read(&EXT4_I(inode)->xattr_sem); in ext4_try_to_write_inline_data()
716 if (!ext4_has_inline_data(inode)) { in ext4_try_to_write_inline_data()
724 ret = ext4_read_inline_page(inode, page); in ext4_try_to_write_inline_data()
735 up_read(&EXT4_I(inode)->xattr_sem); in ext4_try_to_write_inline_data()
743 inode, flags); in ext4_try_to_write_inline_data()
746 int ext4_write_inline_data_end(struct inode *inode, loff_t pos, unsigned len, in ext4_write_inline_data_end() argument
756 ret = ext4_get_inode_loc(inode, &iloc); in ext4_write_inline_data_end()
758 ext4_std_error(inode->i_sb, ret); in ext4_write_inline_data_end()
762 ext4_write_lock_xattr(inode, &no_expand); in ext4_write_inline_data_end()
763 BUG_ON(!ext4_has_inline_data(inode)); in ext4_write_inline_data_end()
769 (void) ext4_find_inline_data_nolock(inode); in ext4_write_inline_data_end()
772 ext4_write_inline_data(inode, &iloc, kaddr, pos, copied); in ext4_write_inline_data_end()
778 ext4_write_unlock_xattr(inode, &no_expand); in ext4_write_inline_data_end()
780 mark_inode_dirty(inode); in ext4_write_inline_data_end()
786 ext4_journalled_write_inline_data(struct inode *inode, in ext4_journalled_write_inline_data() argument
794 ret = ext4_get_inode_loc(inode, &iloc); in ext4_journalled_write_inline_data()
796 ext4_std_error(inode->i_sb, ret); in ext4_journalled_write_inline_data()
800 ext4_write_lock_xattr(inode, &no_expand); in ext4_journalled_write_inline_data()
802 ext4_write_inline_data(inode, &iloc, kaddr, 0, len); in ext4_journalled_write_inline_data()
804 ext4_write_unlock_xattr(inode, &no_expand); in ext4_journalled_write_inline_data()
819 struct inode *inode, in ext4_da_convert_inline_data_to_extent() argument
830 down_read(&EXT4_I(inode)->xattr_sem); in ext4_da_convert_inline_data_to_extent()
831 if (!ext4_has_inline_data(inode)) { in ext4_da_convert_inline_data_to_extent()
832 ext4_clear_inode_state(inode, EXT4_STATE_MAY_INLINE_DATA); in ext4_da_convert_inline_data_to_extent()
836 inline_size = ext4_get_inline_size(inode); in ext4_da_convert_inline_data_to_extent()
839 ret = ext4_read_inline_page(inode, page); in ext4_da_convert_inline_data_to_extent()
847 up_read(&EXT4_I(inode)->xattr_sem); in ext4_da_convert_inline_data_to_extent()
850 ext4_truncate_failed_write(inode); in ext4_da_convert_inline_data_to_extent()
856 ext4_clear_inode_state(inode, EXT4_STATE_MAY_INLINE_DATA); in ext4_da_convert_inline_data_to_extent()
860 up_read(&EXT4_I(inode)->xattr_sem); in ext4_da_convert_inline_data_to_extent()
877 struct inode *inode, in ext4_da_write_inline_data_begin() argument
889 ret = ext4_get_inode_loc(inode, &iloc); in ext4_da_write_inline_data_begin()
894 handle = ext4_journal_start(inode, EXT4_HT_INODE, 1); in ext4_da_write_inline_data_begin()
900 inline_size = ext4_get_max_inline_size(inode); in ext4_da_write_inline_data_begin()
904 ret = ext4_prepare_inline_data(handle, inode, pos + len); in ext4_da_write_inline_data_begin()
918 inode, in ext4_da_write_inline_data_begin()
922 ext4_should_retry_alloc(inode->i_sb, &retries)) in ext4_da_write_inline_data_begin()
933 down_read(&EXT4_I(inode)->xattr_sem); in ext4_da_write_inline_data_begin()
934 if (!ext4_has_inline_data(inode)) { in ext4_da_write_inline_data_begin()
940 ret = ext4_read_inline_page(inode, page); in ext4_da_write_inline_data_begin()
948 up_read(&EXT4_I(inode)->xattr_sem); in ext4_da_write_inline_data_begin()
953 up_read(&EXT4_I(inode)->xattr_sem); in ext4_da_write_inline_data_begin()
963 int ext4_da_write_inline_data_end(struct inode *inode, loff_t pos, in ext4_da_write_inline_data_end() argument
969 ret = ext4_write_inline_data_end(inode, pos, len, copied, page); in ext4_da_write_inline_data_end()
984 if (pos+copied > inode->i_size) in ext4_da_write_inline_data_end()
985 i_size_write(inode, pos+copied); in ext4_da_write_inline_data_end()
995 mark_inode_dirty(inode); in ext4_da_write_inline_data_end()
1001 void ext4_show_inline_dir(struct inode *dir, struct buffer_head *bh, in ext4_show_inline_dir()
1015 de->name_len, le32_to_cpu(de->inode)); in ext4_show_inline_dir()
1035 struct inode *dir, in ext4_add_dirent_to_inline()
1036 struct inode *inode, in ext4_add_dirent_to_inline() argument
1043 err = ext4_find_dest_de(dir, inode, 0, iloc->bh, inline_start, in ext4_add_dirent_to_inline()
1052 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
1142 ret = ext4_create_inline_data(handle, inode, inline_size); in ext4_restore_inline_data()
1144 ext4_msg(inode->i_sb, KERN_EMERG, in ext4_restore_inline_data()
1146 inode->i_ino, ret); in ext4_restore_inline_data()
1149 ext4_write_inline_data(inode, iloc, buf, 0, inline_size); in ext4_restore_inline_data()
1150 ext4_set_inode_state(inode, EXT4_STATE_MAY_INLINE_DATA); in ext4_restore_inline_data()
1154 struct inode *inode, in ext4_finish_convert_inline_dir() argument
1168 de = ext4_init_dot_dotdot(inode, de, in ext4_finish_convert_inline_dir()
1169 inode->i_sb->s_blocksize, csum_size, in ext4_finish_convert_inline_dir()
1170 le32_to_cpu(((struct ext4_dir_entry_2 *)buf)->inode), 1); in ext4_finish_convert_inline_dir()
1176 if (ext4_has_metadata_csum(inode->i_sb)) in ext4_finish_convert_inline_dir()
1179 inode->i_size = inode->i_sb->s_blocksize; in ext4_finish_convert_inline_dir()
1180 i_size_write(inode, inode->i_sb->s_blocksize); in ext4_finish_convert_inline_dir()
1181 EXT4_I(inode)->i_disksize = inode->i_sb->s_blocksize; in ext4_finish_convert_inline_dir()
1184 inode->i_sb->s_blocksize - csum_size); in ext4_finish_convert_inline_dir()
1188 inode->i_sb->s_blocksize); in ext4_finish_convert_inline_dir()
1190 err = ext4_handle_dirty_dirblock(handle, inode, dir_block); in ext4_finish_convert_inline_dir()
1194 return ext4_mark_inode_dirty(handle, inode); in ext4_finish_convert_inline_dir()
1198 struct inode *inode, in ext4_convert_inline_data_nolock() argument
1207 inline_size = ext4_get_inline_size(inode); in ext4_convert_inline_data_nolock()
1214 error = ext4_read_inline_data(inode, buf, inline_size, iloc); in ext4_convert_inline_data_nolock()
1222 if (S_ISDIR(inode->i_mode)) { in ext4_convert_inline_data_nolock()
1223 error = ext4_check_all_de(inode, iloc->bh, in ext4_convert_inline_data_nolock()
1230 error = ext4_destroy_inline_data_nolock(handle, inode); in ext4_convert_inline_data_nolock()
1237 error = ext4_map_blocks(handle, inode, &map, EXT4_GET_BLOCKS_CREATE); in ext4_convert_inline_data_nolock()
1245 data_bh = sb_getblk(inode->i_sb, map.m_pblk); in ext4_convert_inline_data_nolock()
1258 memset(data_bh->b_data, 0, inode->i_sb->s_blocksize); in ext4_convert_inline_data_nolock()
1260 if (!S_ISDIR(inode->i_mode)) { in ext4_convert_inline_data_nolock()
1264 inode, data_bh); in ext4_convert_inline_data_nolock()
1266 error = ext4_finish_convert_inline_dir(handle, inode, data_bh, in ext4_convert_inline_data_nolock()
1273 ext4_restore_inline_data(handle, inode, iloc, buf, inline_size); in ext4_convert_inline_data_nolock()
1287 struct inode *dir, struct inode *inode) in ext4_try_add_inline_entry() argument
1305 ret = ext4_add_dirent_to_inline(handle, fname, dir, inode, &iloc, in ext4_try_add_inline_entry()
1327 inode, &iloc, inline_start, in ext4_try_add_inline_entry()
1356 struct inode *dir, ext4_lblk_t block, in ext4_inlinedir_to_tree()
1365 struct inode *inode = file_inode(dir_file); in ext4_inlinedir_to_tree() local
1372 ret = ext4_get_inode_loc(inode, &iloc); in ext4_inlinedir_to_tree()
1376 down_read(&EXT4_I(inode)->xattr_sem); in ext4_inlinedir_to_tree()
1377 if (!ext4_has_inline_data(inode)) { in ext4_inlinedir_to_tree()
1378 up_read(&EXT4_I(inode)->xattr_sem); in ext4_inlinedir_to_tree()
1383 inline_size = ext4_get_inline_size(inode); in ext4_inlinedir_to_tree()
1387 up_read(&EXT4_I(inode)->xattr_sem); in ext4_inlinedir_to_tree()
1391 ret = ext4_read_inline_data(inode, dir_buf, inline_size, &iloc); in ext4_inlinedir_to_tree()
1392 up_read(&EXT4_I(inode)->xattr_sem); in ext4_inlinedir_to_tree()
1397 parent_ino = le32_to_cpu(((struct ext4_dir_entry_2 *)dir_buf)->inode); in ext4_inlinedir_to_tree()
1405 fake.inode = cpu_to_le32(inode->i_ino); in ext4_inlinedir_to_tree()
1411 ext4_set_de_type(inode->i_sb, &fake, S_IFDIR); in ext4_inlinedir_to_tree()
1415 fake.inode = cpu_to_le32(parent_ino); in ext4_inlinedir_to_tree()
1421 ext4_set_de_type(inode->i_sb, &fake, S_IFDIR); in ext4_inlinedir_to_tree()
1427 if (ext4_check_dir_entry(inode, dir_file, de, in ext4_inlinedir_to_tree()
1445 if (de->inode == 0) in ext4_inlinedir_to_tree()
1480 struct inode *inode = file_inode(file); in ext4_read_inline_dir() local
1486 ret = ext4_get_inode_loc(inode, &iloc); in ext4_read_inline_dir()
1490 down_read(&EXT4_I(inode)->xattr_sem); in ext4_read_inline_dir()
1491 if (!ext4_has_inline_data(inode)) { in ext4_read_inline_dir()
1492 up_read(&EXT4_I(inode)->xattr_sem); in ext4_read_inline_dir()
1497 inline_size = ext4_get_inline_size(inode); in ext4_read_inline_dir()
1501 up_read(&EXT4_I(inode)->xattr_sem); in ext4_read_inline_dir()
1505 ret = ext4_read_inline_data(inode, dir_buf, inline_size, &iloc); in ext4_read_inline_dir()
1506 up_read(&EXT4_I(inode)->xattr_sem); in ext4_read_inline_dir()
1511 sb = inode->i_sb; in ext4_read_inline_dir()
1512 parent_ino = le32_to_cpu(((struct ext4_dir_entry_2 *)dir_buf)->inode); in ext4_read_inline_dir()
1533 if (!inode_eq_iversion(inode, file->f_version)) { in ext4_read_inline_dir()
1565 file->f_version = inode_query_iversion(inode); in ext4_read_inline_dir()
1570 if (!dir_emit(ctx, ".", 1, inode->i_ino, DT_DIR)) in ext4_read_inline_dir()
1585 if (ext4_check_dir_entry(inode, file, de, iloc.bh, dir_buf, in ext4_read_inline_dir()
1588 if (le32_to_cpu(de->inode)) { in ext4_read_inline_dir()
1590 le32_to_cpu(de->inode), in ext4_read_inline_dir()
1602 struct buffer_head *ext4_get_first_inline_block(struct inode *inode, in ext4_get_first_inline_block() argument
1608 *retval = ext4_get_inode_loc(inode, &iloc); in ext4_get_first_inline_block()
1622 int ext4_try_create_inline_dir(handle_t *handle, struct inode *parent, in ext4_try_create_inline_dir()
1623 struct inode *inode) in ext4_try_create_inline_dir() argument
1629 ret = ext4_get_inode_loc(inode, &iloc); in ext4_try_create_inline_dir()
1633 ret = ext4_prepare_inline_data(handle, inode, inline_size); in ext4_try_create_inline_dir()
1642 de->inode = cpu_to_le32(parent->i_ino); in ext4_try_create_inline_dir()
1644 de->inode = 0; in ext4_try_create_inline_dir()
1648 set_nlink(inode, 2); in ext4_try_create_inline_dir()
1649 inode->i_size = EXT4_I(inode)->i_disksize = inline_size; in ext4_try_create_inline_dir()
1655 struct buffer_head *ext4_find_inline_entry(struct inode *dir, in ext4_find_inline_entry()
1704 struct inode *dir, in ext4_delete_inline_entry()
1760 ext4_get_inline_entry(struct inode *inode, in ext4_get_inline_entry() argument
1768 BUG_ON(offset > ext4_get_inline_size(inode)); in ext4_get_inline_entry()
1774 inline_pos = ext4_get_inline_xattr_pos(inode, iloc); in ext4_get_inline_entry()
1776 *inline_size = ext4_get_inline_size(inode) - in ext4_get_inline_entry()
1785 bool empty_inline_dir(struct inode *dir, int *has_inline_data) in empty_inline_dir()
1811 if (!le32_to_cpu(de->inode)) { in empty_inline_dir()
1830 dir->i_ino, le32_to_cpu(de->inode), in empty_inline_dir()
1835 if (le32_to_cpu(de->inode)) { in empty_inline_dir()
1848 int ext4_destroy_inline_data(handle_t *handle, struct inode *inode) in ext4_destroy_inline_data() argument
1852 ext4_write_lock_xattr(inode, &no_expand); in ext4_destroy_inline_data()
1853 ret = ext4_destroy_inline_data_nolock(handle, inode); in ext4_destroy_inline_data()
1854 ext4_write_unlock_xattr(inode, &no_expand); in ext4_destroy_inline_data()
1859 int ext4_inline_data_iomap(struct inode *inode, struct iomap *iomap) in ext4_inline_data_iomap() argument
1865 down_read(&EXT4_I(inode)->xattr_sem); in ext4_inline_data_iomap()
1866 if (!ext4_has_inline_data(inode)) in ext4_inline_data_iomap()
1869 error = ext4_get_inode_loc(inode, &iloc); in ext4_inline_data_iomap()
1873 addr = (__u64)iloc.bh->b_blocknr << inode->i_sb->s_blocksize_bits; in ext4_inline_data_iomap()
1881 iomap->length = min_t(loff_t, ext4_get_inline_size(inode), in ext4_inline_data_iomap()
1882 i_size_read(inode)); in ext4_inline_data_iomap()
1887 up_read(&EXT4_I(inode)->xattr_sem); in ext4_inline_data_iomap()
1891 int ext4_inline_data_truncate(struct inode *inode, int *has_inline) in ext4_inline_data_truncate() argument
1906 needed_blocks = ext4_writepage_trans_blocks(inode); in ext4_inline_data_truncate()
1907 handle = ext4_journal_start(inode, EXT4_HT_INODE, needed_blocks); in ext4_inline_data_truncate()
1911 ext4_write_lock_xattr(inode, &no_expand); in ext4_inline_data_truncate()
1912 if (!ext4_has_inline_data(inode)) { in ext4_inline_data_truncate()
1913 ext4_write_unlock_xattr(inode, &no_expand); in ext4_inline_data_truncate()
1919 if ((err = ext4_orphan_add(handle, inode)) != 0) in ext4_inline_data_truncate()
1922 if ((err = ext4_get_inode_loc(inode, &is.iloc)) != 0) in ext4_inline_data_truncate()
1925 down_write(&EXT4_I(inode)->i_data_sem); in ext4_inline_data_truncate()
1926 i_size = inode->i_size; in ext4_inline_data_truncate()
1927 inline_size = ext4_get_inline_size(inode); in ext4_inline_data_truncate()
1928 EXT4_I(inode)->i_disksize = i_size; in ext4_inline_data_truncate()
1933 if ((err = ext4_xattr_ibody_find(inode, &i, &is)) != 0) in ext4_inline_data_truncate()
1945 err = ext4_xattr_ibody_get(inode, i.name_index, in ext4_inline_data_truncate()
1953 err = ext4_xattr_ibody_inline_set(handle, inode, in ext4_inline_data_truncate()
1966 EXT4_I(inode)->i_inline_size = i_size < in ext4_inline_data_truncate()
1972 up_write(&EXT4_I(inode)->i_data_sem); in ext4_inline_data_truncate()
1975 ext4_write_unlock_xattr(inode, &no_expand); in ext4_inline_data_truncate()
1977 if (inode->i_nlink) in ext4_inline_data_truncate()
1978 ext4_orphan_del(handle, inode); in ext4_inline_data_truncate()
1981 inode->i_mtime = inode->i_ctime = current_time(inode); in ext4_inline_data_truncate()
1982 err = ext4_mark_inode_dirty(handle, inode); in ext4_inline_data_truncate()
1983 if (IS_SYNC(inode)) in ext4_inline_data_truncate()
1990 int ext4_convert_inline_data(struct inode *inode) in ext4_convert_inline_data() argument
1996 if (!ext4_has_inline_data(inode)) { in ext4_convert_inline_data()
1997 ext4_clear_inode_state(inode, EXT4_STATE_MAY_INLINE_DATA); in ext4_convert_inline_data()
1999 } else if (!ext4_test_inode_state(inode, EXT4_STATE_MAY_INLINE_DATA)) { in ext4_convert_inline_data()
2006 error = filemap_flush(inode->i_mapping); in ext4_convert_inline_data()
2009 if (!ext4_has_inline_data(inode)) in ext4_convert_inline_data()
2013 needed_blocks = ext4_writepage_trans_blocks(inode); in ext4_convert_inline_data()
2016 error = ext4_get_inode_loc(inode, &iloc); in ext4_convert_inline_data()
2020 handle = ext4_journal_start(inode, EXT4_HT_WRITE_PAGE, needed_blocks); in ext4_convert_inline_data()
2026 ext4_write_lock_xattr(inode, &no_expand); in ext4_convert_inline_data()
2027 if (ext4_has_inline_data(inode)) in ext4_convert_inline_data()
2028 error = ext4_convert_inline_data_nolock(handle, inode, &iloc); in ext4_convert_inline_data()
2029 ext4_write_unlock_xattr(inode, &no_expand); in ext4_convert_inline_data()