Lines Matching defs:ea_inode
122 void ext4_xattr_inode_set_class(struct inode *ea_inode)
124 struct ext4_inode_info *ei = EXT4_I(ea_inode);
126 lockdep_set_subclass(&ea_inode->i_rwsem, 1);
246 err_str = "ea_inode specified without ea_inode feature enabled";
357 static u64 ext4_xattr_inode_get_ref(struct inode *ea_inode)
359 return ((u64) inode_get_ctime(ea_inode).tv_sec << 32) |
360 (u32) inode_peek_iversion_raw(ea_inode);
363 static void ext4_xattr_inode_set_ref(struct inode *ea_inode, u64 ref_count)
365 inode_set_ctime(ea_inode, (u32)(ref_count >> 32), 0);
366 inode_set_iversion_raw(ea_inode, ref_count & 0xffffffff);
369 static u32 ext4_xattr_inode_get_hash(struct inode *ea_inode)
371 return (u32)ea_inode->i_atime.tv_sec;
374 static void ext4_xattr_inode_set_hash(struct inode *ea_inode, u32 hash)
376 ea_inode->i_atime.tv_sec = hash;
382 static int ext4_xattr_inode_read(struct inode *ea_inode, void *buf, size_t size)
384 int blocksize = 1 << ea_inode->i_blkbits;
385 int bh_count = (size + blocksize - 1) >> ea_inode->i_blkbits;
397 ret = ext4_bread_batch(ea_inode, 0 /* block */, bh_count,
403 /* There shouldn't be any holes in ea_inode. */
424 u32 ea_inode_hash, struct inode **ea_inode)
453 * backpointer from ea_inode to the parent inode.
466 *ea_inode = inode;
486 ext4_xattr_inode_verify_hashes(struct inode *ea_inode,
493 hash = ext4_xattr_inode_hash(EXT4_SB(ea_inode->i_sb), buffer, size);
494 if (hash != ext4_xattr_inode_get_hash(ea_inode))
532 struct inode *ea_inode;
536 le32_to_cpu(entry->e_hash), &ea_inode);
538 ea_inode = NULL;
542 if (i_size_read(ea_inode) != size) {
543 ext4_warning_inode(ea_inode,
544 "ea_inode file size=%llu entry size=%zu",
545 i_size_read(ea_inode), size);
550 err = ext4_xattr_inode_read(ea_inode, buffer, size);
554 if (!ext4_test_inode_state(ea_inode, EXT4_STATE_LUSTRE_EA_INODE)) {
555 err = ext4_xattr_inode_verify_hashes(ea_inode, entry, buffer,
558 ext4_warning_inode(ea_inode,
565 ext4_xattr_inode_get_hash(ea_inode),
566 ea_inode->i_ino, true /* reusable */);
569 iput(ea_inode);
942 struct inode *ea_inode,
945 if (ea_inode &&
946 ext4_test_inode_state(ea_inode, EXT4_STATE_LUSTRE_EA_INODE))
984 /* We are done if ea_inode feature is not enabled. */
988 /* New ea_inode, inode map, block bitmap, group descriptor. */
1004 /* Dereference ea_inode holding old xattr value.
1005 * Old ea_inode, inode map, block bitmap, group descriptor.
1009 /* Data blocks for old ea_inode. */
1013 * ea_inode.
1029 /* Ref count update on ea_inode. */
1035 static int ext4_xattr_inode_update_ref(handle_t *handle, struct inode *ea_inode,
1042 inode_lock(ea_inode);
1044 ret = ext4_reserve_inode_write(handle, ea_inode, &iloc);
1048 ref_count = ext4_xattr_inode_get_ref(ea_inode);
1050 ext4_xattr_inode_set_ref(ea_inode, ref_count);
1054 ea_inode->i_ino, ref_count);
1057 WARN_ONCE(ea_inode->i_nlink, "EA inode %lu i_nlink=%u",
1058 ea_inode->i_ino, ea_inode->i_nlink);
1060 set_nlink(ea_inode, 1);
1061 ext4_orphan_del(handle, ea_inode);
1065 ea_inode->i_ino, ref_count);
1068 WARN_ONCE(ea_inode->i_nlink != 1,
1070 ea_inode->i_ino, ea_inode->i_nlink);
1072 clear_nlink(ea_inode);
1073 ext4_orphan_add(handle, ea_inode);
1077 ret = ext4_mark_iloc_dirty(handle, ea_inode, &iloc);
1079 ext4_warning_inode(ea_inode,
1082 inode_unlock(ea_inode);
1086 static int ext4_xattr_inode_inc_ref(handle_t *handle, struct inode *ea_inode)
1088 return ext4_xattr_inode_update_ref(handle, ea_inode, 1);
1091 static int ext4_xattr_inode_dec_ref(handle_t *handle, struct inode *ea_inode)
1093 return ext4_xattr_inode_update_ref(handle, ea_inode, -1);
1099 struct inode *ea_inode;
1112 &ea_inode);
1115 err = ext4_xattr_inode_inc_ref(handle, ea_inode);
1117 ext4_warning_inode(ea_inode, "inc ref error %d", err);
1118 iput(ea_inode);
1121 iput(ea_inode);
1136 &ea_inode);
1143 err = ext4_xattr_inode_dec_ref(handle, ea_inode);
1145 ext4_warning_inode(ea_inode, "cleanup dec ref error %d",
1147 iput(ea_inode);
1177 struct inode *ea_inode;
1184 /* One credit for dec ref on ea_inode, one for orphan list addition, */
1194 &ea_inode);
1198 err = ext4_expand_inode_array(ea_inode_array, ea_inode);
1200 ext4_warning_inode(ea_inode,
1202 iput(ea_inode);
1211 ext4_warning_inode(ea_inode, "Ensure credits err=%d",
1219 ext4_warning_inode(ea_inode,
1226 err = ext4_xattr_inode_dec_ref(handle, ea_inode);
1228 ext4_warning_inode(ea_inode, "ea_inode dec ref err=%d",
1234 ext4_xattr_inode_free_quota(parent, ea_inode,
1238 * Forget about ea_inode within the same transaction that
1383 static int ext4_xattr_inode_write(handle_t *handle, struct inode *ea_inode,
1388 int blocksize = ea_inode->i_sb->s_blocksize;
1389 int max_blocks = (bufsize + blocksize - 1) >> ea_inode->i_blkbits;
1400 ret = ext4_map_blocks(handle, ea_inode, &map,
1403 ext4_mark_inode_dirty(handle, ea_inode);
1405 ext4_should_retry_alloc(ea_inode->i_sb, &retries)) {
1421 bh = ext4_getblk(handle, ea_inode, block, 0);
1426 EXT4_ERROR_INODE(ea_inode,
1430 ret = ext4_journal_get_write_access(handle, ea_inode->i_sb, bh,
1437 ext4_handle_dirty_metadata(handle, ea_inode, bh);
1444 inode_lock(ea_inode);
1445 i_size_write(ea_inode, wsize);
1446 ext4_update_i_disksize(ea_inode, wsize);
1447 inode_unlock(ea_inode);
1449 ret2 = ext4_mark_inode_dirty(handle, ea_inode);
1465 struct inode *ea_inode = NULL;
1480 ea_inode = ext4_new_inode(handle, inode->i_sb->s_root->d_inode,
1483 if (!IS_ERR(ea_inode)) {
1484 ea_inode->i_op = &ext4_file_inode_operations;
1485 ea_inode->i_fop = &ext4_file_operations;
1486 ext4_set_aops(ea_inode);
1487 ext4_xattr_inode_set_class(ea_inode);
1488 unlock_new_inode(ea_inode);
1489 ext4_xattr_inode_set_ref(ea_inode, 1);
1490 ext4_xattr_inode_set_hash(ea_inode, hash);
1491 err = ext4_mark_inode_dirty(handle, ea_inode);
1493 err = ext4_inode_attach_jinode(ea_inode);
1495 if (ext4_xattr_inode_dec_ref(handle, ea_inode))
1496 ext4_warning_inode(ea_inode,
1498 iput(ea_inode);
1506 dquot_free_inode(ea_inode);
1507 dquot_drop(ea_inode);
1508 inode_lock(ea_inode);
1509 ea_inode->i_flags |= S_NOQUOTA;
1510 inode_unlock(ea_inode);
1513 return ea_inode;
1520 struct inode *ea_inode;
1542 ea_inode = ext4_iget(inode->i_sb, ce->e_value,
1544 if (IS_ERR(ea_inode))
1546 ext4_xattr_inode_set_class(ea_inode);
1547 if (i_size_read(ea_inode) == value_len &&
1548 !ext4_xattr_inode_read(ea_inode, ea_data, value_len) &&
1549 !ext4_xattr_inode_verify_hashes(ea_inode, NULL, ea_data,
1555 return ea_inode;
1557 iput(ea_inode);
1572 struct inode *ea_inode;
1577 ea_inode = ext4_xattr_inode_cache_find(inode, value, value_len, hash);
1578 if (ea_inode) {
1579 err = ext4_xattr_inode_inc_ref(handle, ea_inode);
1581 iput(ea_inode);
1585 *ret_inode = ea_inode;
1590 ea_inode = ext4_xattr_inode_create(handle, inode, hash);
1591 if (IS_ERR(ea_inode))
1592 return PTR_ERR(ea_inode);
1594 err = ext4_xattr_inode_write(handle, ea_inode, value, value_len);
1596 if (ext4_xattr_inode_dec_ref(handle, ea_inode))
1597 ext4_warning_inode(ea_inode, "cleanup dec ref error %d", err);
1598 iput(ea_inode);
1604 ea_inode->i_ino, true /* reusable */);
1606 *ret_inode = ea_inode;
1611 * Reserve min(block_size/8, 1024) bytes for xattr entries/names if ea_inode
1930 struct inode *ea_inode = NULL, *tmp_inode;
2047 * A ref count on ea_inode has been taken as part of the call to
2050 * initialized and has its own ref count on the ea_inode.
2055 &ea_inode);
2057 ea_inode = NULL;
2163 if (ea_inode) {
2164 /* Drop the extra ref on ea_inode. */
2166 ea_inode);
2168 ext4_warning_inode(ea_inode,
2171 iput(ea_inode);
2172 ea_inode = NULL;
2213 if (ea_inode) {
2216 error2 = ext4_xattr_inode_dec_ref(handle, ea_inode);
2218 ext4_warning_inode(ea_inode, "dec ref error=%d",
2223 ext4_xattr_inode_free_quota(inode, ea_inode,
2224 i_size_read(ea_inode));
2225 iput(ea_inode);
2927 struct inode *ea_inode;
2988 &ea_inode);
2991 ext4_xattr_inode_free_quota(inode, ea_inode,
2993 iput(ea_inode);