Lines Matching refs:ea_inode
124 void ext4_xattr_inode_set_class(struct inode *ea_inode) in ext4_xattr_inode_set_class() argument
126 lockdep_set_subclass(&ea_inode->i_rwsem, 1); in ext4_xattr_inode_set_class()
317 static u64 ext4_xattr_inode_get_ref(struct inode *ea_inode) in ext4_xattr_inode_get_ref() argument
319 return ((u64)ea_inode->i_ctime.tv_sec << 32) | in ext4_xattr_inode_get_ref()
320 (u32) inode_peek_iversion_raw(ea_inode); in ext4_xattr_inode_get_ref()
323 static void ext4_xattr_inode_set_ref(struct inode *ea_inode, u64 ref_count) in ext4_xattr_inode_set_ref() argument
325 ea_inode->i_ctime.tv_sec = (u32)(ref_count >> 32); in ext4_xattr_inode_set_ref()
326 inode_set_iversion_raw(ea_inode, ref_count & 0xffffffff); in ext4_xattr_inode_set_ref()
329 static u32 ext4_xattr_inode_get_hash(struct inode *ea_inode) in ext4_xattr_inode_get_hash() argument
331 return (u32)ea_inode->i_atime.tv_sec; in ext4_xattr_inode_get_hash()
334 static void ext4_xattr_inode_set_hash(struct inode *ea_inode, u32 hash) in ext4_xattr_inode_set_hash() argument
336 ea_inode->i_atime.tv_sec = hash; in ext4_xattr_inode_set_hash()
342 static int ext4_xattr_inode_read(struct inode *ea_inode, void *buf, size_t size) in ext4_xattr_inode_read() argument
344 int blocksize = 1 << ea_inode->i_blkbits; in ext4_xattr_inode_read()
345 int bh_count = (size + blocksize - 1) >> ea_inode->i_blkbits; in ext4_xattr_inode_read()
357 ret = ext4_bread_batch(ea_inode, 0 /* block */, bh_count, in ext4_xattr_inode_read()
384 u32 ea_inode_hash, struct inode **ea_inode) in ext4_xattr_inode_iget() argument
432 *ea_inode = inode; in ext4_xattr_inode_iget()
440 ext4_xattr_inode_verify_hashes(struct inode *ea_inode, in ext4_xattr_inode_verify_hashes() argument
447 hash = ext4_xattr_inode_hash(EXT4_SB(ea_inode->i_sb), buffer, size); in ext4_xattr_inode_verify_hashes()
448 if (hash != ext4_xattr_inode_get_hash(ea_inode)) in ext4_xattr_inode_verify_hashes()
472 struct inode *ea_inode; in ext4_xattr_inode_get() local
476 le32_to_cpu(entry->e_hash), &ea_inode); in ext4_xattr_inode_get()
478 ea_inode = NULL; in ext4_xattr_inode_get()
482 if (i_size_read(ea_inode) != size) { in ext4_xattr_inode_get()
483 ext4_warning_inode(ea_inode, in ext4_xattr_inode_get()
485 i_size_read(ea_inode), size); in ext4_xattr_inode_get()
490 err = ext4_xattr_inode_read(ea_inode, buffer, size); in ext4_xattr_inode_get()
494 if (!ext4_test_inode_state(ea_inode, EXT4_STATE_LUSTRE_EA_INODE)) { in ext4_xattr_inode_get()
495 err = ext4_xattr_inode_verify_hashes(ea_inode, entry, buffer, in ext4_xattr_inode_get()
498 ext4_warning_inode(ea_inode, in ext4_xattr_inode_get()
505 ext4_xattr_inode_get_hash(ea_inode), in ext4_xattr_inode_get()
506 ea_inode->i_ino, true /* reusable */); in ext4_xattr_inode_get()
509 iput(ea_inode); in ext4_xattr_inode_get()
879 struct inode *ea_inode, in ext4_xattr_inode_free_quota() argument
882 if (ea_inode && in ext4_xattr_inode_free_quota()
883 ext4_test_inode_state(ea_inode, EXT4_STATE_LUSTRE_EA_INODE)) in ext4_xattr_inode_free_quota()
972 static int ext4_xattr_inode_update_ref(handle_t *handle, struct inode *ea_inode, in ext4_xattr_inode_update_ref() argument
975 struct mb_cache *ea_inode_cache = EA_INODE_CACHE(ea_inode); in ext4_xattr_inode_update_ref()
981 inode_lock(ea_inode); in ext4_xattr_inode_update_ref()
983 ret = ext4_reserve_inode_write(handle, ea_inode, &iloc); in ext4_xattr_inode_update_ref()
987 ref_count = ext4_xattr_inode_get_ref(ea_inode); in ext4_xattr_inode_update_ref()
989 ext4_xattr_inode_set_ref(ea_inode, ref_count); in ext4_xattr_inode_update_ref()
993 ea_inode->i_ino, ref_count); in ext4_xattr_inode_update_ref()
996 WARN_ONCE(ea_inode->i_nlink, "EA inode %lu i_nlink=%u", in ext4_xattr_inode_update_ref()
997 ea_inode->i_ino, ea_inode->i_nlink); in ext4_xattr_inode_update_ref()
999 set_nlink(ea_inode, 1); in ext4_xattr_inode_update_ref()
1000 ext4_orphan_del(handle, ea_inode); in ext4_xattr_inode_update_ref()
1003 hash = ext4_xattr_inode_get_hash(ea_inode); in ext4_xattr_inode_update_ref()
1006 ea_inode->i_ino, in ext4_xattr_inode_update_ref()
1012 ea_inode->i_ino, ref_count); in ext4_xattr_inode_update_ref()
1015 WARN_ONCE(ea_inode->i_nlink != 1, in ext4_xattr_inode_update_ref()
1017 ea_inode->i_ino, ea_inode->i_nlink); in ext4_xattr_inode_update_ref()
1019 clear_nlink(ea_inode); in ext4_xattr_inode_update_ref()
1020 ext4_orphan_add(handle, ea_inode); in ext4_xattr_inode_update_ref()
1023 hash = ext4_xattr_inode_get_hash(ea_inode); in ext4_xattr_inode_update_ref()
1025 ea_inode->i_ino); in ext4_xattr_inode_update_ref()
1030 ret = ext4_mark_iloc_dirty(handle, ea_inode, &iloc); in ext4_xattr_inode_update_ref()
1032 ext4_warning_inode(ea_inode, in ext4_xattr_inode_update_ref()
1035 inode_unlock(ea_inode); in ext4_xattr_inode_update_ref()
1039 static int ext4_xattr_inode_inc_ref(handle_t *handle, struct inode *ea_inode) in ext4_xattr_inode_inc_ref() argument
1041 return ext4_xattr_inode_update_ref(handle, ea_inode, 1); in ext4_xattr_inode_inc_ref()
1044 static int ext4_xattr_inode_dec_ref(handle_t *handle, struct inode *ea_inode) in ext4_xattr_inode_dec_ref() argument
1046 return ext4_xattr_inode_update_ref(handle, ea_inode, -1); in ext4_xattr_inode_dec_ref()
1052 struct inode *ea_inode; in ext4_xattr_inode_inc_ref_all() local
1065 &ea_inode); in ext4_xattr_inode_inc_ref_all()
1068 err = ext4_xattr_inode_inc_ref(handle, ea_inode); in ext4_xattr_inode_inc_ref_all()
1070 ext4_warning_inode(ea_inode, "inc ref error %d", err); in ext4_xattr_inode_inc_ref_all()
1071 iput(ea_inode); in ext4_xattr_inode_inc_ref_all()
1074 iput(ea_inode); in ext4_xattr_inode_inc_ref_all()
1089 &ea_inode); in ext4_xattr_inode_inc_ref_all()
1096 err = ext4_xattr_inode_dec_ref(handle, ea_inode); in ext4_xattr_inode_inc_ref_all()
1098 ext4_warning_inode(ea_inode, "cleanup dec ref error %d", in ext4_xattr_inode_inc_ref_all()
1100 iput(ea_inode); in ext4_xattr_inode_inc_ref_all()
1130 struct inode *ea_inode; in ext4_xattr_inode_dec_ref_all() local
1147 &ea_inode); in ext4_xattr_inode_dec_ref_all()
1151 err = ext4_expand_inode_array(ea_inode_array, ea_inode); in ext4_xattr_inode_dec_ref_all()
1153 ext4_warning_inode(ea_inode, in ext4_xattr_inode_dec_ref_all()
1155 iput(ea_inode); in ext4_xattr_inode_dec_ref_all()
1164 ext4_warning_inode(ea_inode, "Ensure credits err=%d", in ext4_xattr_inode_dec_ref_all()
1171 ext4_warning_inode(ea_inode, in ext4_xattr_inode_dec_ref_all()
1178 err = ext4_xattr_inode_dec_ref(handle, ea_inode); in ext4_xattr_inode_dec_ref_all()
1180 ext4_warning_inode(ea_inode, "ea_inode dec ref err=%d", in ext4_xattr_inode_dec_ref_all()
1186 ext4_xattr_inode_free_quota(parent, ea_inode, in ext4_xattr_inode_dec_ref_all()
1324 static int ext4_xattr_inode_write(handle_t *handle, struct inode *ea_inode, in ext4_xattr_inode_write() argument
1329 int blocksize = ea_inode->i_sb->s_blocksize; in ext4_xattr_inode_write()
1330 int max_blocks = (bufsize + blocksize - 1) >> ea_inode->i_blkbits; in ext4_xattr_inode_write()
1341 ret = ext4_map_blocks(handle, ea_inode, &map, in ext4_xattr_inode_write()
1344 ext4_mark_inode_dirty(handle, ea_inode); in ext4_xattr_inode_write()
1346 ext4_should_retry_alloc(ea_inode->i_sb, &retries)) { in ext4_xattr_inode_write()
1362 bh = ext4_getblk(handle, ea_inode, block, 0); in ext4_xattr_inode_write()
1367 EXT4_ERROR_INODE(ea_inode, in ext4_xattr_inode_write()
1377 ext4_handle_dirty_metadata(handle, ea_inode, bh); in ext4_xattr_inode_write()
1384 inode_lock(ea_inode); in ext4_xattr_inode_write()
1385 i_size_write(ea_inode, wsize); in ext4_xattr_inode_write()
1386 ext4_update_i_disksize(ea_inode, wsize); in ext4_xattr_inode_write()
1387 inode_unlock(ea_inode); in ext4_xattr_inode_write()
1389 ret2 = ext4_mark_inode_dirty(handle, ea_inode); in ext4_xattr_inode_write()
1405 struct inode *ea_inode = NULL; in ext4_xattr_inode_create() local
1413 ea_inode = ext4_new_inode(handle, inode->i_sb->s_root->d_inode, in ext4_xattr_inode_create()
1416 if (!IS_ERR(ea_inode)) { in ext4_xattr_inode_create()
1417 ea_inode->i_op = &ext4_file_inode_operations; in ext4_xattr_inode_create()
1418 ea_inode->i_fop = &ext4_file_operations; in ext4_xattr_inode_create()
1419 ext4_set_aops(ea_inode); in ext4_xattr_inode_create()
1420 ext4_xattr_inode_set_class(ea_inode); in ext4_xattr_inode_create()
1421 unlock_new_inode(ea_inode); in ext4_xattr_inode_create()
1422 ext4_xattr_inode_set_ref(ea_inode, 1); in ext4_xattr_inode_create()
1423 ext4_xattr_inode_set_hash(ea_inode, hash); in ext4_xattr_inode_create()
1424 err = ext4_mark_inode_dirty(handle, ea_inode); in ext4_xattr_inode_create()
1426 err = ext4_inode_attach_jinode(ea_inode); in ext4_xattr_inode_create()
1428 iput(ea_inode); in ext4_xattr_inode_create()
1436 dquot_free_inode(ea_inode); in ext4_xattr_inode_create()
1437 dquot_drop(ea_inode); in ext4_xattr_inode_create()
1438 inode_lock(ea_inode); in ext4_xattr_inode_create()
1439 ea_inode->i_flags |= S_NOQUOTA; in ext4_xattr_inode_create()
1440 inode_unlock(ea_inode); in ext4_xattr_inode_create()
1443 return ea_inode; in ext4_xattr_inode_create()
1450 struct inode *ea_inode; in ext4_xattr_inode_cache_find() local
1469 ea_inode = ext4_iget(inode->i_sb, ce->e_value, in ext4_xattr_inode_cache_find()
1471 if (!IS_ERR(ea_inode) && in ext4_xattr_inode_cache_find()
1472 !is_bad_inode(ea_inode) && in ext4_xattr_inode_cache_find()
1473 (EXT4_I(ea_inode)->i_flags & EXT4_EA_INODE_FL) && in ext4_xattr_inode_cache_find()
1474 i_size_read(ea_inode) == value_len && in ext4_xattr_inode_cache_find()
1475 !ext4_xattr_inode_read(ea_inode, ea_data, value_len) && in ext4_xattr_inode_cache_find()
1476 !ext4_xattr_inode_verify_hashes(ea_inode, NULL, ea_data, in ext4_xattr_inode_cache_find()
1482 return ea_inode; in ext4_xattr_inode_cache_find()
1485 if (!IS_ERR(ea_inode)) in ext4_xattr_inode_cache_find()
1486 iput(ea_inode); in ext4_xattr_inode_cache_find()
1500 struct inode *ea_inode; in ext4_xattr_inode_lookup_create() local
1505 ea_inode = ext4_xattr_inode_cache_find(inode, value, value_len, hash); in ext4_xattr_inode_lookup_create()
1506 if (ea_inode) { in ext4_xattr_inode_lookup_create()
1507 err = ext4_xattr_inode_inc_ref(handle, ea_inode); in ext4_xattr_inode_lookup_create()
1509 iput(ea_inode); in ext4_xattr_inode_lookup_create()
1513 *ret_inode = ea_inode; in ext4_xattr_inode_lookup_create()
1518 ea_inode = ext4_xattr_inode_create(handle, inode, hash); in ext4_xattr_inode_lookup_create()
1519 if (IS_ERR(ea_inode)) in ext4_xattr_inode_lookup_create()
1520 return PTR_ERR(ea_inode); in ext4_xattr_inode_lookup_create()
1522 err = ext4_xattr_inode_write(handle, ea_inode, value, value_len); in ext4_xattr_inode_lookup_create()
1524 ext4_xattr_inode_dec_ref(handle, ea_inode); in ext4_xattr_inode_lookup_create()
1525 iput(ea_inode); in ext4_xattr_inode_lookup_create()
1531 ea_inode->i_ino, true /* reusable */); in ext4_xattr_inode_lookup_create()
1533 *ret_inode = ea_inode; in ext4_xattr_inode_lookup_create()
1843 struct inode *ea_inode = NULL, *tmp_inode; in ext4_xattr_block_set() local
1958 &ea_inode); in ext4_xattr_block_set()
1960 ea_inode = NULL; in ext4_xattr_block_set()
2077 if (ea_inode) { in ext4_xattr_block_set()
2080 ea_inode); in ext4_xattr_block_set()
2082 ext4_warning_inode(ea_inode, in ext4_xattr_block_set()
2085 iput(ea_inode); in ext4_xattr_block_set()
2086 ea_inode = NULL; in ext4_xattr_block_set()
2126 if (ea_inode) { in ext4_xattr_block_set()
2129 error2 = ext4_xattr_inode_dec_ref(handle, ea_inode); in ext4_xattr_block_set()
2131 ext4_warning_inode(ea_inode, "dec ref error=%d", in ext4_xattr_block_set()
2136 ext4_xattr_inode_free_quota(inode, ea_inode, in ext4_xattr_block_set()
2137 i_size_read(ea_inode)); in ext4_xattr_block_set()
2138 iput(ea_inode); in ext4_xattr_block_set()
2850 struct inode *ea_inode; in ext4_xattr_delete_inode() local
2910 &ea_inode); in ext4_xattr_delete_inode()
2913 ext4_xattr_inode_free_quota(inode, ea_inode, in ext4_xattr_delete_inode()
2915 iput(ea_inode); in ext4_xattr_delete_inode()