Lines Matching +full:de +full:- +full:be

1 // SPDX-License-Identifier: LGPL-2.1
10 #include <linux/backing-dev.h>
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()
38 min_offs = EXT4_SB(inode->i_sb)->s_inode_size - in get_max_inline_xattr_value_size()
39 EXT4_GOOD_OLD_INODE_SIZE - in get_max_inline_xattr_value_size()
40 EXT4_I(inode)->i_extra_isize - in get_max_inline_xattr_value_size()
44 * We need to subtract another sizeof(__u32) since an in-inode xattr in get_max_inline_xattr_value_size()
49 return EXT4_XATTR_SIZE(min_offs - in get_max_inline_xattr_value_size()
50 EXT4_XATTR_LEN(strlen(EXT4_XATTR_SYSTEM_DATA)) - in get_max_inline_xattr_value_size()
51 EXT4_XATTR_ROUND - sizeof(__u32)); in get_max_inline_xattr_value_size()
59 if (!entry->e_value_inum && entry->e_value_size) { in get_max_inline_xattr_value_size()
60 size_t offs = le16_to_cpu(entry->e_value_offs); in get_max_inline_xattr_value_size()
65 free = min_offs - in get_max_inline_xattr_value_size()
66 ((void *)entry - (void *)IFIRST(header)) - sizeof(__u32); in get_max_inline_xattr_value_size()
68 if (EXT4_I(inode)->i_inline_off) { in get_max_inline_xattr_value_size()
70 ((void *)raw_inode + EXT4_I(inode)->i_inline_off); in get_max_inline_xattr_value_size()
72 free += EXT4_XATTR_SIZE(le32_to_cpu(entry->e_value_size)); in get_max_inline_xattr_value_size()
76 free -= EXT4_XATTR_LEN(strlen(EXT4_XATTR_SYSTEM_DATA)); in get_max_inline_xattr_value_size()
79 free = EXT4_XATTR_SIZE(free - EXT4_XATTR_ROUND); in get_max_inline_xattr_value_size()
97 if (EXT4_I(inode)->i_extra_isize == 0) in ext4_get_max_inline_size()
102 ext4_error_inode_err(inode, __func__, __LINE__, 0, -error, in ext4_get_max_inline_size()
104 inode->i_ino); in ext4_get_max_inline_size()
108 down_read(&EXT4_I(inode)->xattr_sem); in ext4_get_max_inline_size()
110 up_read(&EXT4_I(inode)->xattr_sem); in ext4_get_max_inline_size()
128 .s = { .not_found = -ENODATA, }, in ext4_find_inline_data_nolock()
136 if (EXT4_I(inode)->i_extra_isize == 0) in ext4_find_inline_data_nolock()
148 if (is.s.here->e_value_inum) { in ext4_find_inline_data_nolock()
151 error = -EFSCORRUPTED; 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()
157 le32_to_cpu(is.s.here->e_value_size); in ext4_find_inline_data_nolock()
177 BUG_ON(len > EXT4_I(inode)->i_inline_size); in ext4_read_inline_data()
183 memcpy(buffer, (void *)(raw_inode->i_block), cp_len); in ext4_read_inline_data()
185 len -= cp_len; in ext4_read_inline_data()
193 EXT4_I(inode)->i_inline_off); in ext4_read_inline_data()
195 (unsigned int)le32_to_cpu(entry->e_value_size)); in ext4_read_inline_data()
198 (void *)IFIRST(header) + le16_to_cpu(entry->e_value_offs), len); in ext4_read_inline_data()
219 if (unlikely(ext4_forced_shutdown(EXT4_SB(inode->i_sb)))) in ext4_write_inline_data()
222 BUG_ON(!EXT4_I(inode)->i_inline_off); in ext4_write_inline_data()
223 BUG_ON(pos + len > EXT4_I(inode)->i_inline_size); in ext4_write_inline_data()
230 EXT4_MIN_INLINE_DATA_SIZE - pos : len; in ext4_write_inline_data()
231 memcpy((void *)raw_inode->i_block + pos, buffer, cp_len); in ext4_write_inline_data()
233 len -= cp_len; in ext4_write_inline_data()
241 pos -= EXT4_MIN_INLINE_DATA_SIZE; in ext4_write_inline_data()
244 EXT4_I(inode)->i_inline_off); in ext4_write_inline_data()
246 memcpy((void *)IFIRST(header) + le16_to_cpu(entry->e_value_offs) + pos, in ext4_write_inline_data()
256 .s = { .not_found = -ENODATA, }, in ext4_create_inline_data()
268 error = ext4_journal_get_write_access(handle, inode->i_sb, is.iloc.bh, in ext4_create_inline_data()
275 len -= EXT4_MIN_INLINE_DATA_SIZE; in ext4_create_inline_data()
293 if (error == -ENOSPC) in ext4_create_inline_data()
299 memset((void *)ext4_raw_inode(&is.iloc)->i_block, in ext4_create_inline_data()
302 EXT4_I(inode)->i_inline_off = (u16)((void *)is.s.here - in ext4_create_inline_data()
304 EXT4_I(inode)->i_inline_size = len + EXT4_MIN_INLINE_DATA_SIZE; in ext4_create_inline_data()
321 .s = { .not_found = -ENODATA, }, in ext4_update_inline_data()
329 if (len <= EXT4_I(inode)->i_inline_size) in ext4_update_inline_data()
342 len -= EXT4_MIN_INLINE_DATA_SIZE; in ext4_update_inline_data()
345 error = -ENOMEM; in ext4_update_inline_data()
351 if (error == -ENODATA) in ext4_update_inline_data()
355 error = ext4_journal_get_write_access(handle, inode->i_sb, is.iloc.bh, in ext4_update_inline_data()
368 EXT4_I(inode)->i_inline_off = (u16)((void *)is.s.here - in ext4_update_inline_data()
370 EXT4_I(inode)->i_inline_size = EXT4_MIN_INLINE_DATA_SIZE + in ext4_update_inline_data()
371 le32_to_cpu(is.s.here->e_value_size); in ext4_update_inline_data()
389 return -ENOSPC; in ext4_prepare_inline_data()
393 return -ENOSPC; in ext4_prepare_inline_data()
397 if (ei->i_inline_off) in ext4_prepare_inline_data()
421 if (!ei->i_inline_off) in ext4_destroy_inline_data_nolock()
433 error = ext4_journal_get_write_access(handle, inode->i_sb, is.iloc.bh, in ext4_destroy_inline_data_nolock()
442 memset((void *)ext4_raw_inode(&is.iloc)->i_block, in ext4_destroy_inline_data_nolock()
444 memset(ei->i_data, 0, EXT4_MIN_INLINE_DATA_SIZE); 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()
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()
463 if (error == -ENODATA) in ext4_destroy_inline_data_nolock()
477 BUG_ON(page->index); 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()
506 down_read(&EXT4_I(inode)->xattr_sem); in ext4_readpage_inline()
508 up_read(&EXT4_I(inode)->xattr_sem); in ext4_readpage_inline()
509 return -EAGAIN; in ext4_readpage_inline()
516 if (!page->index) in ext4_readpage_inline()
523 up_read(&EXT4_I(inode)->xattr_sem); in ext4_readpage_inline()
569 ret = -ENOMEM; in ext4_convert_inline_data_to_extent()
617 * still be on the orphan list; we need to in ext4_convert_inline_data_to_extent()
621 if (inode->i_nlink) in ext4_convert_inline_data_to_extent()
625 if (ret == -ENOSPC && ext4_should_retry_alloc(inode->i_sb, &retries)) in ext4_convert_inline_data_to_extent()
645 * If the inode has inline data, check whether the new write can be
679 if (ret && ret != -ENOSPC) in ext4_try_to_write_inline_data()
683 if (ret == -ENOSPC) { in ext4_try_to_write_inline_data()
689 ret = ext4_journal_get_write_access(handle, inode->i_sb, iloc.bh, in ext4_try_to_write_inline_data()
698 ret = -ENOMEM; in ext4_try_to_write_inline_data()
703 down_read(&EXT4_I(inode)->xattr_sem); in ext4_try_to_write_inline_data()
723 up_read(&EXT4_I(inode)->xattr_sem); in ext4_try_to_write_inline_data()
751 ext4_std_error(inode->i_sb, ret); in ext4_write_inline_data_end()
758 * ei->i_inline_off may have changed since in ext4_write_inline_data_end()
797 if (pos + len > inode->i_size && ext4_can_truncate(inode)) in ext4_write_inline_data_end()
803 if (pos + len > inode->i_size) { in ext4_write_inline_data_end()
806 * If truncate failed early the inode might still be in ext4_write_inline_data_end()
810 if (inode->i_nlink) in ext4_write_inline_data_end()
827 ext4_std_error(inode->i_sb, ret); in ext4_journalled_write_inline_data()
859 return -ENOMEM; in ext4_da_convert_inline_data_to_extent()
861 down_read(&EXT4_I(inode)->xattr_sem); in ext4_da_convert_inline_data_to_extent()
878 up_read(&EXT4_I(inode)->xattr_sem); in ext4_da_convert_inline_data_to_extent()
891 up_read(&EXT4_I(inode)->xattr_sem); in ext4_da_convert_inline_data_to_extent()
901 * If the data can be written into the inode, we just read
903 * Otherwise read the page, makes it dirty so that it can be
933 ret = -ENOSPC; in ext4_da_write_inline_data_begin()
936 if (ret && ret != -ENOSPC) in ext4_da_write_inline_data_begin()
946 if (ret == -ENOSPC) { in ext4_da_write_inline_data_begin()
952 if (ret == -ENOSPC && in ext4_da_write_inline_data_begin()
953 ext4_should_retry_alloc(inode->i_sb, &retries)) in ext4_da_write_inline_data_begin()
960 ret = -ENOMEM; in ext4_da_write_inline_data_begin()
964 down_read(&EXT4_I(inode)->xattr_sem); in ext4_da_write_inline_data_begin()
975 ret = ext4_journal_get_write_access(handle, inode->i_sb, iloc.bh, in ext4_da_write_inline_data_begin()
980 up_read(&EXT4_I(inode)->xattr_sem); in ext4_da_write_inline_data_begin()
985 up_read(&EXT4_I(inode)->xattr_sem); in ext4_da_write_inline_data_begin()
1001 struct ext4_dir_entry_2 *de = inline_start; in ext4_show_inline_dir() local
1004 trace_printk("inode %lu\n", dir->i_ino); in ext4_show_inline_dir()
1006 while ((void *)de < dlimit) { in ext4_show_inline_dir()
1007 de_len = ext4_rec_len_from_disk(de->rec_len, inline_size); in ext4_show_inline_dir()
1008 trace_printk("de: off %u rlen %u name %.*s nlen %u ino %u\n", in ext4_show_inline_dir()
1009 offset, de_len, de->name_len, de->name, in ext4_show_inline_dir()
1010 de->name_len, le32_to_cpu(de->inode)); in ext4_show_inline_dir()
1011 if (ext4_check_dir_entry(dir, NULL, de, bh, in ext4_show_inline_dir()
1016 de = (struct ext4_dir_entry_2 *) ((char *) de + de_len); in ext4_show_inline_dir()
1025 * It will return -ENOSPC if no space is available, and -EIO
1026 * and -EEXIST if directory entry already exists.
1036 struct ext4_dir_entry_2 *de; in ext4_add_dirent_to_inline() local
1038 err = ext4_find_dest_de(dir, inode, iloc->bh, inline_start, in ext4_add_dirent_to_inline()
1039 inline_size, fname, &de); in ext4_add_dirent_to_inline()
1043 BUFFER_TRACE(iloc->bh, "get_write_access"); in ext4_add_dirent_to_inline()
1044 err = ext4_journal_get_write_access(handle, dir->i_sb, iloc->bh, in ext4_add_dirent_to_inline()
1048 ext4_insert_dentry(dir, inode, de, inline_size, fname); in ext4_add_dirent_to_inline()
1050 ext4_show_inline_dir(dir, iloc->bh, inline_start, inline_size); in ext4_add_dirent_to_inline()
1063 dir->i_mtime = dir->i_ctime = current_time(dir); in ext4_add_dirent_to_inline()
1075 BUG_ON(!EXT4_I(inode)->i_inline_off); in ext4_get_inline_xattr_pos()
1079 EXT4_I(inode)->i_inline_off); in ext4_get_inline_xattr_pos()
1081 return (void *)IFIRST(header) + le16_to_cpu(entry->e_value_offs); in ext4_get_inline_xattr_pos()
1084 /* Set the final de to cover the whole block. */
1087 struct ext4_dir_entry_2 *de, *prev_de; in ext4_update_final_de() local
1091 de = (struct ext4_dir_entry_2 *)de_buf; in ext4_update_final_de()
1095 prev_de = de; in ext4_update_final_de()
1096 de_len = ext4_rec_len_from_disk(de->rec_len, old_size); in ext4_update_final_de()
1098 de = (struct ext4_dir_entry_2 *)de_buf; in ext4_update_final_de()
1101 prev_de->rec_len = ext4_rec_len_to_disk(de_len + new_size - in ext4_update_final_de()
1105 de->inode = 0; in ext4_update_final_de()
1106 de->rec_len = ext4_rec_len_to_disk(new_size, new_size); in ext4_update_final_de()
1114 int old_size = EXT4_I(dir)->i_inline_size - EXT4_MIN_INLINE_DATA_SIZE; in ext4_update_inline_dir()
1117 if (new_size - old_size <= ext4_dir_rec_len(1, NULL)) in ext4_update_inline_dir()
1118 return -ENOSPC; in ext4_update_inline_dir()
1126 EXT4_I(dir)->i_inline_size - in ext4_update_inline_dir()
1128 dir->i_size = EXT4_I(dir)->i_disksize = EXT4_I(dir)->i_inline_size; in ext4_update_inline_dir()
1148 struct ext4_dir_entry_2 *de; in ext4_finish_convert_inline_dir() local
1149 void *target = dir_block->b_data; in ext4_finish_convert_inline_dir()
1155 de = (struct ext4_dir_entry_2 *)target; in ext4_finish_convert_inline_dir()
1156 de = ext4_init_dot_dotdot(inode, de, in ext4_finish_convert_inline_dir()
1157 inode->i_sb->s_blocksize, csum_size, in ext4_finish_convert_inline_dir()
1158 le32_to_cpu(((struct ext4_dir_entry_2 *)buf)->inode), 1); in ext4_finish_convert_inline_dir()
1159 header_size = (void *)de - target; in ext4_finish_convert_inline_dir()
1161 memcpy((void *)de, buf + EXT4_INLINE_DOTDOT_SIZE, in ext4_finish_convert_inline_dir()
1162 inline_size - EXT4_INLINE_DOTDOT_SIZE); in ext4_finish_convert_inline_dir()
1164 if (ext4_has_metadata_csum(inode->i_sb)) in ext4_finish_convert_inline_dir()
1167 inode->i_size = inode->i_sb->s_blocksize; in ext4_finish_convert_inline_dir()
1168 i_size_write(inode, inode->i_sb->s_blocksize); in ext4_finish_convert_inline_dir()
1169 EXT4_I(inode)->i_disksize = inode->i_sb->s_blocksize; in ext4_finish_convert_inline_dir()
1170 ext4_update_final_de(dir_block->b_data, in ext4_finish_convert_inline_dir()
1171 inline_size - EXT4_INLINE_DOTDOT_SIZE + header_size, in ext4_finish_convert_inline_dir()
1172 inode->i_sb->s_blocksize - csum_size); in ext4_finish_convert_inline_dir()
1176 inode->i_sb->s_blocksize); in ext4_finish_convert_inline_dir()
1198 error = -ENOMEM; in ext4_convert_inline_data_nolock()
1210 if (S_ISDIR(inode->i_mode)) { in ext4_convert_inline_data_nolock()
1211 error = ext4_check_all_de(inode, iloc->bh, in ext4_convert_inline_data_nolock()
1213 inline_size - EXT4_INLINE_DOTDOT_SIZE); in ext4_convert_inline_data_nolock()
1229 error = -EIO; in ext4_convert_inline_data_nolock()
1233 data_bh = sb_getblk(inode->i_sb, map.m_pblk); in ext4_convert_inline_data_nolock()
1235 error = -ENOMEM; in ext4_convert_inline_data_nolock()
1240 error = ext4_journal_get_create_access(handle, inode->i_sb, data_bh, in ext4_convert_inline_data_nolock()
1244 error = -EIO; in ext4_convert_inline_data_nolock()
1247 memset(data_bh->b_data, 0, inode->i_sb->s_blocksize); in ext4_convert_inline_data_nolock()
1249 if (!S_ISDIR(inode->i_mode)) { in ext4_convert_inline_data_nolock()
1250 memcpy(data_bh->b_data, buf, inline_size); in ext4_convert_inline_data_nolock()
1290 inline_start = (void *)ext4_raw_inode(&iloc)->i_block + in ext4_try_add_inline_entry()
1292 inline_size = EXT4_MIN_INLINE_DATA_SIZE - EXT4_INLINE_DOTDOT_SIZE; in ext4_try_add_inline_entry()
1296 if (ret != -ENOSPC) in ext4_try_add_inline_entry()
1299 /* check whether it can be inserted to inline xattr space. */ in ext4_try_add_inline_entry()
1300 inline_size = EXT4_I(dir)->i_inline_size - in ext4_try_add_inline_entry()
1305 if (ret && ret != -ENOSPC) in ext4_try_add_inline_entry()
1308 inline_size = EXT4_I(dir)->i_inline_size - in ext4_try_add_inline_entry()
1319 if (ret != -ENOSPC) in ext4_try_add_inline_entry()
1325 * As the extent tree will be created, we have to save the inline in ext4_try_add_inline_entry()
1340 * This function fills a red-black tree with information from an
1353 struct ext4_dir_entry_2 *de; in ext4_inlinedir_to_tree() local
1365 down_read(&EXT4_I(inode)->xattr_sem); in ext4_inlinedir_to_tree()
1367 up_read(&EXT4_I(inode)->xattr_sem); in ext4_inlinedir_to_tree()
1375 ret = -ENOMEM; in ext4_inlinedir_to_tree()
1376 up_read(&EXT4_I(inode)->xattr_sem); in ext4_inlinedir_to_tree()
1381 up_read(&EXT4_I(inode)->xattr_sem); in ext4_inlinedir_to_tree()
1386 parent_ino = le32_to_cpu(((struct ext4_dir_entry_2 *)dir_buf)->inode); in ext4_inlinedir_to_tree()
1394 fake.inode = cpu_to_le32(inode->i_ino); in ext4_inlinedir_to_tree()
1400 ext4_set_de_type(inode->i_sb, &fake, S_IFDIR); in ext4_inlinedir_to_tree()
1401 de = &fake; in ext4_inlinedir_to_tree()
1410 ext4_set_de_type(inode->i_sb, &fake, S_IFDIR); in ext4_inlinedir_to_tree()
1411 de = &fake; in ext4_inlinedir_to_tree()
1414 de = (struct ext4_dir_entry_2 *)(dir_buf + pos); in ext4_inlinedir_to_tree()
1415 pos += ext4_rec_len_from_disk(de->rec_len, inline_size); in ext4_inlinedir_to_tree()
1416 if (ext4_check_dir_entry(inode, dir_file, de, in ext4_inlinedir_to_tree()
1425 hinfo->hash = EXT4_DIRENT_HASH(de); in ext4_inlinedir_to_tree()
1426 hinfo->minor_hash = EXT4_DIRENT_MINOR_HASH(de); in ext4_inlinedir_to_tree()
1428 ext4fs_dirhash(dir, de->name, de->name_len, hinfo); in ext4_inlinedir_to_tree()
1430 if ((hinfo->hash < start_hash) || in ext4_inlinedir_to_tree()
1431 ((hinfo->hash == start_hash) && in ext4_inlinedir_to_tree()
1432 (hinfo->minor_hash < start_minor_hash))) in ext4_inlinedir_to_tree()
1434 if (de->inode == 0) in ext4_inlinedir_to_tree()
1436 tmp_str.name = de->name; in ext4_inlinedir_to_tree()
1437 tmp_str.len = de->name_len; in ext4_inlinedir_to_tree()
1438 err = ext4_htree_store_dirent(dir_file, hinfo->hash, in ext4_inlinedir_to_tree()
1439 hinfo->minor_hash, de, &tmp_str); in ext4_inlinedir_to_tree()
1467 struct ext4_dir_entry_2 *de; in ext4_read_inline_dir() local
1479 down_read(&EXT4_I(inode)->xattr_sem); in ext4_read_inline_dir()
1481 up_read(&EXT4_I(inode)->xattr_sem); in ext4_read_inline_dir()
1489 ret = -ENOMEM; in ext4_read_inline_dir()
1490 up_read(&EXT4_I(inode)->xattr_sem); 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()
1502 offset = ctx->pos; in ext4_read_inline_dir()
1513 extra_offset = dotdot_size - EXT4_INLINE_DOTDOT_SIZE; in ext4_read_inline_dir()
1518 * readdir(2), then we might be pointing to an invalid in ext4_read_inline_dir()
1522 if (!inode_eq_iversion(inode, file->f_version)) { in ext4_read_inline_dir()
1536 * the buf has to be tuned accordingly. in ext4_read_inline_dir()
1538 de = (struct ext4_dir_entry_2 *) in ext4_read_inline_dir()
1539 (dir_buf + i - extra_offset); in ext4_read_inline_dir()
1543 * least that it is non-zero. A in ext4_read_inline_dir()
1544 * failure will be detected in the in ext4_read_inline_dir()
1546 if (ext4_rec_len_from_disk(de->rec_len, extra_size) in ext4_read_inline_dir()
1549 i += ext4_rec_len_from_disk(de->rec_len, in ext4_read_inline_dir()
1553 ctx->pos = offset; in ext4_read_inline_dir()
1554 file->f_version = inode_query_iversion(inode); in ext4_read_inline_dir()
1557 while (ctx->pos < extra_size) { in ext4_read_inline_dir()
1558 if (ctx->pos == 0) { in ext4_read_inline_dir()
1559 if (!dir_emit(ctx, ".", 1, inode->i_ino, DT_DIR)) in ext4_read_inline_dir()
1561 ctx->pos = dotdot_offset; in ext4_read_inline_dir()
1565 if (ctx->pos == dotdot_offset) { in ext4_read_inline_dir()
1568 ctx->pos = dotdot_size; in ext4_read_inline_dir()
1572 de = (struct ext4_dir_entry_2 *) in ext4_read_inline_dir()
1573 (dir_buf + ctx->pos - extra_offset); in ext4_read_inline_dir()
1574 if (ext4_check_dir_entry(inode, file, de, iloc.bh, dir_buf, in ext4_read_inline_dir()
1575 extra_size, ctx->pos)) in ext4_read_inline_dir()
1577 if (le32_to_cpu(de->inode)) { in ext4_read_inline_dir()
1578 if (!dir_emit(ctx, de->name, de->name_len, in ext4_read_inline_dir()
1579 le32_to_cpu(de->inode), in ext4_read_inline_dir()
1580 get_dtype(sb, de->file_type))) in ext4_read_inline_dir()
1583 ctx->pos += ext4_rec_len_from_disk(de->rec_len, extra_size); in ext4_read_inline_dir()
1601 *parent_de = (struct ext4_dir_entry_2 *)ext4_raw_inode(&iloc)->i_block; in ext4_get_first_inline_block()
1616 struct ext4_dir_entry_2 *de; in ext4_try_create_inline_dir() local
1630 de = (struct ext4_dir_entry_2 *)ext4_raw_inode(&iloc)->i_block; in ext4_try_create_inline_dir()
1631 de->inode = cpu_to_le32(parent->i_ino); in ext4_try_create_inline_dir()
1632 de = (struct ext4_dir_entry_2 *)((void *)de + EXT4_INLINE_DOTDOT_SIZE); in ext4_try_create_inline_dir()
1633 de->inode = 0; in ext4_try_create_inline_dir()
1634 de->rec_len = ext4_rec_len_to_disk( in ext4_try_create_inline_dir()
1635 inline_size - EXT4_INLINE_DOTDOT_SIZE, in ext4_try_create_inline_dir()
1638 inode->i_size = EXT4_I(inode)->i_disksize = inline_size; in ext4_try_create_inline_dir()
1657 down_read(&EXT4_I(dir)->xattr_sem); in ext4_find_inline_entry()
1663 inline_start = (void *)ext4_raw_inode(&iloc)->i_block + in ext4_find_inline_entry()
1665 inline_size = EXT4_MIN_INLINE_DATA_SIZE - EXT4_INLINE_DOTDOT_SIZE; in ext4_find_inline_entry()
1677 inline_size = ext4_get_inline_size(dir) - EXT4_MIN_INLINE_DATA_SIZE; in ext4_find_inline_entry()
1688 up_read(&EXT4_I(dir)->xattr_sem); in ext4_find_inline_entry()
1712 if ((void *)de_del - ((void *)ext4_raw_inode(&iloc)->i_block) < in ext4_delete_inline_entry()
1714 inline_start = (void *)ext4_raw_inode(&iloc)->i_block + in ext4_delete_inline_entry()
1716 inline_size = EXT4_MIN_INLINE_DATA_SIZE - in ext4_delete_inline_entry()
1720 inline_size = ext4_get_inline_size(dir) - in ext4_delete_inline_entry()
1725 err = ext4_journal_get_write_access(handle, dir->i_sb, bh, in ext4_delete_inline_entry()
1741 if (err != -ENOENT) in ext4_delete_inline_entry()
1742 ext4_std_error(dir->i_sb, err); in ext4_delete_inline_entry()
1761 inline_pos = (void *)ext4_raw_inode(iloc)->i_block; in ext4_get_inline_entry()
1765 offset -= EXT4_MIN_INLINE_DATA_SIZE; in ext4_get_inline_entry()
1766 *inline_size = ext4_get_inline_size(inode) - in ext4_get_inline_entry()
1782 struct ext4_dir_entry_2 *de; in empty_inline_dir() local
1787 EXT4_ERROR_INODE_ERR(dir, -err, in empty_inline_dir()
1789 err, dir->i_ino); in empty_inline_dir()
1793 down_read(&EXT4_I(dir)->xattr_sem); in empty_inline_dir()
1799 de = (struct ext4_dir_entry_2 *)ext4_raw_inode(&iloc)->i_block; in empty_inline_dir()
1800 if (!le32_to_cpu(de->inode)) { in empty_inline_dir()
1801 ext4_warning(dir->i_sb, in empty_inline_dir()
1802 "bad inline directory (dir #%lu) - no `..'", in empty_inline_dir()
1803 dir->i_ino); in empty_inline_dir()
1811 de = ext4_get_inline_entry(dir, &iloc, offset, in empty_inline_dir()
1813 if (ext4_check_dir_entry(dir, NULL, de, in empty_inline_dir()
1816 ext4_warning(dir->i_sb, in empty_inline_dir()
1817 "bad inline directory (dir #%lu) - " in empty_inline_dir()
1820 dir->i_ino, le32_to_cpu(de->inode), in empty_inline_dir()
1821 le16_to_cpu(de->rec_len), de->name_len, in empty_inline_dir()
1826 if (le32_to_cpu(de->inode)) { in empty_inline_dir()
1830 offset += ext4_rec_len_from_disk(de->rec_len, inline_size); in empty_inline_dir()
1834 up_read(&EXT4_I(dir)->xattr_sem); in empty_inline_dir()
1853 int error = -EAGAIN; in ext4_inline_data_iomap()
1856 down_read(&EXT4_I(inode)->xattr_sem); in ext4_inline_data_iomap()
1864 addr = (__u64)iloc.bh->b_blocknr << inode->i_sb->s_blocksize_bits; in ext4_inline_data_iomap()
1865 addr += (char *)ext4_raw_inode(&iloc) - iloc.bh->b_data; in ext4_inline_data_iomap()
1870 iomap->addr = addr; in ext4_inline_data_iomap()
1871 iomap->offset = 0; in ext4_inline_data_iomap()
1872 iomap->length = min_t(loff_t, ext4_get_inline_size(inode), in ext4_inline_data_iomap()
1874 iomap->type = IOMAP_INLINE; in ext4_inline_data_iomap()
1875 iomap->flags = 0; in ext4_inline_data_iomap()
1878 up_read(&EXT4_I(inode)->xattr_sem); in ext4_inline_data_iomap()
1889 .s = { .not_found = -ENODATA, }, in ext4_inline_data_truncate()
1916 down_write(&EXT4_I(inode)->i_data_sem); in ext4_inline_data_truncate()
1917 i_size = inode->i_size; in ext4_inline_data_truncate()
1919 EXT4_I(inode)->i_disksize = i_size; in ext4_inline_data_truncate()
1925 * the extent status cache must be cleared to avoid leaving in ext4_inline_data_truncate()
1931 if (err == -ENOMEM) { in ext4_inline_data_truncate()
1947 value_len = le32_to_cpu(is.s.here->e_value_size); in ext4_inline_data_truncate()
1950 err = -ENOMEM; in ext4_inline_data_truncate()
1961 i_size - EXT4_MIN_INLINE_DATA_SIZE : 0; in ext4_inline_data_truncate()
1969 void *p = (void *) ext4_raw_inode(&is.iloc)->i_block; in ext4_inline_data_truncate()
1971 EXT4_MIN_INLINE_DATA_SIZE - i_size); in ext4_inline_data_truncate()
1974 EXT4_I(inode)->i_inline_size = i_size < in ext4_inline_data_truncate()
1980 up_write(&EXT4_I(inode)->i_data_sem); in ext4_inline_data_truncate()
1985 if (inode->i_nlink) in ext4_inline_data_truncate()
1989 inode->i_mtime = inode->i_ctime = current_time(inode); in ext4_inline_data_truncate()