Lines Matching refs:inode
51 struct inode *inode, in ext4_append() argument
57 if (unlikely(EXT4_SB(inode->i_sb)->s_max_dir_size_kb && in ext4_append()
58 ((inode->i_size >> 10) >= in ext4_append()
59 EXT4_SB(inode->i_sb)->s_max_dir_size_kb))) in ext4_append()
62 *block = inode->i_size >> inode->i_sb->s_blocksize_bits; in ext4_append()
64 bh = ext4_bread(handle, inode, *block, 1); in ext4_append()
67 inode->i_size += inode->i_sb->s_blocksize; in ext4_append()
68 EXT4_I(inode)->i_disksize = inode->i_size; in ext4_append()
73 ext4_std_error(inode->i_sb, err); in ext4_append()
79 static int ext4_dx_csum_verify(struct inode *inode,
86 #define ext4_read_dirblock(inode, block, type) \ argument
87 __ext4_read_dirblock((inode), (block), (type), __LINE__)
89 static struct buffer_head *__ext4_read_dirblock(struct inode *inode, in __ext4_read_dirblock() argument
98 bh = ext4_bread(NULL, inode, block, 0); in __ext4_read_dirblock()
100 __ext4_warning(inode->i_sb, __func__, line, in __ext4_read_dirblock()
102 "(ino %lu, block %lu)", PTR_ERR(bh), inode->i_ino, in __ext4_read_dirblock()
108 ext4_error_inode(inode, __func__, line, block, "Directory hole found"); in __ext4_read_dirblock()
113 if (is_dx(inode)) { in __ext4_read_dirblock()
117 inode->i_sb->s_blocksize) == in __ext4_read_dirblock()
118 inode->i_sb->s_blocksize) in __ext4_read_dirblock()
122 ext4_error_inode(inode, __func__, line, block, in __ext4_read_dirblock()
126 if (!ext4_has_metadata_csum(inode->i_sb) || in __ext4_read_dirblock()
136 if (ext4_dx_csum_verify(inode, dirent)) in __ext4_read_dirblock()
139 ext4_error_inode(inode, __func__, line, block, in __ext4_read_dirblock()
146 if (ext4_dirent_csum_verify(inode, dirent)) in __ext4_read_dirblock()
149 ext4_error_inode(inode, __func__, line, block, in __ext4_read_dirblock()
170 __le32 inode; member
249 static unsigned dx_root_limit(struct inode *dir, unsigned infosize);
250 static unsigned dx_node_limit(struct inode *dir);
252 struct inode *dir,
256 static int dx_make_map(struct inode *dir, struct ext4_dir_entry_2 *de,
265 static int ext4_htree_next_block(struct inode *dir, __u32 hash,
269 static struct buffer_head * ext4_dx_find_entry(struct inode *dir,
273 struct inode *inode);
286 static struct ext4_dir_entry_tail *get_dirent_tail(struct inode *inode, in get_dirent_tail() argument
296 (EXT4_BLOCK_SIZE(inode->i_sb) - in get_dirent_tail()
307 t = EXT4_DIRENT_TAIL(de, EXT4_BLOCK_SIZE(inode->i_sb)); in get_dirent_tail()
319 static __le32 ext4_dirent_csum(struct inode *inode, in ext4_dirent_csum() argument
322 struct ext4_sb_info *sbi = EXT4_SB(inode->i_sb); in ext4_dirent_csum()
323 struct ext4_inode_info *ei = EXT4_I(inode); in ext4_dirent_csum()
330 static void warn_no_space_for_csum(struct inode *inode) in warn_no_space_for_csum() argument
332 ext4_warning(inode->i_sb, "no space in directory inode %lu leaf for " in warn_no_space_for_csum()
333 "checksum. Please run e2fsck -D.", inode->i_ino); in warn_no_space_for_csum()
336 int ext4_dirent_csum_verify(struct inode *inode, struct ext4_dir_entry *dirent) in ext4_dirent_csum_verify() argument
340 if (!ext4_has_metadata_csum(inode->i_sb)) in ext4_dirent_csum_verify()
343 t = get_dirent_tail(inode, dirent); in ext4_dirent_csum_verify()
345 warn_no_space_for_csum(inode); in ext4_dirent_csum_verify()
349 if (t->det_checksum != ext4_dirent_csum(inode, dirent, in ext4_dirent_csum_verify()
356 static void ext4_dirent_csum_set(struct inode *inode, in ext4_dirent_csum_set() argument
361 if (!ext4_has_metadata_csum(inode->i_sb)) in ext4_dirent_csum_set()
364 t = get_dirent_tail(inode, dirent); in ext4_dirent_csum_set()
366 warn_no_space_for_csum(inode); in ext4_dirent_csum_set()
370 t->det_checksum = ext4_dirent_csum(inode, dirent, in ext4_dirent_csum_set()
375 struct inode *inode, in ext4_handle_dirty_dirent_node() argument
378 ext4_dirent_csum_set(inode, (struct ext4_dir_entry *)bh->b_data); in ext4_handle_dirty_dirent_node()
379 return ext4_handle_dirty_metadata(handle, inode, bh); in ext4_handle_dirty_dirent_node()
382 static struct dx_countlimit *get_dx_countlimit(struct inode *inode, in get_dx_countlimit() argument
390 if (le16_to_cpu(dirent->rec_len) == EXT4_BLOCK_SIZE(inode->i_sb)) in get_dx_countlimit()
395 EXT4_BLOCK_SIZE(inode->i_sb) - 12) in get_dx_countlimit()
410 static __le32 ext4_dx_csum(struct inode *inode, struct ext4_dir_entry *dirent, in ext4_dx_csum() argument
413 struct ext4_sb_info *sbi = EXT4_SB(inode->i_sb); in ext4_dx_csum()
414 struct ext4_inode_info *ei = EXT4_I(inode); in ext4_dx_csum()
429 static int ext4_dx_csum_verify(struct inode *inode, in ext4_dx_csum_verify() argument
436 if (!ext4_has_metadata_csum(inode->i_sb)) in ext4_dx_csum_verify()
439 c = get_dx_countlimit(inode, dirent, &count_offset); in ext4_dx_csum_verify()
441 EXT4_ERROR_INODE(inode, "dir seems corrupt? Run e2fsck -D."); in ext4_dx_csum_verify()
447 EXT4_BLOCK_SIZE(inode->i_sb) - sizeof(struct dx_tail)) { in ext4_dx_csum_verify()
448 warn_no_space_for_csum(inode); in ext4_dx_csum_verify()
453 if (t->dt_checksum != ext4_dx_csum(inode, dirent, count_offset, in ext4_dx_csum_verify()
459 static void ext4_dx_csum_set(struct inode *inode, struct ext4_dir_entry *dirent) in ext4_dx_csum_set() argument
465 if (!ext4_has_metadata_csum(inode->i_sb)) in ext4_dx_csum_set()
468 c = get_dx_countlimit(inode, dirent, &count_offset); in ext4_dx_csum_set()
470 EXT4_ERROR_INODE(inode, "dir seems corrupt? Run e2fsck -D."); in ext4_dx_csum_set()
476 EXT4_BLOCK_SIZE(inode->i_sb) - sizeof(struct dx_tail)) { in ext4_dx_csum_set()
477 warn_no_space_for_csum(inode); in ext4_dx_csum_set()
482 t->dt_checksum = ext4_dx_csum(inode, dirent, count_offset, count, t); in ext4_dx_csum_set()
486 struct inode *inode, in ext4_handle_dirty_dx_node() argument
489 ext4_dx_csum_set(inode, (struct ext4_dir_entry *)bh->b_data); in ext4_handle_dirty_dx_node()
490 return ext4_handle_dirty_metadata(handle, inode, bh); in ext4_handle_dirty_dx_node()
548 static inline unsigned dx_root_limit(struct inode *dir, unsigned infosize) in dx_root_limit()
558 static inline unsigned dx_node_limit(struct inode *dir) in dx_node_limit()
589 static struct stats dx_show_leaf(struct inode *dir, in dx_show_leaf()
601 if (de->inode) in dx_show_leaf()
682 struct stats dx_show_entries(struct dx_hash_info *hinfo, struct inode *dir, in dx_show_entries()
727 dx_probe(const struct qstr *d_name, struct inode *dir, in dx_probe()
894 static int ext4_htree_next_block(struct inode *dir, __u32 hash, in ext4_htree_next_block()
958 struct inode *dir, ext4_lblk_t block, in htree_dirblock_to_tree()
1009 if (de->inode == 0) in htree_dirblock_to_tree()
1060 struct inode *dir; in ext4_htree_fill_tree()
1157 struct inode *dir, in search_dirblock()
1174 static int dx_make_map(struct inode *dir, struct ext4_dir_entry_2 *de, in dx_make_map()
1183 if (de->name_len && de->inode) { in dx_make_map()
1252 if (!de->inode) in ext4_match()
1269 struct inode *dir, const struct qstr *d_name, in search_dir()
1330 static int is_dx_internal_node(struct inode *dir, ext4_lblk_t block, in is_dx_internal_node()
1339 if (de->inode == 0 && in is_dx_internal_node()
1357 static struct buffer_head * ext4_find_entry (struct inode *dir, in ext4_find_entry()
1506 static struct buffer_head * ext4_dx_find_entry(struct inode *dir, const struct qstr *d_name, in ext4_dx_find_entry()
1559 static struct dentry *ext4_lookup(struct inode *dir, struct dentry *dentry, unsigned int flags) in ext4_lookup()
1561 struct inode *inode; in ext4_lookup() local
1571 inode = NULL; in ext4_lookup()
1573 __u32 ino = le32_to_cpu(de->inode); in ext4_lookup()
1584 inode = ext4_iget_normal(dir->i_sb, ino); in ext4_lookup()
1585 if (inode == ERR_PTR(-ESTALE)) { in ext4_lookup()
1591 if (!IS_ERR(inode) && ext4_encrypted_inode(dir) && in ext4_lookup()
1592 (S_ISREG(inode->i_mode) || S_ISDIR(inode->i_mode) || in ext4_lookup()
1593 S_ISLNK(inode->i_mode)) && in ext4_lookup()
1595 inode)) { in ext4_lookup()
1596 iput(inode); in ext4_lookup()
1597 ext4_warning(inode->i_sb, in ext4_lookup()
1600 (unsigned long) inode->i_ino); in ext4_lookup()
1604 return d_splice_alias(inode, dentry); in ext4_lookup()
1620 ino = le32_to_cpu(de->inode); in ext4_get_parent()
1649 de->inode = 0; in dx_move_dirents()
1668 if (de->inode && de->name_len) { in dx_pack_dirents()
1686 static struct ext4_dir_entry_2 *do_split(handle_t *handle, struct inode *dir, in do_split()
1796 int ext4_find_dest_de(struct inode *dir, struct inode *inode, in ext4_find_dest_de() argument
1843 if ((de->inode ? rlen - nlen : rlen) >= reclen) in ext4_find_dest_de()
1861 int ext4_insert_dentry(struct inode *dir, in ext4_insert_dentry()
1862 struct inode *inode, in ext4_insert_dentry() argument
1901 if (de->inode) { in ext4_insert_dentry()
1909 de->inode = cpu_to_le32(inode->i_ino); in ext4_insert_dentry()
1910 ext4_set_de_type(inode->i_sb, de, inode->i_mode); in ext4_insert_dentry()
1928 struct inode *inode, struct ext4_dir_entry_2 *de, in add_dirent_to_buf() argument
1931 struct inode *dir = d_inode(dentry->d_parent); in add_dirent_to_buf()
1938 if (ext4_has_metadata_csum(inode->i_sb)) in add_dirent_to_buf()
1942 err = ext4_find_dest_de(dir, inode, in add_dirent_to_buf()
1957 err = ext4_insert_dentry(dir, inode, de, blocksize, &dentry->d_name, in add_dirent_to_buf()
1989 struct inode *inode, struct buffer_head *bh) in make_indexed_dir() argument
1991 struct inode *dir = d_inode(dentry->d_parent); in make_indexed_dir()
2020 if (ext4_has_metadata_csum(inode->i_sb)) in make_indexed_dir()
2118 retval = add_dirent_to_buf(handle, dentry, inode, de, bh); in make_indexed_dir()
2143 struct inode *inode) in ext4_add_entry() argument
2145 struct inode *dir = d_inode(dentry->d_parent); in ext4_add_entry()
2156 if (ext4_has_metadata_csum(inode->i_sb)) in ext4_add_entry()
2165 retval = ext4_try_add_inline_entry(handle, dentry, inode); in ext4_add_entry()
2175 retval = ext4_dx_add_entry(handle, dentry, inode); in ext4_add_entry()
2188 retval = add_dirent_to_buf(handle, dentry, inode, NULL, bh); in ext4_add_entry()
2194 retval = make_indexed_dir(handle, dentry, inode, bh); in ext4_add_entry()
2204 de->inode = 0; in ext4_add_entry()
2212 retval = add_dirent_to_buf(handle, dentry, inode, de, bh); in ext4_add_entry()
2216 ext4_set_inode_state(inode, EXT4_STATE_NEWENTRY); in ext4_add_entry()
2224 struct inode *inode) in ext4_dx_add_entry() argument
2230 struct inode *dir = d_inode(dentry->d_parent); in ext4_dx_add_entry()
2252 err = add_dirent_to_buf(handle, dentry, inode, NULL, bh); in ext4_dx_add_entry()
2344 ext4_std_error(inode->i_sb, err); in ext4_dx_add_entry()
2353 err = add_dirent_to_buf(handle, dentry, inode, de, bh); in ext4_dx_add_entry()
2369 struct inode *dir, in ext4_generic_delete_entry()
2396 de->inode = 0; in ext4_generic_delete_entry()
2408 struct inode *dir, in ext4_delete_entry()
2452 static void ext4_inc_count(handle_t *handle, struct inode *inode) in ext4_inc_count() argument
2454 inc_nlink(inode); in ext4_inc_count()
2455 if (is_dx(inode) && inode->i_nlink > 1) { in ext4_inc_count()
2457 if (inode->i_nlink >= EXT4_LINK_MAX || inode->i_nlink == 2) { in ext4_inc_count()
2458 set_nlink(inode, 1); in ext4_inc_count()
2459 EXT4_SET_RO_COMPAT_FEATURE(inode->i_sb, in ext4_inc_count()
2469 static void ext4_dec_count(handle_t *handle, struct inode *inode) in ext4_dec_count() argument
2471 if (!S_ISDIR(inode->i_mode) || inode->i_nlink > 2) in ext4_dec_count()
2472 drop_nlink(inode); in ext4_dec_count()
2477 struct dentry *dentry, struct inode *inode) in ext4_add_nondir() argument
2479 int err = ext4_add_entry(handle, dentry, inode); in ext4_add_nondir()
2481 ext4_mark_inode_dirty(handle, inode); in ext4_add_nondir()
2482 unlock_new_inode(inode); in ext4_add_nondir()
2483 d_instantiate(dentry, inode); in ext4_add_nondir()
2486 drop_nlink(inode); in ext4_add_nondir()
2487 unlock_new_inode(inode); in ext4_add_nondir()
2488 iput(inode); in ext4_add_nondir()
2500 static int ext4_create(struct inode *dir, struct dentry *dentry, umode_t mode, in ext4_create()
2504 struct inode *inode; in ext4_create() local
2512 inode = ext4_new_inode_start_handle(dir, mode, &dentry->d_name, 0, in ext4_create()
2515 err = PTR_ERR(inode); in ext4_create()
2516 if (!IS_ERR(inode)) { in ext4_create()
2517 inode->i_op = &ext4_file_inode_operations; in ext4_create()
2518 inode->i_fop = &ext4_file_operations; in ext4_create()
2519 ext4_set_aops(inode); in ext4_create()
2524 err = ext4_inherit_context(dir, inode); in ext4_create()
2526 clear_nlink(inode); in ext4_create()
2527 unlock_new_inode(inode); in ext4_create()
2528 iput(inode); in ext4_create()
2533 err = ext4_add_nondir(handle, dentry, inode); in ext4_create()
2544 static int ext4_mknod(struct inode *dir, struct dentry *dentry, in ext4_mknod()
2548 struct inode *inode; in ext4_mknod() local
2559 inode = ext4_new_inode_start_handle(dir, mode, &dentry->d_name, 0, in ext4_mknod()
2562 err = PTR_ERR(inode); in ext4_mknod()
2563 if (!IS_ERR(inode)) { in ext4_mknod()
2564 init_special_inode(inode, inode->i_mode, rdev); in ext4_mknod()
2565 inode->i_op = &ext4_special_inode_operations; in ext4_mknod()
2566 err = ext4_add_nondir(handle, dentry, inode); in ext4_mknod()
2577 static int ext4_tmpfile(struct inode *dir, struct dentry *dentry, umode_t mode) in ext4_tmpfile()
2580 struct inode *inode; in ext4_tmpfile() local
2586 inode = ext4_new_inode_start_handle(dir, mode, in ext4_tmpfile()
2592 err = PTR_ERR(inode); in ext4_tmpfile()
2593 if (!IS_ERR(inode)) { in ext4_tmpfile()
2594 inode->i_op = &ext4_file_inode_operations; in ext4_tmpfile()
2595 inode->i_fop = &ext4_file_operations; in ext4_tmpfile()
2596 ext4_set_aops(inode); in ext4_tmpfile()
2597 d_tmpfile(dentry, inode); in ext4_tmpfile()
2598 err = ext4_orphan_add(handle, inode); in ext4_tmpfile()
2601 mark_inode_dirty(inode); in ext4_tmpfile()
2602 unlock_new_inode(inode); in ext4_tmpfile()
2611 unlock_new_inode(inode); in ext4_tmpfile()
2615 struct ext4_dir_entry_2 *ext4_init_dot_dotdot(struct inode *inode, in ext4_init_dot_dotdot() argument
2620 de->inode = cpu_to_le32(inode->i_ino); in ext4_init_dot_dotdot()
2625 ext4_set_de_type(inode->i_sb, de, S_IFDIR); in ext4_init_dot_dotdot()
2628 de->inode = cpu_to_le32(parent_ino); in ext4_init_dot_dotdot()
2638 ext4_set_de_type(inode->i_sb, de, S_IFDIR); in ext4_init_dot_dotdot()
2643 static int ext4_init_new_dir(handle_t *handle, struct inode *dir, in ext4_init_new_dir()
2644 struct inode *inode) in ext4_init_new_dir() argument
2657 if (ext4_test_inode_state(inode, EXT4_STATE_MAY_INLINE_DATA)) { in ext4_init_new_dir()
2658 err = ext4_try_create_inline_dir(handle, dir, inode); in ext4_init_new_dir()
2665 inode->i_size = 0; in ext4_init_new_dir()
2666 dir_block = ext4_append(handle, inode, &block); in ext4_init_new_dir()
2670 ext4_init_dot_dotdot(inode, de, blocksize, csum_size, dir->i_ino, 0); in ext4_init_new_dir()
2671 set_nlink(inode, 2); in ext4_init_new_dir()
2678 err = ext4_handle_dirty_dirent_node(handle, inode, dir_block); in ext4_init_new_dir()
2687 static int ext4_mkdir(struct inode *dir, struct dentry *dentry, umode_t mode) in ext4_mkdir()
2690 struct inode *inode; in ext4_mkdir() local
2701 inode = ext4_new_inode_start_handle(dir, S_IFDIR | mode, in ext4_mkdir()
2705 err = PTR_ERR(inode); in ext4_mkdir()
2706 if (IS_ERR(inode)) in ext4_mkdir()
2709 inode->i_op = &ext4_dir_inode_operations; in ext4_mkdir()
2710 inode->i_fop = &ext4_dir_operations; in ext4_mkdir()
2711 err = ext4_init_new_dir(handle, dir, inode); in ext4_mkdir()
2717 err = ext4_inherit_context(dir, inode); in ext4_mkdir()
2722 err = ext4_mark_inode_dirty(handle, inode); in ext4_mkdir()
2724 err = ext4_add_entry(handle, dentry, inode); in ext4_mkdir()
2727 clear_nlink(inode); in ext4_mkdir()
2728 unlock_new_inode(inode); in ext4_mkdir()
2729 ext4_mark_inode_dirty(handle, inode); in ext4_mkdir()
2730 iput(inode); in ext4_mkdir()
2738 unlock_new_inode(inode); in ext4_mkdir()
2739 d_instantiate(dentry, inode); in ext4_mkdir()
2754 int ext4_empty_dir(struct inode *inode) in ext4_empty_dir() argument
2762 if (ext4_has_inline_data(inode)) { in ext4_empty_dir()
2765 err = empty_inline_dir(inode, &has_inline_data); in ext4_empty_dir()
2770 sb = inode->i_sb; in ext4_empty_dir()
2771 if (inode->i_size < EXT4_DIR_REC_LEN(1) + EXT4_DIR_REC_LEN(2)) { in ext4_empty_dir()
2772 EXT4_ERROR_INODE(inode, "invalid size"); in ext4_empty_dir()
2775 bh = ext4_read_dirblock(inode, 0, EITHER); in ext4_empty_dir()
2781 if (le32_to_cpu(de->inode) != inode->i_ino || in ext4_empty_dir()
2782 !le32_to_cpu(de1->inode) || in ext4_empty_dir()
2785 ext4_warning(inode->i_sb, in ext4_empty_dir()
2787 inode->i_ino); in ext4_empty_dir()
2794 while (offset < inode->i_size) { in ext4_empty_dir()
2800 bh = ext4_read_dirblock(inode, lblock, EITHER); in ext4_empty_dir()
2805 if (ext4_check_dir_entry(inode, NULL, de, bh, in ext4_empty_dir()
2812 if (le32_to_cpu(de->inode)) { in ext4_empty_dir()
2835 int ext4_orphan_add(handle_t *handle, struct inode *inode) in ext4_orphan_add() argument
2837 struct super_block *sb = inode->i_sb; in ext4_orphan_add()
2843 if (!sbi->s_journal || is_bad_inode(inode)) in ext4_orphan_add()
2846 WARN_ON_ONCE(!(inode->i_state & (I_NEW | I_FREEING)) && in ext4_orphan_add()
2847 !mutex_is_locked(&inode->i_mutex)); in ext4_orphan_add()
2852 if (!list_empty(&EXT4_I(inode)->i_orphan)) in ext4_orphan_add()
2861 J_ASSERT((S_ISREG(inode->i_mode) || S_ISDIR(inode->i_mode) || in ext4_orphan_add()
2862 S_ISLNK(inode->i_mode)) || inode->i_nlink == 0); in ext4_orphan_add()
2869 err = ext4_reserve_inode_write(handle, inode, &iloc); in ext4_orphan_add()
2878 if (!NEXT_ORPHAN(inode) || NEXT_ORPHAN(inode) > in ext4_orphan_add()
2881 NEXT_ORPHAN(inode) = le32_to_cpu(sbi->s_es->s_last_orphan); in ext4_orphan_add()
2882 sbi->s_es->s_last_orphan = cpu_to_le32(inode->i_ino); in ext4_orphan_add()
2885 list_add(&EXT4_I(inode)->i_orphan, &sbi->s_orphan); in ext4_orphan_add()
2890 rc = ext4_mark_iloc_dirty(handle, inode, &iloc); in ext4_orphan_add()
2900 list_del_init(&EXT4_I(inode)->i_orphan); in ext4_orphan_add()
2904 jbd_debug(4, "superblock will point to %lu\n", inode->i_ino); in ext4_orphan_add()
2906 inode->i_ino, NEXT_ORPHAN(inode)); in ext4_orphan_add()
2916 int ext4_orphan_del(handle_t *handle, struct inode *inode) in ext4_orphan_del() argument
2919 struct ext4_inode_info *ei = EXT4_I(inode); in ext4_orphan_del()
2920 struct ext4_sb_info *sbi = EXT4_SB(inode->i_sb); in ext4_orphan_del()
2928 WARN_ON_ONCE(!(inode->i_state & (I_NEW | I_FREEING)) && in ext4_orphan_del()
2929 !mutex_is_locked(&inode->i_mutex)); in ext4_orphan_del()
2936 err = ext4_reserve_inode_write(handle, inode, &iloc); in ext4_orphan_del()
2940 jbd_debug(4, "remove inode %lu from orphan list\n", inode->i_ino); in ext4_orphan_del()
2954 ino_next = NEXT_ORPHAN(inode); in ext4_orphan_del()
2965 err = ext4_handle_dirty_super(handle, inode->i_sb); in ext4_orphan_del()
2968 struct inode *i_prev = in ext4_orphan_del()
2984 NEXT_ORPHAN(inode) = 0; in ext4_orphan_del()
2985 err = ext4_mark_iloc_dirty(handle, inode, &iloc); in ext4_orphan_del()
2987 ext4_std_error(inode->i_sb, err); in ext4_orphan_del()
2995 static int ext4_rmdir(struct inode *dir, struct dentry *dentry) in ext4_rmdir()
2998 struct inode *inode; in ext4_rmdir() local
3015 inode = d_inode(dentry); in ext4_rmdir()
3018 if (le32_to_cpu(de->inode) != inode->i_ino) in ext4_rmdir()
3022 if (!ext4_empty_dir(inode)) in ext4_rmdir()
3039 if (!EXT4_DIR_LINK_EMPTY(inode)) in ext4_rmdir()
3040 ext4_warning(inode->i_sb, in ext4_rmdir()
3042 inode->i_nlink); in ext4_rmdir()
3043 inode->i_version++; in ext4_rmdir()
3044 clear_nlink(inode); in ext4_rmdir()
3048 inode->i_size = 0; in ext4_rmdir()
3049 ext4_orphan_add(handle, inode); in ext4_rmdir()
3050 inode->i_ctime = dir->i_ctime = dir->i_mtime = ext4_current_time(inode); in ext4_rmdir()
3051 ext4_mark_inode_dirty(handle, inode); in ext4_rmdir()
3063 static int ext4_unlink(struct inode *dir, struct dentry *dentry) in ext4_unlink()
3066 struct inode *inode; in ext4_unlink() local
3084 inode = d_inode(dentry); in ext4_unlink()
3087 if (le32_to_cpu(de->inode) != inode->i_ino) in ext4_unlink()
3101 if (!inode->i_nlink) { in ext4_unlink()
3102 ext4_warning(inode->i_sb, in ext4_unlink()
3104 inode->i_ino, inode->i_nlink); in ext4_unlink()
3105 set_nlink(inode, 1); in ext4_unlink()
3113 drop_nlink(inode); in ext4_unlink()
3114 if (!inode->i_nlink) in ext4_unlink()
3115 ext4_orphan_add(handle, inode); in ext4_unlink()
3116 inode->i_ctime = ext4_current_time(inode); in ext4_unlink()
3117 ext4_mark_inode_dirty(handle, inode); in ext4_unlink()
3127 static int ext4_symlink(struct inode *dir, in ext4_symlink()
3131 struct inode *inode; in ext4_symlink() local
3170 inode = ext4_new_inode_start_handle(dir, S_IFLNK|S_IRWXUGO, in ext4_symlink()
3174 if (IS_ERR(inode)) { in ext4_symlink()
3177 return PTR_ERR(inode); in ext4_symlink()
3190 err = ext4_inherit_context(dir, inode); in ext4_symlink()
3193 ctx = ext4_get_fname_crypto_ctx(inode, in ext4_symlink()
3194 inode->i_sb->s_blocksize); in ext4_symlink()
3212 inode->i_op = &ext4_symlink_inode_operations; in ext4_symlink()
3213 ext4_set_aops(inode); in ext4_symlink()
3224 drop_nlink(inode); in ext4_symlink()
3225 err = ext4_orphan_add(handle, inode); in ext4_symlink()
3230 err = __page_symlink(inode, disk_link.name, disk_link.len, 1); in ext4_symlink()
3245 set_nlink(inode, 1); in ext4_symlink()
3246 err = ext4_orphan_del(handle, inode); in ext4_symlink()
3251 ext4_clear_inode_flag(inode, EXT4_INODE_EXTENTS); in ext4_symlink()
3252 inode->i_op = encryption_required ? in ext4_symlink()
3255 memcpy((char *)&EXT4_I(inode)->i_data, disk_link.name, in ext4_symlink()
3257 inode->i_size = disk_link.len - 1; in ext4_symlink()
3259 EXT4_I(inode)->i_disksize = inode->i_size; in ext4_symlink()
3260 err = ext4_add_nondir(handle, dentry, inode); in ext4_symlink()
3272 clear_nlink(inode); in ext4_symlink()
3273 unlock_new_inode(inode); in ext4_symlink()
3274 iput(inode); in ext4_symlink()
3279 struct inode *dir, struct dentry *dentry) in ext4_link()
3282 struct inode *inode = d_inode(old_dentry); in ext4_link() local
3285 if (inode->i_nlink >= EXT4_LINK_MAX) in ext4_link()
3288 !ext4_is_child_context_consistent_with_parent(dir, inode)) in ext4_link()
3302 inode->i_ctime = ext4_current_time(inode); in ext4_link()
3303 ext4_inc_count(handle, inode); in ext4_link()
3304 ihold(inode); in ext4_link()
3306 err = ext4_add_entry(handle, dentry, inode); in ext4_link()
3308 ext4_mark_inode_dirty(handle, inode); in ext4_link()
3312 if (inode->i_nlink == 1) in ext4_link()
3313 ext4_orphan_del(handle, inode); in ext4_link()
3314 d_instantiate(dentry, inode); in ext4_link()
3316 drop_nlink(inode); in ext4_link()
3317 iput(inode); in ext4_link()
3332 struct inode *inode, in ext4_get_first_dir_block() argument
3339 if (!ext4_has_inline_data(inode)) { in ext4_get_first_dir_block()
3340 bh = ext4_read_dirblock(inode, 0, EITHER); in ext4_get_first_dir_block()
3347 inode->i_sb->s_blocksize); in ext4_get_first_dir_block()
3352 return ext4_get_first_inline_block(inode, parent_de, retval); in ext4_get_first_dir_block()
3356 struct inode *dir;
3358 struct inode *inode; member
3377 ent->dir_bh = ext4_get_first_dir_block(handle, ent->inode, in ext4_rename_dir_prepare()
3382 if (le32_to_cpu(ent->parent_de->inode) != ent->dir->i_ino) in ext4_rename_dir_prepare()
3393 ent->parent_de->inode = cpu_to_le32(dir_ino); in ext4_rename_dir_finish()
3396 if (is_dx(ent->inode)) { in ext4_rename_dir_finish()
3398 ent->inode, in ext4_rename_dir_finish()
3402 ent->inode, in ext4_rename_dir_finish()
3406 retval = ext4_mark_inode_dirty(handle, ent->inode); in ext4_rename_dir_finish()
3424 ent->de->inode = cpu_to_le32(ino); in ext4_setent()
3447 static int ext4_find_delete_entry(handle_t *handle, struct inode *dir, in ext4_find_delete_entry()
3474 if (le32_to_cpu(ent->de->inode) != ent->inode->i_ino || in ext4_rename_delete()
3507 static struct inode *ext4_whiteout_for_rename(struct ext4_renament *ent, in ext4_whiteout_for_rename()
3510 struct inode *wh; in ext4_whiteout_for_rename()
3548 static int ext4_rename(struct inode *old_dir, struct dentry *old_dentry, in ext4_rename()
3549 struct inode *new_dir, struct dentry *new_dentry, in ext4_rename()
3556 .inode = d_inode(old_dentry), in ext4_rename()
3561 .inode = d_inode(new_dentry), in ext4_rename()
3565 struct inode *whiteout = NULL; in ext4_rename()
3574 if (new.inode) in ext4_rename()
3575 dquot_initialize(new.inode); in ext4_rename()
3587 if (!old.bh || le32_to_cpu(old.de->inode) != old.inode->i_ino) in ext4_rename()
3593 old.inode)) { in ext4_rename()
3606 if (!new.inode) { in ext4_rename()
3611 if (new.inode && !test_opt(new.dir->i_sb, NO_AUTO_DA_ALLOC)) in ext4_rename()
3612 ext4_alloc_da_blocks(old.inode); in ext4_rename()
3635 if (S_ISDIR(old.inode->i_mode)) { in ext4_rename()
3636 if (new.inode) { in ext4_rename()
3638 if (!ext4_empty_dir(new.inode)) in ext4_rename()
3672 retval = ext4_add_entry(handle, new.dentry, old.inode); in ext4_rename()
3677 old.inode->i_ino, old_file_type); in ext4_rename()
3689 old.inode->i_ctime = ext4_current_time(old.inode); in ext4_rename()
3690 ext4_mark_inode_dirty(handle, old.inode); in ext4_rename()
3699 if (new.inode) { in ext4_rename()
3700 ext4_dec_count(handle, new.inode); in ext4_rename()
3701 new.inode->i_ctime = ext4_current_time(new.inode); in ext4_rename()
3711 if (new.inode) { in ext4_rename()
3715 clear_nlink(new.inode); in ext4_rename()
3723 if (new.inode) { in ext4_rename()
3724 ext4_mark_inode_dirty(handle, new.inode); in ext4_rename()
3725 if (!new.inode->i_nlink) in ext4_rename()
3726 ext4_orphan_add(handle, new.inode); in ext4_rename()
3745 static int ext4_cross_rename(struct inode *old_dir, struct dentry *old_dentry, in ext4_cross_rename()
3746 struct inode *new_dir, struct dentry *new_dentry) in ext4_cross_rename()
3752 .inode = d_inode(old_dentry), in ext4_cross_rename()
3757 .inode = d_inode(new_dentry), in ext4_cross_rename()
3776 if (!old.bh || le32_to_cpu(old.de->inode) != old.inode->i_ino) in ext4_cross_rename()
3788 if (!new.bh || le32_to_cpu(new.de->inode) != new.inode->i_ino) in ext4_cross_rename()
3803 if (S_ISDIR(old.inode->i_mode)) { in ext4_cross_rename()
3809 if (S_ISDIR(new.inode->i_mode)) { in ext4_cross_rename()
3830 retval = ext4_setent(handle, &new, old.inode->i_ino, old.de->file_type); in ext4_cross_rename()
3834 retval = ext4_setent(handle, &old, new.inode->i_ino, new_file_type); in ext4_cross_rename()
3842 old.inode->i_ctime = ext4_current_time(old.inode); in ext4_cross_rename()
3843 new.inode->i_ctime = ext4_current_time(new.inode); in ext4_cross_rename()
3844 ext4_mark_inode_dirty(handle, old.inode); in ext4_cross_rename()
3845 ext4_mark_inode_dirty(handle, new.inode); in ext4_cross_rename()
3871 static int ext4_rename2(struct inode *old_dir, struct dentry *old_dentry, in ext4_rename2()
3872 struct inode *new_dir, struct dentry *new_dentry, in ext4_rename2()