Lines Matching refs:ea_inode

122 void ext4_xattr_inode_set_class(struct inode *ea_inode)  in ext4_xattr_inode_set_class()  argument
124 struct ext4_inode_info *ei = EXT4_I(ea_inode); in ext4_xattr_inode_set_class()
126 lockdep_set_subclass(&ea_inode->i_rwsem, 1); in ext4_xattr_inode_set_class()
354 static u64 ext4_xattr_inode_get_ref(struct inode *ea_inode) in ext4_xattr_inode_get_ref() argument
356 return ((u64) inode_get_ctime_sec(ea_inode) << 32) | in ext4_xattr_inode_get_ref()
357 (u32) inode_peek_iversion_raw(ea_inode); in ext4_xattr_inode_get_ref()
360 static void ext4_xattr_inode_set_ref(struct inode *ea_inode, u64 ref_count) in ext4_xattr_inode_set_ref() argument
362 inode_set_ctime(ea_inode, (u32)(ref_count >> 32), 0); in ext4_xattr_inode_set_ref()
363 inode_set_iversion_raw(ea_inode, ref_count & 0xffffffff); in ext4_xattr_inode_set_ref()
366 static u32 ext4_xattr_inode_get_hash(struct inode *ea_inode) in ext4_xattr_inode_get_hash() argument
368 return (u32) inode_get_atime_sec(ea_inode); in ext4_xattr_inode_get_hash()
371 static void ext4_xattr_inode_set_hash(struct inode *ea_inode, u32 hash) in ext4_xattr_inode_set_hash() argument
373 inode_set_atime(ea_inode, hash, 0); in ext4_xattr_inode_set_hash()
379 static int ext4_xattr_inode_read(struct inode *ea_inode, void *buf, size_t size) in ext4_xattr_inode_read() argument
381 int blocksize = 1 << ea_inode->i_blkbits; in ext4_xattr_inode_read()
382 int bh_count = (size + blocksize - 1) >> ea_inode->i_blkbits; in ext4_xattr_inode_read()
394 ret = ext4_bread_batch(ea_inode, 0 /* block */, bh_count, in ext4_xattr_inode_read()
421 u32 ea_inode_hash, struct inode **ea_inode) in ext4_xattr_inode_iget() argument
463 *ea_inode = inode; in ext4_xattr_inode_iget()
483 ext4_xattr_inode_verify_hashes(struct inode *ea_inode, in ext4_xattr_inode_verify_hashes() argument
490 hash = ext4_xattr_inode_hash(EXT4_SB(ea_inode->i_sb), buffer, size); in ext4_xattr_inode_verify_hashes()
491 if (hash != ext4_xattr_inode_get_hash(ea_inode)) in ext4_xattr_inode_verify_hashes()
529 struct inode *ea_inode; in ext4_xattr_inode_get() local
533 le32_to_cpu(entry->e_hash), &ea_inode); in ext4_xattr_inode_get()
535 ea_inode = NULL; in ext4_xattr_inode_get()
539 if (i_size_read(ea_inode) != size) { in ext4_xattr_inode_get()
540 ext4_warning_inode(ea_inode, in ext4_xattr_inode_get()
542 i_size_read(ea_inode), size); in ext4_xattr_inode_get()
547 err = ext4_xattr_inode_read(ea_inode, buffer, size); in ext4_xattr_inode_get()
551 if (!ext4_test_inode_state(ea_inode, EXT4_STATE_LUSTRE_EA_INODE)) { in ext4_xattr_inode_get()
552 err = ext4_xattr_inode_verify_hashes(ea_inode, entry, buffer, in ext4_xattr_inode_get()
555 ext4_warning_inode(ea_inode, in ext4_xattr_inode_get()
562 ext4_xattr_inode_get_hash(ea_inode), in ext4_xattr_inode_get()
563 ea_inode->i_ino, true /* reusable */); in ext4_xattr_inode_get()
566 iput(ea_inode); in ext4_xattr_inode_get()
925 struct inode *ea_inode, in ext4_xattr_inode_free_quota() argument
928 if (ea_inode && in ext4_xattr_inode_free_quota()
929 ext4_test_inode_state(ea_inode, EXT4_STATE_LUSTRE_EA_INODE)) in ext4_xattr_inode_free_quota()
1018 static int ext4_xattr_inode_update_ref(handle_t *handle, struct inode *ea_inode, in ext4_xattr_inode_update_ref() argument
1025 inode_lock_nested(ea_inode, I_MUTEX_XATTR); in ext4_xattr_inode_update_ref()
1027 ret = ext4_reserve_inode_write(handle, ea_inode, &iloc); in ext4_xattr_inode_update_ref()
1031 ref_count = ext4_xattr_inode_get_ref(ea_inode); in ext4_xattr_inode_update_ref()
1033 ext4_xattr_inode_set_ref(ea_inode, ref_count); in ext4_xattr_inode_update_ref()
1037 ea_inode->i_ino, ref_count); in ext4_xattr_inode_update_ref()
1040 WARN_ONCE(ea_inode->i_nlink, "EA inode %lu i_nlink=%u", in ext4_xattr_inode_update_ref()
1041 ea_inode->i_ino, ea_inode->i_nlink); in ext4_xattr_inode_update_ref()
1043 set_nlink(ea_inode, 1); in ext4_xattr_inode_update_ref()
1044 ext4_orphan_del(handle, ea_inode); in ext4_xattr_inode_update_ref()
1048 ea_inode->i_ino, ref_count); in ext4_xattr_inode_update_ref()
1051 WARN_ONCE(ea_inode->i_nlink != 1, in ext4_xattr_inode_update_ref()
1053 ea_inode->i_ino, ea_inode->i_nlink); in ext4_xattr_inode_update_ref()
1055 clear_nlink(ea_inode); in ext4_xattr_inode_update_ref()
1056 ext4_orphan_add(handle, ea_inode); in ext4_xattr_inode_update_ref()
1060 ret = ext4_mark_iloc_dirty(handle, ea_inode, &iloc); in ext4_xattr_inode_update_ref()
1062 ext4_warning_inode(ea_inode, in ext4_xattr_inode_update_ref()
1065 inode_unlock(ea_inode); in ext4_xattr_inode_update_ref()
1069 static int ext4_xattr_inode_inc_ref(handle_t *handle, struct inode *ea_inode) in ext4_xattr_inode_inc_ref() argument
1071 return ext4_xattr_inode_update_ref(handle, ea_inode, 1); in ext4_xattr_inode_inc_ref()
1074 static int ext4_xattr_inode_dec_ref(handle_t *handle, struct inode *ea_inode) in ext4_xattr_inode_dec_ref() argument
1076 return ext4_xattr_inode_update_ref(handle, ea_inode, -1); in ext4_xattr_inode_dec_ref()
1082 struct inode *ea_inode; in ext4_xattr_inode_inc_ref_all() local
1095 &ea_inode); in ext4_xattr_inode_inc_ref_all()
1098 err = ext4_xattr_inode_inc_ref(handle, ea_inode); in ext4_xattr_inode_inc_ref_all()
1100 ext4_warning_inode(ea_inode, "inc ref error %d", err); in ext4_xattr_inode_inc_ref_all()
1101 iput(ea_inode); in ext4_xattr_inode_inc_ref_all()
1104 iput(ea_inode); in ext4_xattr_inode_inc_ref_all()
1119 &ea_inode); in ext4_xattr_inode_inc_ref_all()
1126 err = ext4_xattr_inode_dec_ref(handle, ea_inode); in ext4_xattr_inode_inc_ref_all()
1128 ext4_warning_inode(ea_inode, "cleanup dec ref error %d", in ext4_xattr_inode_inc_ref_all()
1130 iput(ea_inode); in ext4_xattr_inode_inc_ref_all()
1160 struct inode *ea_inode; in ext4_xattr_inode_dec_ref_all() local
1186 &ea_inode); in ext4_xattr_inode_dec_ref_all()
1190 err = ext4_expand_inode_array(ea_inode_array, ea_inode); in ext4_xattr_inode_dec_ref_all()
1192 ext4_warning_inode(ea_inode, in ext4_xattr_inode_dec_ref_all()
1194 iput(ea_inode); in ext4_xattr_inode_dec_ref_all()
1203 ext4_warning_inode(ea_inode, "Ensure credits err=%d", in ext4_xattr_inode_dec_ref_all()
1211 ext4_warning_inode(ea_inode, in ext4_xattr_inode_dec_ref_all()
1218 err = ext4_xattr_inode_dec_ref(handle, ea_inode); in ext4_xattr_inode_dec_ref_all()
1220 ext4_warning_inode(ea_inode, "ea_inode dec ref err=%d", in ext4_xattr_inode_dec_ref_all()
1226 ext4_xattr_inode_free_quota(parent, ea_inode, in ext4_xattr_inode_dec_ref_all()
1375 static int ext4_xattr_inode_write(handle_t *handle, struct inode *ea_inode, in ext4_xattr_inode_write() argument
1380 int blocksize = ea_inode->i_sb->s_blocksize; in ext4_xattr_inode_write()
1381 int max_blocks = (bufsize + blocksize - 1) >> ea_inode->i_blkbits; in ext4_xattr_inode_write()
1392 ret = ext4_map_blocks(handle, ea_inode, &map, in ext4_xattr_inode_write()
1395 ext4_mark_inode_dirty(handle, ea_inode); in ext4_xattr_inode_write()
1397 ext4_should_retry_alloc(ea_inode->i_sb, &retries)) { in ext4_xattr_inode_write()
1413 bh = ext4_getblk(handle, ea_inode, block, 0); in ext4_xattr_inode_write()
1418 EXT4_ERROR_INODE(ea_inode, in ext4_xattr_inode_write()
1422 ret = ext4_journal_get_write_access(handle, ea_inode->i_sb, bh, in ext4_xattr_inode_write()
1435 ext4_handle_dirty_metadata(handle, ea_inode, bh); in ext4_xattr_inode_write()
1442 inode_lock(ea_inode); in ext4_xattr_inode_write()
1443 i_size_write(ea_inode, wsize); in ext4_xattr_inode_write()
1444 ext4_update_i_disksize(ea_inode, wsize); in ext4_xattr_inode_write()
1445 inode_unlock(ea_inode); in ext4_xattr_inode_write()
1447 ret2 = ext4_mark_inode_dirty(handle, ea_inode); in ext4_xattr_inode_write()
1463 struct inode *ea_inode = NULL; in ext4_xattr_inode_create() local
1478 ea_inode = ext4_new_inode(handle, inode->i_sb->s_root->d_inode, in ext4_xattr_inode_create()
1481 if (!IS_ERR(ea_inode)) { in ext4_xattr_inode_create()
1482 ea_inode->i_op = &ext4_file_inode_operations; in ext4_xattr_inode_create()
1483 ea_inode->i_fop = &ext4_file_operations; in ext4_xattr_inode_create()
1484 ext4_set_aops(ea_inode); in ext4_xattr_inode_create()
1485 ext4_xattr_inode_set_class(ea_inode); in ext4_xattr_inode_create()
1486 unlock_new_inode(ea_inode); in ext4_xattr_inode_create()
1487 ext4_xattr_inode_set_ref(ea_inode, 1); in ext4_xattr_inode_create()
1488 ext4_xattr_inode_set_hash(ea_inode, hash); in ext4_xattr_inode_create()
1489 err = ext4_mark_inode_dirty(handle, ea_inode); in ext4_xattr_inode_create()
1491 err = ext4_inode_attach_jinode(ea_inode); in ext4_xattr_inode_create()
1493 if (ext4_xattr_inode_dec_ref(handle, ea_inode)) in ext4_xattr_inode_create()
1494 ext4_warning_inode(ea_inode, in ext4_xattr_inode_create()
1496 iput(ea_inode); in ext4_xattr_inode_create()
1504 dquot_free_inode(ea_inode); in ext4_xattr_inode_create()
1505 dquot_drop(ea_inode); in ext4_xattr_inode_create()
1506 inode_lock(ea_inode); in ext4_xattr_inode_create()
1507 ea_inode->i_flags |= S_NOQUOTA; in ext4_xattr_inode_create()
1508 inode_unlock(ea_inode); in ext4_xattr_inode_create()
1511 return ea_inode; in ext4_xattr_inode_create()
1518 struct inode *ea_inode; in ext4_xattr_inode_cache_find() local
1540 ea_inode = ext4_iget(inode->i_sb, ce->e_value, in ext4_xattr_inode_cache_find()
1542 if (IS_ERR(ea_inode)) in ext4_xattr_inode_cache_find()
1544 ext4_xattr_inode_set_class(ea_inode); in ext4_xattr_inode_cache_find()
1545 if (i_size_read(ea_inode) == value_len && in ext4_xattr_inode_cache_find()
1546 !ext4_xattr_inode_read(ea_inode, ea_data, value_len) && in ext4_xattr_inode_cache_find()
1547 !ext4_xattr_inode_verify_hashes(ea_inode, NULL, ea_data, in ext4_xattr_inode_cache_find()
1553 return ea_inode; in ext4_xattr_inode_cache_find()
1555 iput(ea_inode); in ext4_xattr_inode_cache_find()
1569 struct inode *ea_inode; in ext4_xattr_inode_lookup_create() local
1579 ea_inode = ext4_xattr_inode_cache_find(inode, value, value_len, hash); in ext4_xattr_inode_lookup_create()
1580 if (ea_inode) { in ext4_xattr_inode_lookup_create()
1581 err = ext4_xattr_inode_inc_ref(handle, ea_inode); in ext4_xattr_inode_lookup_create()
1584 return ea_inode; in ext4_xattr_inode_lookup_create()
1588 ea_inode = ext4_xattr_inode_create(handle, inode, hash); in ext4_xattr_inode_lookup_create()
1589 if (IS_ERR(ea_inode)) { in ext4_xattr_inode_lookup_create()
1591 return ea_inode; in ext4_xattr_inode_lookup_create()
1594 err = ext4_xattr_inode_write(handle, ea_inode, value, value_len); in ext4_xattr_inode_lookup_create()
1596 if (ext4_xattr_inode_dec_ref(handle, ea_inode)) in ext4_xattr_inode_lookup_create()
1597 ext4_warning_inode(ea_inode, "cleanup dec ref error %d", err); in ext4_xattr_inode_lookup_create()
1603 ea_inode->i_ino, true /* reusable */); in ext4_xattr_inode_lookup_create()
1604 return ea_inode; in ext4_xattr_inode_lookup_create()
1606 iput(ea_inode); in ext4_xattr_inode_lookup_create()
1898 struct inode *ea_inode = NULL, *tmp_inode; in ext4_xattr_block_set() local
1908 ea_inode = ext4_xattr_inode_lookup_create(handle, inode, in ext4_xattr_block_set()
1910 if (IS_ERR(ea_inode)) { in ext4_xattr_block_set()
1911 error = PTR_ERR(ea_inode); in ext4_xattr_block_set()
1912 ea_inode = NULL; in ext4_xattr_block_set()
1952 ea_inode, true /* is_block */); in ext4_xattr_block_set()
2020 error = ext4_xattr_set_entry(i, s, handle, inode, ea_inode, in ext4_xattr_block_set()
2133 if (ea_inode) { in ext4_xattr_block_set()
2136 ea_inode); in ext4_xattr_block_set()
2138 ext4_warning_inode(ea_inode, in ext4_xattr_block_set()
2141 iput(ea_inode); in ext4_xattr_block_set()
2142 ea_inode = NULL; in ext4_xattr_block_set()
2183 if (ea_inode) { in ext4_xattr_block_set()
2187 error2 = ext4_xattr_inode_dec_ref(handle, ea_inode); in ext4_xattr_block_set()
2189 ext4_warning_inode(ea_inode, "dec ref error=%d", in ext4_xattr_block_set()
2191 ext4_xattr_inode_free_quota(inode, ea_inode, in ext4_xattr_block_set()
2192 i_size_read(ea_inode)); in ext4_xattr_block_set()
2194 iput(ea_inode); in ext4_xattr_block_set()
2248 struct inode *ea_inode = NULL; in ext4_xattr_ibody_set() local
2258 ea_inode = ext4_xattr_inode_lookup_create(handle, inode, in ext4_xattr_ibody_set()
2260 if (IS_ERR(ea_inode)) in ext4_xattr_ibody_set()
2261 return PTR_ERR(ea_inode); in ext4_xattr_ibody_set()
2263 error = ext4_xattr_set_entry(i, s, handle, inode, ea_inode, in ext4_xattr_ibody_set()
2266 if (ea_inode) { in ext4_xattr_ibody_set()
2269 error2 = ext4_xattr_inode_dec_ref(handle, ea_inode); in ext4_xattr_ibody_set()
2271 ext4_warning_inode(ea_inode, "dec ref error=%d", in ext4_xattr_ibody_set()
2274 ext4_xattr_inode_free_quota(inode, ea_inode, in ext4_xattr_ibody_set()
2275 i_size_read(ea_inode)); in ext4_xattr_ibody_set()
2276 iput(ea_inode); in ext4_xattr_ibody_set()
2288 iput(ea_inode); in ext4_xattr_ibody_set()
2913 struct inode *ea_inode; in ext4_xattr_delete_inode() local
2974 &ea_inode); in ext4_xattr_delete_inode()
2977 ext4_xattr_inode_free_quota(inode, ea_inode, in ext4_xattr_delete_inode()
2979 iput(ea_inode); in ext4_xattr_delete_inode()