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

1 // SPDX-License-Identifier: LGPL-2.1
25 if (EXT4_I(inode)->i_inline_off) in ext4_get_inline_size()
26 return EXT4_I(inode)->i_inline_size; in ext4_get_inline_size()
43 min_offs = EXT4_SB(inode->i_sb)->s_inode_size - in get_max_inline_xattr_value_size()
44 EXT4_GOOD_OLD_INODE_SIZE - in get_max_inline_xattr_value_size()
45 EXT4_I(inode)->i_extra_isize - in get_max_inline_xattr_value_size()
49 * We need to subtract another sizeof(__u32) since an in-inode xattr in get_max_inline_xattr_value_size()
54 return EXT4_XATTR_SIZE(min_offs - in get_max_inline_xattr_value_size()
55 EXT4_XATTR_LEN(strlen(EXT4_XATTR_SYSTEM_DATA)) - in get_max_inline_xattr_value_size()
56 EXT4_XATTR_ROUND - sizeof(__u32)); in get_max_inline_xattr_value_size()
61 end = (void *)raw_inode + EXT4_SB(inode->i_sb)->s_inode_size; in get_max_inline_xattr_value_size()
72 if (!entry->e_value_inum && entry->e_value_size) { in get_max_inline_xattr_value_size()
73 size_t offs = le16_to_cpu(entry->e_value_offs); in get_max_inline_xattr_value_size()
79 free = min_offs - in get_max_inline_xattr_value_size()
80 ((void *)entry - (void *)IFIRST(header)) - sizeof(__u32); in get_max_inline_xattr_value_size()
82 if (EXT4_I(inode)->i_inline_off) { in get_max_inline_xattr_value_size()
84 ((void *)raw_inode + EXT4_I(inode)->i_inline_off); in get_max_inline_xattr_value_size()
86 free += EXT4_XATTR_SIZE(le32_to_cpu(entry->e_value_size)); in get_max_inline_xattr_value_size()
90 free -= EXT4_XATTR_LEN(strlen(EXT4_XATTR_SYSTEM_DATA)); in get_max_inline_xattr_value_size()
93 free = EXT4_XATTR_SIZE(free - EXT4_XATTR_ROUND); in get_max_inline_xattr_value_size()
111 if (EXT4_I(inode)->i_extra_isize == 0) in ext4_get_max_inline_size()
116 ext4_error_inode_err(inode, __func__, __LINE__, 0, -error, in ext4_get_max_inline_size()
118 inode->i_ino); in ext4_get_max_inline_size()
122 down_read(&EXT4_I(inode)->xattr_sem); in ext4_get_max_inline_size()
124 up_read(&EXT4_I(inode)->xattr_sem); in ext4_get_max_inline_size()
142 .s = { .not_found = -ENODATA, }, in ext4_find_inline_data_nolock()
150 if (EXT4_I(inode)->i_extra_isize == 0) in ext4_find_inline_data_nolock()
162 if (is.s.here->e_value_inum) { in ext4_find_inline_data_nolock()
165 error = -EFSCORRUPTED; in ext4_find_inline_data_nolock()
168 EXT4_I(inode)->i_inline_off = (u16)((void *)is.s.here - in ext4_find_inline_data_nolock()
170 EXT4_I(inode)->i_inline_size = EXT4_MIN_INLINE_DATA_SIZE + in ext4_find_inline_data_nolock()
171 le32_to_cpu(is.s.here->e_value_size); in ext4_find_inline_data_nolock()
190 BUG_ON(len > EXT4_I(inode)->i_inline_size); in ext4_read_inline_data()
195 memcpy(buffer, (void *)(raw_inode->i_block), cp_len); in ext4_read_inline_data()
197 len -= cp_len; in ext4_read_inline_data()
205 EXT4_I(inode)->i_inline_off); in ext4_read_inline_data()
207 (unsigned int)le32_to_cpu(entry->e_value_size)); in ext4_read_inline_data()
210 (void *)IFIRST(header) + le16_to_cpu(entry->e_value_offs), len); in ext4_read_inline_data()
231 if (unlikely(ext4_forced_shutdown(inode->i_sb))) in ext4_write_inline_data()
234 BUG_ON(!EXT4_I(inode)->i_inline_off); in ext4_write_inline_data()
235 BUG_ON(pos + len > EXT4_I(inode)->i_inline_size); in ext4_write_inline_data()
242 EXT4_MIN_INLINE_DATA_SIZE - pos : len; in ext4_write_inline_data()
243 memcpy((void *)raw_inode->i_block + pos, buffer, cp_len); in ext4_write_inline_data()
245 len -= cp_len; in ext4_write_inline_data()
253 pos -= EXT4_MIN_INLINE_DATA_SIZE; in ext4_write_inline_data()
256 EXT4_I(inode)->i_inline_off); in ext4_write_inline_data()
258 memcpy((void *)IFIRST(header) + le16_to_cpu(entry->e_value_offs) + pos, in ext4_write_inline_data()
268 .s = { .not_found = -ENODATA, }, in ext4_create_inline_data()
280 error = ext4_journal_get_write_access(handle, inode->i_sb, is.iloc.bh, in ext4_create_inline_data()
287 len -= EXT4_MIN_INLINE_DATA_SIZE; in ext4_create_inline_data()
305 if (error == -ENOSPC) in ext4_create_inline_data()
311 memset((void *)ext4_raw_inode(&is.iloc)->i_block, in ext4_create_inline_data()
314 EXT4_I(inode)->i_inline_off = (u16)((void *)is.s.here - in ext4_create_inline_data()
316 EXT4_I(inode)->i_inline_size = len + EXT4_MIN_INLINE_DATA_SIZE; in ext4_create_inline_data()
333 .s = { .not_found = -ENODATA, }, in ext4_update_inline_data()
341 if (len <= EXT4_I(inode)->i_inline_size) in ext4_update_inline_data()
354 len -= EXT4_MIN_INLINE_DATA_SIZE; in ext4_update_inline_data()
357 error = -ENOMEM; in ext4_update_inline_data()
367 error = ext4_journal_get_write_access(handle, inode->i_sb, is.iloc.bh, in ext4_update_inline_data()
380 EXT4_I(inode)->i_inline_off = (u16)((void *)is.s.here - in ext4_update_inline_data()
382 EXT4_I(inode)->i_inline_size = EXT4_MIN_INLINE_DATA_SIZE + in ext4_update_inline_data()
383 le32_to_cpu(is.s.here->e_value_size); in ext4_update_inline_data()
401 return -ENOSPC; in ext4_prepare_inline_data()
405 return -ENOSPC; in ext4_prepare_inline_data()
409 if (ei->i_inline_off) in ext4_prepare_inline_data()
433 if (!ei->i_inline_off) in ext4_destroy_inline_data_nolock()
445 error = ext4_journal_get_write_access(handle, inode->i_sb, is.iloc.bh, in ext4_destroy_inline_data_nolock()
454 memset((void *)ext4_raw_inode(&is.iloc)->i_block, in ext4_destroy_inline_data_nolock()
456 memset(ei->i_data, 0, EXT4_MIN_INLINE_DATA_SIZE); in ext4_destroy_inline_data_nolock()
458 if (ext4_has_feature_extents(inode->i_sb)) { in ext4_destroy_inline_data_nolock()
459 if (S_ISDIR(inode->i_mode) || in ext4_destroy_inline_data_nolock()
460 S_ISREG(inode->i_mode) || S_ISLNK(inode->i_mode)) { in ext4_destroy_inline_data_nolock()
470 EXT4_I(inode)->i_inline_off = 0; in ext4_destroy_inline_data_nolock()
471 EXT4_I(inode)->i_inline_size = 0; in ext4_destroy_inline_data_nolock()
475 if (error == -ENODATA) in ext4_destroy_inline_data_nolock()
489 BUG_ON(folio->index); in ext4_read_inline_folio()
491 if (!EXT4_I(inode)->i_inline_off) { in ext4_read_inline_folio()
492 ext4_warning(inode->i_sb, "inode %lu doesn't have inline data.", in ext4_read_inline_folio()
493 inode->i_ino); in ext4_read_inline_folio()
518 down_read(&EXT4_I(inode)->xattr_sem); in ext4_readpage_inline()
520 up_read(&EXT4_I(inode)->xattr_sem); in ext4_readpage_inline()
521 return -EAGAIN; in ext4_readpage_inline()
528 if (!folio->index) in ext4_readpage_inline()
535 up_read(&EXT4_I(inode)->xattr_sem); in ext4_readpage_inline()
628 * still be on the orphan list; we need to in ext4_convert_inline_data_to_extent()
632 if (inode->i_nlink) in ext4_convert_inline_data_to_extent()
636 if (ret == -ENOSPC && ext4_should_retry_alloc(inode->i_sb, &retries)) in ext4_convert_inline_data_to_extent()
640 block_commit_write(&folio->page, from, to); in ext4_convert_inline_data_to_extent()
657 * If the inode has inline data, check whether the new write can be
690 if (ret && ret != -ENOSPC) in ext4_try_to_write_inline_data()
694 if (ret == -ENOSPC) { in ext4_try_to_write_inline_data()
700 ret = ext4_journal_get_write_access(handle, inode->i_sb, iloc.bh, in ext4_try_to_write_inline_data()
713 down_read(&EXT4_I(inode)->xattr_sem); in ext4_try_to_write_inline_data()
733 up_read(&EXT4_I(inode)->xattr_sem); in ext4_try_to_write_inline_data()
760 ext4_std_error(inode->i_sb, ret); in ext4_write_inline_data_end()
767 * ei->i_inline_off may have changed since in ext4_write_inline_data_end()
806 if (pos + len > inode->i_size && ext4_can_truncate(inode)) in ext4_write_inline_data_end()
812 if (pos + len > inode->i_size) { in ext4_write_inline_data_end()
815 * If truncate failed early the inode might still be in ext4_write_inline_data_end()
819 if (inode->i_nlink) in ext4_write_inline_data_end()
846 down_read(&EXT4_I(inode)->xattr_sem); in ext4_da_convert_inline_data_to_extent()
863 up_read(&EXT4_I(inode)->xattr_sem); in ext4_da_convert_inline_data_to_extent()
876 up_read(&EXT4_I(inode)->xattr_sem); in ext4_da_convert_inline_data_to_extent()
886 * If the data can be written into the inode, we just read
888 * Otherwise read the page, makes it dirty so that it can be
916 if (ret && ret != -ENOSPC) in ext4_da_write_inline_data_begin()
919 if (ret == -ENOSPC) { in ext4_da_write_inline_data_begin()
924 if (ret == -ENOSPC && in ext4_da_write_inline_data_begin()
925 ext4_should_retry_alloc(inode->i_sb, &retries)) in ext4_da_write_inline_data_begin()
941 down_read(&EXT4_I(inode)->xattr_sem); in ext4_da_write_inline_data_begin()
952 ret = ext4_journal_get_write_access(handle, inode->i_sb, iloc.bh, in ext4_da_write_inline_data_begin()
957 up_read(&EXT4_I(inode)->xattr_sem); in ext4_da_write_inline_data_begin()
962 up_read(&EXT4_I(inode)->xattr_sem); in ext4_da_write_inline_data_begin()
978 struct ext4_dir_entry_2 *de = inline_start; in ext4_show_inline_dir() local
981 trace_printk("inode %lu\n", dir->i_ino); in ext4_show_inline_dir()
983 while ((void *)de < dlimit) { in ext4_show_inline_dir()
984 de_len = ext4_rec_len_from_disk(de->rec_len, inline_size); in ext4_show_inline_dir()
985 trace_printk("de: off %u rlen %u name %.*s nlen %u ino %u\n", in ext4_show_inline_dir()
986 offset, de_len, de->name_len, de->name, in ext4_show_inline_dir()
987 de->name_len, le32_to_cpu(de->inode)); in ext4_show_inline_dir()
988 if (ext4_check_dir_entry(dir, NULL, de, bh, in ext4_show_inline_dir()
993 de = (struct ext4_dir_entry_2 *) ((char *) de + de_len); in ext4_show_inline_dir()
1002 * It will return -ENOSPC if no space is available, and -EIO
1003 * and -EEXIST if directory entry already exists.
1013 struct ext4_dir_entry_2 *de; in ext4_add_dirent_to_inline() local
1015 err = ext4_find_dest_de(dir, inode, iloc->bh, inline_start, in ext4_add_dirent_to_inline()
1016 inline_size, fname, &de); in ext4_add_dirent_to_inline()
1020 BUFFER_TRACE(iloc->bh, "get_write_access"); in ext4_add_dirent_to_inline()
1021 err = ext4_journal_get_write_access(handle, dir->i_sb, iloc->bh, in ext4_add_dirent_to_inline()
1025 ext4_insert_dentry(dir, inode, de, inline_size, fname); in ext4_add_dirent_to_inline()
1027 ext4_show_inline_dir(dir, iloc->bh, inline_start, inline_size); in ext4_add_dirent_to_inline()
1052 BUG_ON(!EXT4_I(inode)->i_inline_off); in ext4_get_inline_xattr_pos()
1056 EXT4_I(inode)->i_inline_off); in ext4_get_inline_xattr_pos()
1058 return (void *)IFIRST(header) + le16_to_cpu(entry->e_value_offs); in ext4_get_inline_xattr_pos()
1061 /* Set the final de to cover the whole block. */
1064 struct ext4_dir_entry_2 *de, *prev_de; in ext4_update_final_de() local
1068 de = de_buf; in ext4_update_final_de()
1072 prev_de = de; in ext4_update_final_de()
1073 de_len = ext4_rec_len_from_disk(de->rec_len, old_size); in ext4_update_final_de()
1075 de = de_buf; in ext4_update_final_de()
1078 prev_de->rec_len = ext4_rec_len_to_disk(de_len + new_size - in ext4_update_final_de()
1082 de->inode = 0; in ext4_update_final_de()
1083 de->rec_len = ext4_rec_len_to_disk(new_size, new_size); in ext4_update_final_de()
1091 int old_size = EXT4_I(dir)->i_inline_size - EXT4_MIN_INLINE_DATA_SIZE; in ext4_update_inline_dir()
1094 if (new_size - old_size <= ext4_dir_rec_len(1, NULL)) in ext4_update_inline_dir()
1095 return -ENOSPC; in ext4_update_inline_dir()
1103 EXT4_I(dir)->i_inline_size - in ext4_update_inline_dir()
1105 dir->i_size = EXT4_I(dir)->i_disksize = EXT4_I(dir)->i_inline_size; in ext4_update_inline_dir()
1117 ext4_msg(inode->i_sb, KERN_EMERG, in ext4_restore_inline_data()
1118 "error restoring inline_data for inode -- potential data loss! (inode %lu, error %d)", in ext4_restore_inline_data()
1119 inode->i_ino, ret); in ext4_restore_inline_data()
1133 struct ext4_dir_entry_2 *de; in ext4_finish_convert_inline_dir() local
1134 void *target = dir_block->b_data; in ext4_finish_convert_inline_dir()
1140 de = target; in ext4_finish_convert_inline_dir()
1141 de = ext4_init_dot_dotdot(inode, de, in ext4_finish_convert_inline_dir()
1142 inode->i_sb->s_blocksize, csum_size, in ext4_finish_convert_inline_dir()
1143 le32_to_cpu(((struct ext4_dir_entry_2 *)buf)->inode), 1); in ext4_finish_convert_inline_dir()
1144 header_size = (void *)de - target; in ext4_finish_convert_inline_dir()
1146 memcpy((void *)de, buf + EXT4_INLINE_DOTDOT_SIZE, in ext4_finish_convert_inline_dir()
1147 inline_size - EXT4_INLINE_DOTDOT_SIZE); in ext4_finish_convert_inline_dir()
1149 if (ext4_has_metadata_csum(inode->i_sb)) in ext4_finish_convert_inline_dir()
1152 inode->i_size = inode->i_sb->s_blocksize; in ext4_finish_convert_inline_dir()
1153 i_size_write(inode, inode->i_sb->s_blocksize); in ext4_finish_convert_inline_dir()
1154 EXT4_I(inode)->i_disksize = inode->i_sb->s_blocksize; in ext4_finish_convert_inline_dir()
1155 ext4_update_final_de(dir_block->b_data, in ext4_finish_convert_inline_dir()
1156 inline_size - EXT4_INLINE_DOTDOT_SIZE + header_size, in ext4_finish_convert_inline_dir()
1157 inode->i_sb->s_blocksize - csum_size); in ext4_finish_convert_inline_dir()
1161 inode->i_sb->s_blocksize); in ext4_finish_convert_inline_dir()
1184 error = -ENOMEM; in ext4_convert_inline_data_nolock()
1196 if (S_ISDIR(inode->i_mode)) { in ext4_convert_inline_data_nolock()
1197 error = ext4_check_all_de(inode, iloc->bh, in ext4_convert_inline_data_nolock()
1199 inline_size - EXT4_INLINE_DOTDOT_SIZE); in ext4_convert_inline_data_nolock()
1215 error = -EIO; in ext4_convert_inline_data_nolock()
1219 data_bh = sb_getblk(inode->i_sb, map.m_pblk); in ext4_convert_inline_data_nolock()
1221 error = -ENOMEM; in ext4_convert_inline_data_nolock()
1226 error = ext4_journal_get_create_access(handle, inode->i_sb, data_bh, in ext4_convert_inline_data_nolock()
1230 error = -EIO; in ext4_convert_inline_data_nolock()
1233 memset(data_bh->b_data, 0, inode->i_sb->s_blocksize); in ext4_convert_inline_data_nolock()
1235 if (!S_ISDIR(inode->i_mode)) { in ext4_convert_inline_data_nolock()
1236 memcpy(data_bh->b_data, buf, inline_size); in ext4_convert_inline_data_nolock()
1276 inline_start = (void *)ext4_raw_inode(&iloc)->i_block + in ext4_try_add_inline_entry()
1278 inline_size = EXT4_MIN_INLINE_DATA_SIZE - EXT4_INLINE_DOTDOT_SIZE; in ext4_try_add_inline_entry()
1282 if (ret != -ENOSPC) in ext4_try_add_inline_entry()
1285 /* check whether it can be inserted to inline xattr space. */ in ext4_try_add_inline_entry()
1286 inline_size = EXT4_I(dir)->i_inline_size - in ext4_try_add_inline_entry()
1291 if (ret && ret != -ENOSPC) in ext4_try_add_inline_entry()
1294 inline_size = EXT4_I(dir)->i_inline_size - in ext4_try_add_inline_entry()
1305 if (ret != -ENOSPC) in ext4_try_add_inline_entry()
1311 * As the extent tree will be created, we have to save the inline in ext4_try_add_inline_entry()
1326 * This function fills a red-black tree with information from an
1339 struct ext4_dir_entry_2 *de; in ext4_inlinedir_to_tree() local
1351 down_read(&EXT4_I(inode)->xattr_sem); in ext4_inlinedir_to_tree()
1353 up_read(&EXT4_I(inode)->xattr_sem); in ext4_inlinedir_to_tree()
1361 ret = -ENOMEM; in ext4_inlinedir_to_tree()
1362 up_read(&EXT4_I(inode)->xattr_sem); in ext4_inlinedir_to_tree()
1367 up_read(&EXT4_I(inode)->xattr_sem); in ext4_inlinedir_to_tree()
1372 parent_ino = le32_to_cpu(((struct ext4_dir_entry_2 *)dir_buf)->inode); in ext4_inlinedir_to_tree()
1380 fake.inode = cpu_to_le32(inode->i_ino); in ext4_inlinedir_to_tree()
1386 ext4_set_de_type(inode->i_sb, &fake, S_IFDIR); in ext4_inlinedir_to_tree()
1387 de = &fake; in ext4_inlinedir_to_tree()
1396 ext4_set_de_type(inode->i_sb, &fake, S_IFDIR); in ext4_inlinedir_to_tree()
1397 de = &fake; in ext4_inlinedir_to_tree()
1400 de = (struct ext4_dir_entry_2 *)(dir_buf + pos); in ext4_inlinedir_to_tree()
1401 pos += ext4_rec_len_from_disk(de->rec_len, inline_size); in ext4_inlinedir_to_tree()
1402 if (ext4_check_dir_entry(inode, dir_file, de, in ext4_inlinedir_to_tree()
1411 hinfo->hash = EXT4_DIRENT_HASH(de); in ext4_inlinedir_to_tree()
1412 hinfo->minor_hash = EXT4_DIRENT_MINOR_HASH(de); in ext4_inlinedir_to_tree()
1414 err = ext4fs_dirhash(dir, de->name, de->name_len, hinfo); in ext4_inlinedir_to_tree()
1420 if ((hinfo->hash < start_hash) || in ext4_inlinedir_to_tree()
1421 ((hinfo->hash == start_hash) && in ext4_inlinedir_to_tree()
1422 (hinfo->minor_hash < start_minor_hash))) in ext4_inlinedir_to_tree()
1424 if (de->inode == 0) in ext4_inlinedir_to_tree()
1426 tmp_str.name = de->name; in ext4_inlinedir_to_tree()
1427 tmp_str.len = de->name_len; in ext4_inlinedir_to_tree()
1428 err = ext4_htree_store_dirent(dir_file, hinfo->hash, in ext4_inlinedir_to_tree()
1429 hinfo->minor_hash, de, &tmp_str); in ext4_inlinedir_to_tree()
1457 struct ext4_dir_entry_2 *de; in ext4_read_inline_dir() local
1464 struct dir_private_info *info = file->private_data; in ext4_read_inline_dir()
1470 down_read(&EXT4_I(inode)->xattr_sem); in ext4_read_inline_dir()
1472 up_read(&EXT4_I(inode)->xattr_sem); in ext4_read_inline_dir()
1480 ret = -ENOMEM; in ext4_read_inline_dir()
1481 up_read(&EXT4_I(inode)->xattr_sem); in ext4_read_inline_dir()
1486 up_read(&EXT4_I(inode)->xattr_sem); in ext4_read_inline_dir()
1491 sb = inode->i_sb; in ext4_read_inline_dir()
1492 parent_ino = le32_to_cpu(((struct ext4_dir_entry_2 *)dir_buf)->inode); in ext4_read_inline_dir()
1493 offset = ctx->pos; in ext4_read_inline_dir()
1504 extra_offset = dotdot_size - EXT4_INLINE_DOTDOT_SIZE; in ext4_read_inline_dir()
1509 * readdir(2), then we might be pointing to an invalid in ext4_read_inline_dir()
1513 if (!inode_eq_iversion(inode, info->cookie)) { in ext4_read_inline_dir()
1527 * the buf has to be tuned accordingly. in ext4_read_inline_dir()
1529 de = (struct ext4_dir_entry_2 *) in ext4_read_inline_dir()
1530 (dir_buf + i - extra_offset); in ext4_read_inline_dir()
1534 * least that it is non-zero. A in ext4_read_inline_dir()
1535 * failure will be detected in the in ext4_read_inline_dir()
1537 if (ext4_rec_len_from_disk(de->rec_len, extra_size) in ext4_read_inline_dir()
1540 i += ext4_rec_len_from_disk(de->rec_len, in ext4_read_inline_dir()
1544 ctx->pos = offset; in ext4_read_inline_dir()
1545 info->cookie = inode_query_iversion(inode); in ext4_read_inline_dir()
1548 while (ctx->pos < extra_size) { in ext4_read_inline_dir()
1549 if (ctx->pos == 0) { in ext4_read_inline_dir()
1550 if (!dir_emit(ctx, ".", 1, inode->i_ino, DT_DIR)) in ext4_read_inline_dir()
1552 ctx->pos = dotdot_offset; in ext4_read_inline_dir()
1556 if (ctx->pos == dotdot_offset) { in ext4_read_inline_dir()
1559 ctx->pos = dotdot_size; in ext4_read_inline_dir()
1563 de = (struct ext4_dir_entry_2 *) in ext4_read_inline_dir()
1564 (dir_buf + ctx->pos - extra_offset); in ext4_read_inline_dir()
1565 if (ext4_check_dir_entry(inode, file, de, iloc.bh, dir_buf, in ext4_read_inline_dir()
1566 extra_size, ctx->pos)) in ext4_read_inline_dir()
1568 if (le32_to_cpu(de->inode)) { in ext4_read_inline_dir()
1569 if (!dir_emit(ctx, de->name, de->name_len, in ext4_read_inline_dir()
1570 le32_to_cpu(de->inode), in ext4_read_inline_dir()
1571 get_dtype(sb, de->file_type))) in ext4_read_inline_dir()
1574 ctx->pos += ext4_rec_len_from_disk(de->rec_len, extra_size); in ext4_read_inline_dir()
1592 ret = -ENOMEM; in ext4_read_inline_link()
1603 nd_terminate_link(link, inode->i_size, ret); in ext4_read_inline_link()
1621 *parent_de = (struct ext4_dir_entry_2 *)ext4_raw_inode(&iloc)->i_block; in ext4_get_first_inline_block()
1636 struct ext4_dir_entry_2 *de; in ext4_try_create_inline_dir() local
1650 de = (struct ext4_dir_entry_2 *)ext4_raw_inode(&iloc)->i_block; in ext4_try_create_inline_dir()
1651 de->inode = cpu_to_le32(parent->i_ino); in ext4_try_create_inline_dir()
1652 de = (struct ext4_dir_entry_2 *)((void *)de + EXT4_INLINE_DOTDOT_SIZE); in ext4_try_create_inline_dir()
1653 de->inode = 0; in ext4_try_create_inline_dir()
1654 de->rec_len = ext4_rec_len_to_disk( in ext4_try_create_inline_dir()
1655 inline_size - EXT4_INLINE_DOTDOT_SIZE, in ext4_try_create_inline_dir()
1658 inode->i_size = EXT4_I(inode)->i_disksize = inline_size; in ext4_try_create_inline_dir()
1670 .s = { .not_found = -ENODATA, }, in ext4_find_inline_entry()
1684 down_read(&EXT4_I(dir)->xattr_sem); in ext4_find_inline_entry()
1695 inline_start = (void *)ext4_raw_inode(&is.iloc)->i_block + in ext4_find_inline_entry()
1697 inline_size = EXT4_MIN_INLINE_DATA_SIZE - EXT4_INLINE_DOTDOT_SIZE; in ext4_find_inline_entry()
1709 inline_size = ext4_get_inline_size(dir) - EXT4_MIN_INLINE_DATA_SIZE; in ext4_find_inline_entry()
1723 up_read(&EXT4_I(dir)->xattr_sem); in ext4_find_inline_entry()
1747 if ((void *)de_del - ((void *)ext4_raw_inode(&iloc)->i_block) < in ext4_delete_inline_entry()
1749 inline_start = (void *)ext4_raw_inode(&iloc)->i_block + in ext4_delete_inline_entry()
1751 inline_size = EXT4_MIN_INLINE_DATA_SIZE - in ext4_delete_inline_entry()
1755 inline_size = ext4_get_inline_size(dir) - in ext4_delete_inline_entry()
1760 err = ext4_journal_get_write_access(handle, dir->i_sb, bh, in ext4_delete_inline_entry()
1776 if (err != -ENOENT) in ext4_delete_inline_entry()
1777 ext4_std_error(dir->i_sb, err); in ext4_delete_inline_entry()
1796 inline_pos = (void *)ext4_raw_inode(iloc)->i_block; in ext4_get_inline_entry()
1800 offset -= EXT4_MIN_INLINE_DATA_SIZE; in ext4_get_inline_entry()
1801 *inline_size = ext4_get_inline_size(inode) - in ext4_get_inline_entry()
1817 struct ext4_dir_entry_2 *de; in empty_inline_dir() local
1822 EXT4_ERROR_INODE_ERR(dir, -err, in empty_inline_dir()
1824 err, dir->i_ino); in empty_inline_dir()
1828 down_read(&EXT4_I(dir)->xattr_sem); in empty_inline_dir()
1835 de = (struct ext4_dir_entry_2 *)ext4_raw_inode(&iloc)->i_block; in empty_inline_dir()
1836 if (!le32_to_cpu(de->inode)) { in empty_inline_dir()
1837 ext4_warning(dir->i_sb, in empty_inline_dir()
1838 "bad inline directory (dir #%lu) - no `..'", in empty_inline_dir()
1839 dir->i_ino); in empty_inline_dir()
1846 de = ext4_get_inline_entry(dir, &iloc, offset, in empty_inline_dir()
1848 if (ext4_check_dir_entry(dir, NULL, de, in empty_inline_dir()
1851 ext4_warning(dir->i_sb, in empty_inline_dir()
1852 "bad inline directory (dir #%lu) - " in empty_inline_dir()
1855 dir->i_ino, le32_to_cpu(de->inode), in empty_inline_dir()
1856 le16_to_cpu(de->rec_len), de->name_len, in empty_inline_dir()
1860 if (le32_to_cpu(de->inode)) { in empty_inline_dir()
1863 offset += ext4_rec_len_from_disk(de->rec_len, inline_size); in empty_inline_dir()
1868 up_read(&EXT4_I(dir)->xattr_sem); in empty_inline_dir()
1887 int error = -EAGAIN; in ext4_inline_data_iomap()
1890 down_read(&EXT4_I(inode)->xattr_sem); in ext4_inline_data_iomap()
1898 addr = (__u64)iloc.bh->b_blocknr << inode->i_sb->s_blocksize_bits; in ext4_inline_data_iomap()
1899 addr += (char *)ext4_raw_inode(&iloc) - iloc.bh->b_data; in ext4_inline_data_iomap()
1904 iomap->addr = addr; in ext4_inline_data_iomap()
1905 iomap->offset = 0; in ext4_inline_data_iomap()
1906 iomap->length = min_t(loff_t, ext4_get_inline_size(inode), in ext4_inline_data_iomap()
1908 iomap->type = IOMAP_INLINE; in ext4_inline_data_iomap()
1909 iomap->flags = 0; in ext4_inline_data_iomap()
1912 up_read(&EXT4_I(inode)->xattr_sem); in ext4_inline_data_iomap()
1923 .s = { .not_found = -ENODATA, }, in ext4_inline_data_truncate()
1950 down_write(&EXT4_I(inode)->i_data_sem); in ext4_inline_data_truncate()
1951 i_size = inode->i_size; in ext4_inline_data_truncate()
1953 EXT4_I(inode)->i_disksize = i_size; in ext4_inline_data_truncate()
1959 * the extent status cache must be cleared to avoid leaving in ext4_inline_data_truncate()
1972 value_len = le32_to_cpu(is.s.here->e_value_size); in ext4_inline_data_truncate()
1975 err = -ENOMEM; in ext4_inline_data_truncate()
1986 i_size - EXT4_MIN_INLINE_DATA_SIZE : 0; in ext4_inline_data_truncate()
1994 void *p = (void *) ext4_raw_inode(&is.iloc)->i_block; in ext4_inline_data_truncate()
1996 EXT4_MIN_INLINE_DATA_SIZE - i_size); in ext4_inline_data_truncate()
1999 EXT4_I(inode)->i_inline_size = i_size < in ext4_inline_data_truncate()
2005 up_write(&EXT4_I(inode)->i_data_sem); in ext4_inline_data_truncate()
2010 if (inode->i_nlink) in ext4_inline_data_truncate()
2039 error = filemap_flush(inode->i_mapping); in ext4_convert_inline_data()