Lines Matching refs:inode
64 # define ea_idebug(inode, f...) do { \ argument
66 inode->i_sb->s_id, inode->i_ino); \
79 # define ea_idebug(inode, fmt, ...) no_printk(fmt, ##__VA_ARGS__) argument
84 static struct buffer_head *ext4_xattr_cache_find(struct inode *,
117 #define EXT4_GET_MB_CACHE(inode) (((struct ext4_sb_info *) \ argument
118 inode->i_sb->s_fs_info)->s_mb_cache)
120 static __le32 ext4_xattr_block_csum(struct inode *inode, in ext4_xattr_block_csum() argument
124 struct ext4_sb_info *sbi = EXT4_SB(inode->i_sb); in ext4_xattr_block_csum()
134 EXT4_BLOCK_SIZE(inode->i_sb)); in ext4_xattr_block_csum()
140 static int ext4_xattr_block_csum_verify(struct inode *inode, in ext4_xattr_block_csum_verify() argument
144 if (ext4_has_metadata_csum(inode->i_sb) && in ext4_xattr_block_csum_verify()
145 (hdr->h_checksum != ext4_xattr_block_csum(inode, block_nr, hdr))) in ext4_xattr_block_csum_verify()
150 static void ext4_xattr_block_csum_set(struct inode *inode, in ext4_xattr_block_csum_set() argument
154 if (!ext4_has_metadata_csum(inode->i_sb)) in ext4_xattr_block_csum_set()
157 hdr->h_checksum = ext4_xattr_block_csum(inode, block_nr, hdr); in ext4_xattr_block_csum_set()
161 struct inode *inode, in ext4_handle_dirty_xattr_block() argument
164 ext4_xattr_block_csum_set(inode, bh->b_blocknr, BHDR(bh)); in ext4_handle_dirty_xattr_block()
165 return ext4_handle_dirty_metadata(handle, inode, bh); in ext4_handle_dirty_xattr_block()
216 ext4_xattr_check_block(struct inode *inode, struct buffer_head *bh) in ext4_xattr_check_block() argument
226 if (!ext4_xattr_block_csum_verify(inode, bh->b_blocknr, BHDR(bh))) in ext4_xattr_check_block()
274 ext4_xattr_block_get(struct inode *inode, int name_index, const char *name, in ext4_xattr_block_get() argument
281 struct mb_cache *ext4_mb_cache = EXT4_GET_MB_CACHE(inode); in ext4_xattr_block_get()
283 ea_idebug(inode, "name=%d.%s, buffer=%p, buffer_size=%ld", in ext4_xattr_block_get()
287 if (!EXT4_I(inode)->i_file_acl) in ext4_xattr_block_get()
289 ea_idebug(inode, "reading block %llu", in ext4_xattr_block_get()
290 (unsigned long long)EXT4_I(inode)->i_file_acl); in ext4_xattr_block_get()
291 bh = sb_bread(inode->i_sb, EXT4_I(inode)->i_file_acl); in ext4_xattr_block_get()
296 if (ext4_xattr_check_block(inode, bh)) { in ext4_xattr_block_get()
298 EXT4_ERROR_INODE(inode, "bad block %llu", in ext4_xattr_block_get()
299 EXT4_I(inode)->i_file_acl); in ext4_xattr_block_get()
326 ext4_xattr_ibody_get(struct inode *inode, int name_index, const char *name, in ext4_xattr_ibody_get() argument
337 if (!ext4_test_inode_state(inode, EXT4_STATE_XATTR)) in ext4_xattr_ibody_get()
339 error = ext4_get_inode_loc(inode, &iloc); in ext4_xattr_ibody_get()
343 header = IHDR(inode, raw_inode); in ext4_xattr_ibody_get()
345 end = (void *)raw_inode + EXT4_SB(inode->i_sb)->s_inode_size; in ext4_xattr_ibody_get()
379 ext4_xattr_get(struct inode *inode, int name_index, const char *name, in ext4_xattr_get() argument
387 down_read(&EXT4_I(inode)->xattr_sem); in ext4_xattr_get()
388 error = ext4_xattr_ibody_get(inode, name_index, name, buffer, in ext4_xattr_get()
391 error = ext4_xattr_block_get(inode, name_index, name, buffer, in ext4_xattr_get()
393 up_read(&EXT4_I(inode)->xattr_sem); in ext4_xattr_get()
425 struct inode *inode = d_inode(dentry); in ext4_xattr_block_list() local
428 struct mb_cache *ext4_mb_cache = EXT4_GET_MB_CACHE(inode); in ext4_xattr_block_list()
430 ea_idebug(inode, "buffer=%p, buffer_size=%ld", in ext4_xattr_block_list()
434 if (!EXT4_I(inode)->i_file_acl) in ext4_xattr_block_list()
436 ea_idebug(inode, "reading block %llu", in ext4_xattr_block_list()
437 (unsigned long long)EXT4_I(inode)->i_file_acl); in ext4_xattr_block_list()
438 bh = sb_bread(inode->i_sb, EXT4_I(inode)->i_file_acl); in ext4_xattr_block_list()
444 if (ext4_xattr_check_block(inode, bh)) { in ext4_xattr_block_list()
445 EXT4_ERROR_INODE(inode, "bad block %llu", in ext4_xattr_block_list()
446 EXT4_I(inode)->i_file_acl); in ext4_xattr_block_list()
462 struct inode *inode = d_inode(dentry); in ext4_xattr_ibody_list() local
469 if (!ext4_test_inode_state(inode, EXT4_STATE_XATTR)) in ext4_xattr_ibody_list()
471 error = ext4_get_inode_loc(inode, &iloc); in ext4_xattr_ibody_list()
475 header = IHDR(inode, raw_inode); in ext4_xattr_ibody_list()
476 end = (void *)raw_inode + EXT4_SB(inode->i_sb)->s_inode_size; in ext4_xattr_ibody_list()
542 ext4_xattr_release_block(handle_t *handle, struct inode *inode, in ext4_xattr_release_block() argument
547 struct mb_cache *ext4_mb_cache = EXT4_GET_MB_CACHE(inode); in ext4_xattr_release_block()
562 ext4_free_blocks(handle, inode, bh, 0, 1, in ext4_xattr_release_block()
580 error = ext4_handle_dirty_xattr_block(handle, inode, in ext4_xattr_release_block()
584 error = ext4_handle_dirty_xattr_block(handle, inode, in ext4_xattr_release_block()
586 if (IS_SYNC(inode)) in ext4_xattr_release_block()
588 dquot_free_block(inode, EXT4_C2B(EXT4_SB(inode->i_sb), 1)); in ext4_xattr_release_block()
593 ext4_std_error(inode->i_sb, error); in ext4_xattr_release_block()
732 ext4_xattr_block_find(struct inode *inode, struct ext4_xattr_info *i, in ext4_xattr_block_find() argument
735 struct super_block *sb = inode->i_sb; in ext4_xattr_block_find()
738 ea_idebug(inode, "name=%d.%s, value=%p, value_len=%ld", in ext4_xattr_block_find()
741 if (EXT4_I(inode)->i_file_acl) { in ext4_xattr_block_find()
743 bs->bh = sb_bread(sb, EXT4_I(inode)->i_file_acl); in ext4_xattr_block_find()
750 if (ext4_xattr_check_block(inode, bs->bh)) { in ext4_xattr_block_find()
751 EXT4_ERROR_INODE(inode, "bad block %llu", in ext4_xattr_block_find()
752 EXT4_I(inode)->i_file_acl); in ext4_xattr_block_find()
774 ext4_xattr_block_set(handle_t *handle, struct inode *inode, in ext4_xattr_block_set() argument
778 struct super_block *sb = inode->i_sb; in ext4_xattr_block_set()
783 struct mb_cache *ext4_mb_cache = EXT4_GET_MB_CACHE(inode); in ext4_xattr_block_set()
817 inode, in ext4_xattr_block_set()
866 new_bh = ext4_xattr_cache_find(inode, header(s->base), &ce); in ext4_xattr_block_set()
874 error = dquot_alloc_block(inode, in ext4_xattr_block_set()
889 inode, in ext4_xattr_block_set()
906 EXT4_I(inode)->i_block_group); in ext4_xattr_block_set()
909 if (!(ext4_test_inode_flag(inode, EXT4_INODE_EXTENTS))) in ext4_xattr_block_set()
912 block = ext4_new_meta_blocks(handle, inode, goal, 0, in ext4_xattr_block_set()
917 if (!(ext4_test_inode_flag(inode, EXT4_INODE_EXTENTS))) in ext4_xattr_block_set()
920 ea_idebug(inode, "creating block %llu", in ext4_xattr_block_set()
927 ext4_free_blocks(handle, inode, NULL, block, 1, in ext4_xattr_block_set()
943 inode, new_bh); in ext4_xattr_block_set()
950 EXT4_I(inode)->i_file_acl = new_bh ? new_bh->b_blocknr : 0; in ext4_xattr_block_set()
954 ext4_xattr_release_block(handle, inode, bs->bh); in ext4_xattr_block_set()
967 dquot_free_block(inode, EXT4_C2B(EXT4_SB(sb), 1)); in ext4_xattr_block_set()
971 EXT4_ERROR_INODE(inode, "bad block %llu", in ext4_xattr_block_set()
972 EXT4_I(inode)->i_file_acl); in ext4_xattr_block_set()
978 int ext4_xattr_ibody_find(struct inode *inode, struct ext4_xattr_info *i, in ext4_xattr_ibody_find() argument
985 if (EXT4_I(inode)->i_extra_isize == 0) in ext4_xattr_ibody_find()
988 header = IHDR(inode, raw_inode); in ext4_xattr_ibody_find()
991 is->s.end = (void *)raw_inode + EXT4_SB(inode->i_sb)->s_inode_size; in ext4_xattr_ibody_find()
992 if (ext4_test_inode_state(inode, EXT4_STATE_XATTR)) { in ext4_xattr_ibody_find()
1008 int ext4_xattr_ibody_inline_set(handle_t *handle, struct inode *inode, in ext4_xattr_ibody_inline_set() argument
1016 if (EXT4_I(inode)->i_extra_isize == 0) in ext4_xattr_ibody_inline_set()
1021 ext4_has_inline_data(inode)) { in ext4_xattr_ibody_inline_set()
1022 error = ext4_try_to_evict_inline_data(handle, inode, in ext4_xattr_ibody_inline_set()
1027 error = ext4_xattr_ibody_find(inode, i, is); in ext4_xattr_ibody_inline_set()
1035 header = IHDR(inode, ext4_raw_inode(&is->iloc)); in ext4_xattr_ibody_inline_set()
1038 ext4_set_inode_state(inode, EXT4_STATE_XATTR); in ext4_xattr_ibody_inline_set()
1041 ext4_clear_inode_state(inode, EXT4_STATE_XATTR); in ext4_xattr_ibody_inline_set()
1046 static int ext4_xattr_ibody_set(handle_t *handle, struct inode *inode, in ext4_xattr_ibody_set() argument
1054 if (EXT4_I(inode)->i_extra_isize == 0) in ext4_xattr_ibody_set()
1059 header = IHDR(inode, ext4_raw_inode(&is->iloc)); in ext4_xattr_ibody_set()
1062 ext4_set_inode_state(inode, EXT4_STATE_XATTR); in ext4_xattr_ibody_set()
1065 ext4_clear_inode_state(inode, EXT4_STATE_XATTR); in ext4_xattr_ibody_set()
1083 ext4_xattr_set_handle(handle_t *handle, struct inode *inode, int name_index, in ext4_xattr_set_handle() argument
1107 down_write(&EXT4_I(inode)->xattr_sem); in ext4_xattr_set_handle()
1108 no_expand = ext4_test_inode_state(inode, EXT4_STATE_NO_EXPAND); in ext4_xattr_set_handle()
1109 ext4_set_inode_state(inode, EXT4_STATE_NO_EXPAND); in ext4_xattr_set_handle()
1111 error = ext4_reserve_inode_write(handle, inode, &is.iloc); in ext4_xattr_set_handle()
1115 if (ext4_test_inode_state(inode, EXT4_STATE_NEW)) { in ext4_xattr_set_handle()
1117 memset(raw_inode, 0, EXT4_SB(inode->i_sb)->s_inode_size); in ext4_xattr_set_handle()
1118 ext4_clear_inode_state(inode, EXT4_STATE_NEW); in ext4_xattr_set_handle()
1121 error = ext4_xattr_ibody_find(inode, &i, &is); in ext4_xattr_set_handle()
1125 error = ext4_xattr_block_find(inode, &i, &bs); in ext4_xattr_set_handle()
1142 error = ext4_xattr_ibody_set(handle, inode, &i, &is); in ext4_xattr_set_handle()
1144 error = ext4_xattr_block_set(handle, inode, &i, &bs); in ext4_xattr_set_handle()
1146 error = ext4_xattr_ibody_set(handle, inode, &i, &is); in ext4_xattr_set_handle()
1149 error = ext4_xattr_block_set(handle, inode, &i, &bs); in ext4_xattr_set_handle()
1151 if (EXT4_I(inode)->i_file_acl && !bs.s.base) { in ext4_xattr_set_handle()
1152 error = ext4_xattr_block_find(inode, &i, &bs); in ext4_xattr_set_handle()
1156 error = ext4_xattr_block_set(handle, inode, &i, &bs); in ext4_xattr_set_handle()
1161 error = ext4_xattr_ibody_set(handle, inode, &i, in ext4_xattr_set_handle()
1167 ext4_xattr_update_super_block(handle, inode->i_sb); in ext4_xattr_set_handle()
1168 inode->i_ctime = ext4_current_time(inode); in ext4_xattr_set_handle()
1170 ext4_clear_inode_state(inode, EXT4_STATE_NO_EXPAND); in ext4_xattr_set_handle()
1171 error = ext4_mark_iloc_dirty(handle, inode, &is.iloc); in ext4_xattr_set_handle()
1177 if (IS_SYNC(inode)) in ext4_xattr_set_handle()
1185 ext4_clear_inode_state(inode, EXT4_STATE_NO_EXPAND); in ext4_xattr_set_handle()
1186 up_write(&EXT4_I(inode)->xattr_sem); in ext4_xattr_set_handle()
1199 ext4_xattr_set(struct inode *inode, int name_index, const char *name, in ext4_xattr_set() argument
1204 int credits = ext4_jbd2_credits_xattr(inode); in ext4_xattr_set()
1207 handle = ext4_journal_start(inode, EXT4_HT_XATTR, credits); in ext4_xattr_set()
1213 error = ext4_xattr_set_handle(handle, inode, name_index, name, in ext4_xattr_set()
1217 ext4_should_retry_alloc(inode->i_sb, &retries)) in ext4_xattr_set()
1255 int ext4_expand_extra_isize_ea(struct inode *inode, int new_extra_isize, in ext4_expand_extra_isize_ea() argument
1268 int s_min_extra_isize = le16_to_cpu(EXT4_SB(inode->i_sb)->s_es->s_min_extra_isize); in ext4_expand_extra_isize_ea()
1270 down_write(&EXT4_I(inode)->xattr_sem); in ext4_expand_extra_isize_ea()
1272 if (EXT4_I(inode)->i_extra_isize >= new_extra_isize) { in ext4_expand_extra_isize_ea()
1273 up_write(&EXT4_I(inode)->xattr_sem); in ext4_expand_extra_isize_ea()
1277 header = IHDR(inode, raw_inode); in ext4_expand_extra_isize_ea()
1286 end = (void *)raw_inode + EXT4_SB(inode->i_sb)->s_inode_size; in ext4_expand_extra_isize_ea()
1294 ext4_xattr_shift_entries(entry, EXT4_I(inode)->i_extra_isize in ext4_expand_extra_isize_ea()
1298 inode->i_sb->s_blocksize); in ext4_expand_extra_isize_ea()
1299 EXT4_I(inode)->i_extra_isize = new_extra_isize; in ext4_expand_extra_isize_ea()
1308 if (EXT4_I(inode)->i_file_acl) { in ext4_expand_extra_isize_ea()
1309 bh = sb_bread(inode->i_sb, EXT4_I(inode)->i_file_acl); in ext4_expand_extra_isize_ea()
1313 if (ext4_xattr_check_block(inode, bh)) { in ext4_expand_extra_isize_ea()
1314 EXT4_ERROR_INODE(inode, "bad block %llu", in ext4_expand_extra_isize_ea()
1315 EXT4_I(inode)->i_file_acl); in ext4_expand_extra_isize_ea()
1335 free = inode->i_sb->s_blocksize; in ext4_expand_extra_isize_ea()
1412 error = ext4_get_inode_loc(inode, &is->iloc); in ext4_expand_extra_isize_ea()
1416 error = ext4_xattr_ibody_find(inode, &i, is); in ext4_expand_extra_isize_ea()
1421 error = ext4_xattr_ibody_set(handle, inode, &i, is); in ext4_expand_extra_isize_ea()
1431 ext4_xattr_shift_entries(entry, EXT4_I(inode)->i_extra_isize - in ext4_expand_extra_isize_ea()
1435 inode->i_sb->s_blocksize); in ext4_expand_extra_isize_ea()
1439 EXT4_I(inode)->i_extra_isize = extra_isize; in ext4_expand_extra_isize_ea()
1444 error = ext4_xattr_block_find(inode, &i, bs); in ext4_expand_extra_isize_ea()
1449 error = ext4_xattr_block_set(handle, inode, &i, bs); in ext4_expand_extra_isize_ea()
1461 up_write(&EXT4_I(inode)->xattr_sem); in ext4_expand_extra_isize_ea()
1472 up_write(&EXT4_I(inode)->xattr_sem); in ext4_expand_extra_isize_ea()
1486 ext4_xattr_delete_inode(handle_t *handle, struct inode *inode) in ext4_xattr_delete_inode() argument
1490 if (!EXT4_I(inode)->i_file_acl) in ext4_xattr_delete_inode()
1492 bh = sb_bread(inode->i_sb, EXT4_I(inode)->i_file_acl); in ext4_xattr_delete_inode()
1494 EXT4_ERROR_INODE(inode, "block %llu read error", in ext4_xattr_delete_inode()
1495 EXT4_I(inode)->i_file_acl); in ext4_xattr_delete_inode()
1500 EXT4_ERROR_INODE(inode, "bad block %llu", in ext4_xattr_delete_inode()
1501 EXT4_I(inode)->i_file_acl); in ext4_xattr_delete_inode()
1504 ext4_xattr_release_block(handle, inode, bh); in ext4_xattr_delete_inode()
1505 EXT4_I(inode)->i_file_acl = 0; in ext4_xattr_delete_inode()
1604 ext4_xattr_cache_find(struct inode *inode, struct ext4_xattr_header *header, in ext4_xattr_cache_find() argument
1609 struct mb_cache *ext4_mb_cache = EXT4_GET_MB_CACHE(inode); in ext4_xattr_cache_find()
1613 ea_idebug(inode, "looking for cached blocks [%x]", (int)hash); in ext4_xattr_cache_find()
1615 ce = mb_cache_entry_find_first(ext4_mb_cache, inode->i_sb->s_bdev, in ext4_xattr_cache_find()
1625 bh = sb_bread(inode->i_sb, ce->e_block); in ext4_xattr_cache_find()
1627 EXT4_ERROR_INODE(inode, "block %lu read error", in ext4_xattr_cache_find()
1631 ea_idebug(inode, "block %lu refcount %d>=%d", in ext4_xattr_cache_find()
1640 ce = mb_cache_entry_find_next(ce, inode->i_sb->s_bdev, hash); in ext4_xattr_cache_find()