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()
426 struct inode *inode = d_inode(dentry); in ext4_xattr_block_list() local
429 struct mb_cache *ext4_mb_cache = EXT4_GET_MB_CACHE(inode); in ext4_xattr_block_list()
431 ea_idebug(inode, "buffer=%p, buffer_size=%ld", in ext4_xattr_block_list()
435 if (!EXT4_I(inode)->i_file_acl) in ext4_xattr_block_list()
437 ea_idebug(inode, "reading block %llu", in ext4_xattr_block_list()
438 (unsigned long long)EXT4_I(inode)->i_file_acl); in ext4_xattr_block_list()
439 bh = sb_bread(inode->i_sb, EXT4_I(inode)->i_file_acl); in ext4_xattr_block_list()
445 if (ext4_xattr_check_block(inode, bh)) { in ext4_xattr_block_list()
446 EXT4_ERROR_INODE(inode, "bad block %llu", in ext4_xattr_block_list()
447 EXT4_I(inode)->i_file_acl); in ext4_xattr_block_list()
463 struct inode *inode = d_inode(dentry); in ext4_xattr_ibody_list() local
470 if (!ext4_test_inode_state(inode, EXT4_STATE_XATTR)) in ext4_xattr_ibody_list()
472 error = ext4_get_inode_loc(inode, &iloc); in ext4_xattr_ibody_list()
476 header = IHDR(inode, raw_inode); in ext4_xattr_ibody_list()
477 end = (void *)raw_inode + EXT4_SB(inode->i_sb)->s_inode_size; in ext4_xattr_ibody_list()
543 ext4_xattr_release_block(handle_t *handle, struct inode *inode, in ext4_xattr_release_block() argument
548 struct mb_cache *ext4_mb_cache = EXT4_GET_MB_CACHE(inode); in ext4_xattr_release_block()
563 ext4_free_blocks(handle, inode, bh, 0, 1, in ext4_xattr_release_block()
581 error = ext4_handle_dirty_xattr_block(handle, inode, in ext4_xattr_release_block()
585 error = ext4_handle_dirty_xattr_block(handle, inode, in ext4_xattr_release_block()
587 if (IS_SYNC(inode)) in ext4_xattr_release_block()
589 dquot_free_block(inode, EXT4_C2B(EXT4_SB(inode->i_sb), 1)); in ext4_xattr_release_block()
594 ext4_std_error(inode->i_sb, error); in ext4_xattr_release_block()
733 ext4_xattr_block_find(struct inode *inode, struct ext4_xattr_info *i, in ext4_xattr_block_find() argument
736 struct super_block *sb = inode->i_sb; in ext4_xattr_block_find()
739 ea_idebug(inode, "name=%d.%s, value=%p, value_len=%ld", in ext4_xattr_block_find()
742 if (EXT4_I(inode)->i_file_acl) { in ext4_xattr_block_find()
744 bs->bh = sb_bread(sb, EXT4_I(inode)->i_file_acl); in ext4_xattr_block_find()
751 if (ext4_xattr_check_block(inode, bs->bh)) { in ext4_xattr_block_find()
752 EXT4_ERROR_INODE(inode, "bad block %llu", in ext4_xattr_block_find()
753 EXT4_I(inode)->i_file_acl); in ext4_xattr_block_find()
775 ext4_xattr_block_set(handle_t *handle, struct inode *inode, in ext4_xattr_block_set() argument
779 struct super_block *sb = inode->i_sb; in ext4_xattr_block_set()
784 struct mb_cache *ext4_mb_cache = EXT4_GET_MB_CACHE(inode); in ext4_xattr_block_set()
818 inode, in ext4_xattr_block_set()
867 new_bh = ext4_xattr_cache_find(inode, header(s->base), &ce); in ext4_xattr_block_set()
875 error = dquot_alloc_block(inode, in ext4_xattr_block_set()
890 inode, in ext4_xattr_block_set()
907 EXT4_I(inode)->i_block_group); in ext4_xattr_block_set()
910 if (!(ext4_test_inode_flag(inode, EXT4_INODE_EXTENTS))) in ext4_xattr_block_set()
913 block = ext4_new_meta_blocks(handle, inode, goal, 0, in ext4_xattr_block_set()
918 if (!(ext4_test_inode_flag(inode, EXT4_INODE_EXTENTS))) in ext4_xattr_block_set()
921 ea_idebug(inode, "creating block %llu", in ext4_xattr_block_set()
928 ext4_free_blocks(handle, inode, NULL, block, 1, in ext4_xattr_block_set()
944 inode, new_bh); in ext4_xattr_block_set()
951 EXT4_I(inode)->i_file_acl = new_bh ? new_bh->b_blocknr : 0; in ext4_xattr_block_set()
955 ext4_xattr_release_block(handle, inode, bs->bh); in ext4_xattr_block_set()
968 dquot_free_block(inode, EXT4_C2B(EXT4_SB(sb), 1)); in ext4_xattr_block_set()
972 EXT4_ERROR_INODE(inode, "bad block %llu", in ext4_xattr_block_set()
973 EXT4_I(inode)->i_file_acl); in ext4_xattr_block_set()
979 int ext4_xattr_ibody_find(struct inode *inode, struct ext4_xattr_info *i, in ext4_xattr_ibody_find() argument
986 if (EXT4_I(inode)->i_extra_isize == 0) in ext4_xattr_ibody_find()
989 header = IHDR(inode, raw_inode); in ext4_xattr_ibody_find()
992 is->s.end = (void *)raw_inode + EXT4_SB(inode->i_sb)->s_inode_size; in ext4_xattr_ibody_find()
993 if (ext4_test_inode_state(inode, EXT4_STATE_XATTR)) { in ext4_xattr_ibody_find()
1009 int ext4_xattr_ibody_inline_set(handle_t *handle, struct inode *inode, in ext4_xattr_ibody_inline_set() argument
1017 if (EXT4_I(inode)->i_extra_isize == 0) in ext4_xattr_ibody_inline_set()
1022 ext4_has_inline_data(inode)) { in ext4_xattr_ibody_inline_set()
1023 error = ext4_try_to_evict_inline_data(handle, inode, in ext4_xattr_ibody_inline_set()
1028 error = ext4_xattr_ibody_find(inode, i, is); in ext4_xattr_ibody_inline_set()
1036 header = IHDR(inode, ext4_raw_inode(&is->iloc)); in ext4_xattr_ibody_inline_set()
1039 ext4_set_inode_state(inode, EXT4_STATE_XATTR); in ext4_xattr_ibody_inline_set()
1042 ext4_clear_inode_state(inode, EXT4_STATE_XATTR); in ext4_xattr_ibody_inline_set()
1047 static int ext4_xattr_ibody_set(handle_t *handle, struct inode *inode, in ext4_xattr_ibody_set() argument
1055 if (EXT4_I(inode)->i_extra_isize == 0) in ext4_xattr_ibody_set()
1060 header = IHDR(inode, ext4_raw_inode(&is->iloc)); in ext4_xattr_ibody_set()
1063 ext4_set_inode_state(inode, EXT4_STATE_XATTR); in ext4_xattr_ibody_set()
1066 ext4_clear_inode_state(inode, EXT4_STATE_XATTR); in ext4_xattr_ibody_set()
1084 ext4_xattr_set_handle(handle_t *handle, struct inode *inode, int name_index, in ext4_xattr_set_handle() argument
1108 down_write(&EXT4_I(inode)->xattr_sem); in ext4_xattr_set_handle()
1109 no_expand = ext4_test_inode_state(inode, EXT4_STATE_NO_EXPAND); in ext4_xattr_set_handle()
1110 ext4_set_inode_state(inode, EXT4_STATE_NO_EXPAND); in ext4_xattr_set_handle()
1112 error = ext4_reserve_inode_write(handle, inode, &is.iloc); in ext4_xattr_set_handle()
1116 if (ext4_test_inode_state(inode, EXT4_STATE_NEW)) { in ext4_xattr_set_handle()
1118 memset(raw_inode, 0, EXT4_SB(inode->i_sb)->s_inode_size); in ext4_xattr_set_handle()
1119 ext4_clear_inode_state(inode, EXT4_STATE_NEW); in ext4_xattr_set_handle()
1122 error = ext4_xattr_ibody_find(inode, &i, &is); in ext4_xattr_set_handle()
1126 error = ext4_xattr_block_find(inode, &i, &bs); in ext4_xattr_set_handle()
1143 error = ext4_xattr_ibody_set(handle, inode, &i, &is); in ext4_xattr_set_handle()
1145 error = ext4_xattr_block_set(handle, inode, &i, &bs); in ext4_xattr_set_handle()
1147 error = ext4_xattr_ibody_set(handle, inode, &i, &is); in ext4_xattr_set_handle()
1150 error = ext4_xattr_block_set(handle, inode, &i, &bs); in ext4_xattr_set_handle()
1152 if (EXT4_I(inode)->i_file_acl && !bs.s.base) { in ext4_xattr_set_handle()
1153 error = ext4_xattr_block_find(inode, &i, &bs); in ext4_xattr_set_handle()
1157 error = ext4_xattr_block_set(handle, inode, &i, &bs); in ext4_xattr_set_handle()
1162 error = ext4_xattr_ibody_set(handle, inode, &i, in ext4_xattr_set_handle()
1168 ext4_xattr_update_super_block(handle, inode->i_sb); in ext4_xattr_set_handle()
1169 inode->i_ctime = ext4_current_time(inode); in ext4_xattr_set_handle()
1171 ext4_clear_inode_state(inode, EXT4_STATE_NO_EXPAND); in ext4_xattr_set_handle()
1172 error = ext4_mark_iloc_dirty(handle, inode, &is.iloc); in ext4_xattr_set_handle()
1178 if (IS_SYNC(inode)) in ext4_xattr_set_handle()
1186 ext4_clear_inode_state(inode, EXT4_STATE_NO_EXPAND); in ext4_xattr_set_handle()
1187 up_write(&EXT4_I(inode)->xattr_sem); in ext4_xattr_set_handle()
1200 ext4_xattr_set(struct inode *inode, int name_index, const char *name, in ext4_xattr_set() argument
1205 int credits = ext4_jbd2_credits_xattr(inode); in ext4_xattr_set()
1208 handle = ext4_journal_start(inode, EXT4_HT_XATTR, credits); in ext4_xattr_set()
1214 error = ext4_xattr_set_handle(handle, inode, name_index, name, in ext4_xattr_set()
1218 ext4_should_retry_alloc(inode->i_sb, &retries)) in ext4_xattr_set()
1256 int ext4_expand_extra_isize_ea(struct inode *inode, int new_extra_isize, in ext4_expand_extra_isize_ea() argument
1269 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()
1271 down_write(&EXT4_I(inode)->xattr_sem); in ext4_expand_extra_isize_ea()
1273 if (EXT4_I(inode)->i_extra_isize >= new_extra_isize) { in ext4_expand_extra_isize_ea()
1274 up_write(&EXT4_I(inode)->xattr_sem); in ext4_expand_extra_isize_ea()
1278 header = IHDR(inode, raw_inode); in ext4_expand_extra_isize_ea()
1287 end = (void *)raw_inode + EXT4_SB(inode->i_sb)->s_inode_size; in ext4_expand_extra_isize_ea()
1295 ext4_xattr_shift_entries(entry, EXT4_I(inode)->i_extra_isize in ext4_expand_extra_isize_ea()
1299 inode->i_sb->s_blocksize); in ext4_expand_extra_isize_ea()
1300 EXT4_I(inode)->i_extra_isize = new_extra_isize; in ext4_expand_extra_isize_ea()
1309 if (EXT4_I(inode)->i_file_acl) { in ext4_expand_extra_isize_ea()
1310 bh = sb_bread(inode->i_sb, EXT4_I(inode)->i_file_acl); in ext4_expand_extra_isize_ea()
1314 if (ext4_xattr_check_block(inode, bh)) { in ext4_expand_extra_isize_ea()
1315 EXT4_ERROR_INODE(inode, "bad block %llu", in ext4_expand_extra_isize_ea()
1316 EXT4_I(inode)->i_file_acl); in ext4_expand_extra_isize_ea()
1336 free = inode->i_sb->s_blocksize; in ext4_expand_extra_isize_ea()
1413 error = ext4_get_inode_loc(inode, &is->iloc); in ext4_expand_extra_isize_ea()
1417 error = ext4_xattr_ibody_find(inode, &i, is); in ext4_expand_extra_isize_ea()
1422 error = ext4_xattr_ibody_set(handle, inode, &i, is); in ext4_expand_extra_isize_ea()
1432 ext4_xattr_shift_entries(entry, EXT4_I(inode)->i_extra_isize - in ext4_expand_extra_isize_ea()
1436 inode->i_sb->s_blocksize); in ext4_expand_extra_isize_ea()
1440 EXT4_I(inode)->i_extra_isize = extra_isize; in ext4_expand_extra_isize_ea()
1445 error = ext4_xattr_block_find(inode, &i, bs); in ext4_expand_extra_isize_ea()
1450 error = ext4_xattr_block_set(handle, inode, &i, bs); in ext4_expand_extra_isize_ea()
1462 up_write(&EXT4_I(inode)->xattr_sem); in ext4_expand_extra_isize_ea()
1473 up_write(&EXT4_I(inode)->xattr_sem); in ext4_expand_extra_isize_ea()
1487 ext4_xattr_delete_inode(handle_t *handle, struct inode *inode) in ext4_xattr_delete_inode() argument
1491 if (!EXT4_I(inode)->i_file_acl) in ext4_xattr_delete_inode()
1493 bh = sb_bread(inode->i_sb, EXT4_I(inode)->i_file_acl); in ext4_xattr_delete_inode()
1495 EXT4_ERROR_INODE(inode, "block %llu read error", in ext4_xattr_delete_inode()
1496 EXT4_I(inode)->i_file_acl); in ext4_xattr_delete_inode()
1501 EXT4_ERROR_INODE(inode, "bad block %llu", in ext4_xattr_delete_inode()
1502 EXT4_I(inode)->i_file_acl); in ext4_xattr_delete_inode()
1505 ext4_xattr_release_block(handle, inode, bh); in ext4_xattr_delete_inode()
1506 EXT4_I(inode)->i_file_acl = 0; in ext4_xattr_delete_inode()
1605 ext4_xattr_cache_find(struct inode *inode, struct ext4_xattr_header *header, in ext4_xattr_cache_find() argument
1610 struct mb_cache *ext4_mb_cache = EXT4_GET_MB_CACHE(inode); in ext4_xattr_cache_find()
1614 ea_idebug(inode, "looking for cached blocks [%x]", (int)hash); in ext4_xattr_cache_find()
1616 ce = mb_cache_entry_find_first(ext4_mb_cache, inode->i_sb->s_bdev, in ext4_xattr_cache_find()
1626 bh = sb_bread(inode->i_sb, ce->e_block); in ext4_xattr_cache_find()
1628 EXT4_ERROR_INODE(inode, "block %lu read error", in ext4_xattr_cache_find()
1632 ea_idebug(inode, "block %lu refcount %d>=%d", in ext4_xattr_cache_find()
1641 ce = mb_cache_entry_find_next(ce, inode->i_sb->s_bdev, hash); in ext4_xattr_cache_find()