Lines Matching refs: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";
354 static u64 ext4_xattr_inode_get_ref(struct inode *ea_inode)
356 return ((u64) inode_get_ctime_sec(ea_inode) << 32) |
357 (u32) inode_peek_iversion_raw(ea_inode);
360 static void ext4_xattr_inode_set_ref(struct inode *ea_inode, u64 ref_count)
362 inode_set_ctime(ea_inode, (u32)(ref_count >> 32), 0);
363 inode_set_iversion_raw(ea_inode, ref_count & 0xffffffff);
366 static u32 ext4_xattr_inode_get_hash(struct inode *ea_inode)
368 return (u32) inode_get_atime_sec(ea_inode);
371 static void ext4_xattr_inode_set_hash(struct inode *ea_inode, u32 hash)
373 inode_set_atime(ea_inode, hash, 0);
379 static int ext4_xattr_inode_read(struct inode *ea_inode, void *buf, size_t size)
381 int blocksize = 1 << ea_inode->i_blkbits;
382 int bh_count = (size + blocksize - 1) >> ea_inode->i_blkbits;
394 ret = ext4_bread_batch(ea_inode, 0 /* block */, bh_count,
400 /* There shouldn't be any holes in ea_inode. */
421 u32 ea_inode_hash, struct inode **ea_inode)
450 * backpointer from ea_inode to the parent inode.
463 *ea_inode = inode;
483 ext4_xattr_inode_verify_hashes(struct inode *ea_inode,
490 hash = ext4_xattr_inode_hash(EXT4_SB(ea_inode->i_sb), buffer, size);
491 if (hash != ext4_xattr_inode_get_hash(ea_inode))
529 struct inode *ea_inode;
533 le32_to_cpu(entry->e_hash), &ea_inode);
535 ea_inode = NULL;
539 if (i_size_read(ea_inode) != size) {
540 ext4_warning_inode(ea_inode,
541 "ea_inode file size=%llu entry size=%zu",
542 i_size_read(ea_inode), size);
547 err = ext4_xattr_inode_read(ea_inode, buffer, size);
551 if (!ext4_test_inode_state(ea_inode, EXT4_STATE_LUSTRE_EA_INODE)) {
552 err = ext4_xattr_inode_verify_hashes(ea_inode, entry, buffer,
555 ext4_warning_inode(ea_inode,
562 ext4_xattr_inode_get_hash(ea_inode),
563 ea_inode->i_ino, true /* reusable */);
566 iput(ea_inode);
925 struct inode *ea_inode,
928 if (ea_inode &&
929 ext4_test_inode_state(ea_inode, EXT4_STATE_LUSTRE_EA_INODE))
967 /* We are done if ea_inode feature is not enabled. */
971 /* New ea_inode, inode map, block bitmap, group descriptor. */
987 /* Dereference ea_inode holding old xattr value.
988 * Old ea_inode, inode map, block bitmap, group descriptor.
992 /* Data blocks for old ea_inode. */
996 * ea_inode.
1012 /* Ref count update on ea_inode. */
1018 static int ext4_xattr_inode_update_ref(handle_t *handle, struct inode *ea_inode,
1025 inode_lock_nested(ea_inode, I_MUTEX_XATTR);
1027 ret = ext4_reserve_inode_write(handle, ea_inode, &iloc);
1031 ref_count = ext4_xattr_inode_get_ref(ea_inode);
1033 ext4_xattr_inode_set_ref(ea_inode, ref_count);
1037 ea_inode->i_ino, ref_count);
1040 WARN_ONCE(ea_inode->i_nlink, "EA inode %lu i_nlink=%u",
1041 ea_inode->i_ino, ea_inode->i_nlink);
1043 set_nlink(ea_inode, 1);
1044 ext4_orphan_del(handle, ea_inode);
1048 ea_inode->i_ino, ref_count);
1051 WARN_ONCE(ea_inode->i_nlink != 1,
1053 ea_inode->i_ino, ea_inode->i_nlink);
1055 clear_nlink(ea_inode);
1056 ext4_orphan_add(handle, ea_inode);
1060 ret = ext4_mark_iloc_dirty(handle, ea_inode, &iloc);
1062 ext4_warning_inode(ea_inode,
1065 inode_unlock(ea_inode);
1069 static int ext4_xattr_inode_inc_ref(handle_t *handle, struct inode *ea_inode)
1071 return ext4_xattr_inode_update_ref(handle, ea_inode, 1);
1074 static int ext4_xattr_inode_dec_ref(handle_t *handle, struct inode *ea_inode)
1076 return ext4_xattr_inode_update_ref(handle, ea_inode, -1);
1082 struct inode *ea_inode;
1095 &ea_inode);
1098 err = ext4_xattr_inode_inc_ref(handle, ea_inode);
1100 ext4_warning_inode(ea_inode, "inc ref error %d", err);
1101 iput(ea_inode);
1104 iput(ea_inode);
1119 &ea_inode);
1126 err = ext4_xattr_inode_dec_ref(handle, ea_inode);
1128 ext4_warning_inode(ea_inode, "cleanup dec ref error %d",
1130 iput(ea_inode);
1160 struct inode *ea_inode;
1176 /* One credit for dec ref on ea_inode, one for orphan list addition, */
1186 &ea_inode);
1190 err = ext4_expand_inode_array(ea_inode_array, ea_inode);
1192 ext4_warning_inode(ea_inode,
1194 iput(ea_inode);
1203 ext4_warning_inode(ea_inode, "Ensure credits err=%d",
1211 ext4_warning_inode(ea_inode,
1218 err = ext4_xattr_inode_dec_ref(handle, ea_inode);
1220 ext4_warning_inode(ea_inode, "ea_inode dec ref err=%d",
1226 ext4_xattr_inode_free_quota(parent, ea_inode,
1230 * Forget about ea_inode within the same transaction that
1375 static int ext4_xattr_inode_write(handle_t *handle, struct inode *ea_inode,
1380 int blocksize = ea_inode->i_sb->s_blocksize;
1381 int max_blocks = (bufsize + blocksize - 1) >> ea_inode->i_blkbits;
1392 ret = ext4_map_blocks(handle, ea_inode, &map,
1395 ext4_mark_inode_dirty(handle, ea_inode);
1397 ext4_should_retry_alloc(ea_inode->i_sb, &retries)) {
1413 bh = ext4_getblk(handle, ea_inode, block, 0);
1418 EXT4_ERROR_INODE(ea_inode,
1422 ret = ext4_journal_get_write_access(handle, ea_inode->i_sb, bh,
1435 ext4_handle_dirty_metadata(handle, ea_inode, bh);
1442 inode_lock(ea_inode);
1443 i_size_write(ea_inode, wsize);
1444 ext4_update_i_disksize(ea_inode, wsize);
1445 inode_unlock(ea_inode);
1447 ret2 = ext4_mark_inode_dirty(handle, ea_inode);
1463 struct inode *ea_inode = NULL;
1478 ea_inode = ext4_new_inode(handle, inode->i_sb->s_root->d_inode,
1481 if (!IS_ERR(ea_inode)) {
1482 ea_inode->i_op = &ext4_file_inode_operations;
1483 ea_inode->i_fop = &ext4_file_operations;
1484 ext4_set_aops(ea_inode);
1485 ext4_xattr_inode_set_class(ea_inode);
1486 unlock_new_inode(ea_inode);
1487 ext4_xattr_inode_set_ref(ea_inode, 1);
1488 ext4_xattr_inode_set_hash(ea_inode, hash);
1489 err = ext4_mark_inode_dirty(handle, ea_inode);
1491 err = ext4_inode_attach_jinode(ea_inode);
1493 if (ext4_xattr_inode_dec_ref(handle, ea_inode))
1494 ext4_warning_inode(ea_inode,
1496 iput(ea_inode);
1504 dquot_free_inode(ea_inode);
1505 dquot_drop(ea_inode);
1506 inode_lock(ea_inode);
1507 ea_inode->i_flags |= S_NOQUOTA;
1508 inode_unlock(ea_inode);
1511 return ea_inode;
1518 struct inode *ea_inode;
1540 ea_inode = ext4_iget(inode->i_sb, ce->e_value,
1542 if (IS_ERR(ea_inode))
1544 ext4_xattr_inode_set_class(ea_inode);
1545 if (i_size_read(ea_inode) == value_len &&
1546 !ext4_xattr_inode_read(ea_inode, ea_data, value_len) &&
1547 !ext4_xattr_inode_verify_hashes(ea_inode, NULL, ea_data,
1553 return ea_inode;
1555 iput(ea_inode);
1569 struct inode *ea_inode;
1579 ea_inode = ext4_xattr_inode_cache_find(inode, value, value_len, hash);
1580 if (ea_inode) {
1581 err = ext4_xattr_inode_inc_ref(handle, ea_inode);
1584 return ea_inode;
1588 ea_inode = ext4_xattr_inode_create(handle, inode, hash);
1589 if (IS_ERR(ea_inode)) {
1591 return 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);
1603 ea_inode->i_ino, true /* reusable */);
1604 return ea_inode;
1606 iput(ea_inode);
1612 * Reserve min(block_size/8, 1024) bytes for xattr entries/names if ea_inode
1898 struct inode *ea_inode = NULL, *tmp_inode;
1908 ea_inode = ext4_xattr_inode_lookup_create(handle, inode,
1910 if (IS_ERR(ea_inode)) {
1911 error = PTR_ERR(ea_inode);
1912 ea_inode = NULL;
1952 ea_inode, true /* is_block */);
2020 error = ext4_xattr_set_entry(i, s, handle, inode, ea_inode,
2133 if (ea_inode) {
2134 /* Drop the extra ref on ea_inode. */
2136 ea_inode);
2138 ext4_warning_inode(ea_inode,
2141 iput(ea_inode);
2142 ea_inode = NULL;
2183 if (ea_inode) {
2187 error2 = ext4_xattr_inode_dec_ref(handle, ea_inode);
2189 ext4_warning_inode(ea_inode, "dec ref error=%d",
2191 ext4_xattr_inode_free_quota(inode, ea_inode,
2192 i_size_read(ea_inode));
2194 iput(ea_inode);
2248 struct inode *ea_inode = NULL;
2258 ea_inode = ext4_xattr_inode_lookup_create(handle, inode,
2260 if (IS_ERR(ea_inode))
2261 return PTR_ERR(ea_inode);
2263 error = ext4_xattr_set_entry(i, s, handle, inode, ea_inode,
2266 if (ea_inode) {
2269 error2 = ext4_xattr_inode_dec_ref(handle, ea_inode);
2271 ext4_warning_inode(ea_inode, "dec ref error=%d",
2274 ext4_xattr_inode_free_quota(inode, ea_inode,
2275 i_size_read(ea_inode));
2276 iput(ea_inode);
2288 iput(ea_inode);
2913 struct inode *ea_inode;
2974 &ea_inode);
2977 ext4_xattr_inode_free_quota(inode, ea_inode,
2979 iput(ea_inode);