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, EXT4_GET_BLOCKS_CREATE); 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), __func__, __LINE__)
89 static struct buffer_head *__ext4_read_dirblock(struct inode *inode, in __ext4_read_dirblock() argument
99 bh = ext4_bread(NULL, inode, block, 0); in __ext4_read_dirblock()
101 __ext4_warning(inode->i_sb, func, line, in __ext4_read_dirblock()
104 inode->i_ino, (unsigned long)block, in __ext4_read_dirblock()
110 ext4_error_inode(inode, func, line, block, in __ext4_read_dirblock()
116 if (is_dx(inode)) { in __ext4_read_dirblock()
120 inode->i_sb->s_blocksize) == in __ext4_read_dirblock()
121 inode->i_sb->s_blocksize) in __ext4_read_dirblock()
125 ext4_error_inode(inode, func, line, block, in __ext4_read_dirblock()
129 if (!ext4_has_metadata_csum(inode->i_sb) || in __ext4_read_dirblock()
139 if (ext4_dx_csum_verify(inode, dirent)) in __ext4_read_dirblock()
142 ext4_error_inode(inode, func, line, block, in __ext4_read_dirblock()
149 if (ext4_dirent_csum_verify(inode, dirent)) in __ext4_read_dirblock()
152 ext4_error_inode(inode, func, line, block, in __ext4_read_dirblock()
173 __le32 inode; member
252 static unsigned dx_root_limit(struct inode *dir, unsigned infosize);
253 static unsigned dx_node_limit(struct inode *dir);
255 struct inode *dir,
259 static int dx_make_map(struct inode *dir, struct ext4_dir_entry_2 *de,
268 static int ext4_htree_next_block(struct inode *dir, __u32 hash,
272 static struct buffer_head * ext4_dx_find_entry(struct inode *dir,
276 struct dentry *dentry, struct inode *inode);
289 static struct ext4_dir_entry_tail *get_dirent_tail(struct inode *inode, in get_dirent_tail() argument
299 (EXT4_BLOCK_SIZE(inode->i_sb) - in get_dirent_tail()
310 t = EXT4_DIRENT_TAIL(de, EXT4_BLOCK_SIZE(inode->i_sb)); in get_dirent_tail()
322 static __le32 ext4_dirent_csum(struct inode *inode, in ext4_dirent_csum() argument
325 struct ext4_sb_info *sbi = EXT4_SB(inode->i_sb); in ext4_dirent_csum()
326 struct ext4_inode_info *ei = EXT4_I(inode); in ext4_dirent_csum()
333 #define warn_no_space_for_csum(inode) \ argument
334 __warn_no_space_for_csum((inode), __func__, __LINE__)
336 static void __warn_no_space_for_csum(struct inode *inode, const char *func, in __warn_no_space_for_csum() argument
339 __ext4_warning_inode(inode, func, line, in __warn_no_space_for_csum()
343 int ext4_dirent_csum_verify(struct inode *inode, struct ext4_dir_entry *dirent) in ext4_dirent_csum_verify() argument
347 if (!ext4_has_metadata_csum(inode->i_sb)) in ext4_dirent_csum_verify()
350 t = get_dirent_tail(inode, dirent); in ext4_dirent_csum_verify()
352 warn_no_space_for_csum(inode); in ext4_dirent_csum_verify()
356 if (t->det_checksum != ext4_dirent_csum(inode, dirent, in ext4_dirent_csum_verify()
363 static void ext4_dirent_csum_set(struct inode *inode, in ext4_dirent_csum_set() argument
368 if (!ext4_has_metadata_csum(inode->i_sb)) in ext4_dirent_csum_set()
371 t = get_dirent_tail(inode, dirent); in ext4_dirent_csum_set()
373 warn_no_space_for_csum(inode); in ext4_dirent_csum_set()
377 t->det_checksum = ext4_dirent_csum(inode, dirent, in ext4_dirent_csum_set()
382 struct inode *inode, in ext4_handle_dirty_dirent_node() argument
385 ext4_dirent_csum_set(inode, (struct ext4_dir_entry *)bh->b_data); in ext4_handle_dirty_dirent_node()
386 return ext4_handle_dirty_metadata(handle, inode, bh); in ext4_handle_dirty_dirent_node()
389 static struct dx_countlimit *get_dx_countlimit(struct inode *inode, in get_dx_countlimit() argument
397 if (le16_to_cpu(dirent->rec_len) == EXT4_BLOCK_SIZE(inode->i_sb)) in get_dx_countlimit()
402 EXT4_BLOCK_SIZE(inode->i_sb) - 12) in get_dx_countlimit()
417 static __le32 ext4_dx_csum(struct inode *inode, struct ext4_dir_entry *dirent, in ext4_dx_csum() argument
420 struct ext4_sb_info *sbi = EXT4_SB(inode->i_sb); in ext4_dx_csum()
421 struct ext4_inode_info *ei = EXT4_I(inode); in ext4_dx_csum()
436 static int ext4_dx_csum_verify(struct inode *inode, in ext4_dx_csum_verify() argument
443 if (!ext4_has_metadata_csum(inode->i_sb)) in ext4_dx_csum_verify()
446 c = get_dx_countlimit(inode, dirent, &count_offset); in ext4_dx_csum_verify()
448 EXT4_ERROR_INODE(inode, "dir seems corrupt? Run e2fsck -D."); in ext4_dx_csum_verify()
454 EXT4_BLOCK_SIZE(inode->i_sb) - sizeof(struct dx_tail)) { in ext4_dx_csum_verify()
455 warn_no_space_for_csum(inode); in ext4_dx_csum_verify()
460 if (t->dt_checksum != ext4_dx_csum(inode, dirent, count_offset, in ext4_dx_csum_verify()
466 static void ext4_dx_csum_set(struct inode *inode, struct ext4_dir_entry *dirent) in ext4_dx_csum_set() argument
472 if (!ext4_has_metadata_csum(inode->i_sb)) in ext4_dx_csum_set()
475 c = get_dx_countlimit(inode, dirent, &count_offset); in ext4_dx_csum_set()
477 EXT4_ERROR_INODE(inode, "dir seems corrupt? Run e2fsck -D."); in ext4_dx_csum_set()
483 EXT4_BLOCK_SIZE(inode->i_sb) - sizeof(struct dx_tail)) { in ext4_dx_csum_set()
484 warn_no_space_for_csum(inode); in ext4_dx_csum_set()
489 t->dt_checksum = ext4_dx_csum(inode, dirent, count_offset, count, t); in ext4_dx_csum_set()
493 struct inode *inode, in ext4_handle_dirty_dx_node() argument
496 ext4_dx_csum_set(inode, (struct ext4_dir_entry *)bh->b_data); in ext4_handle_dirty_dx_node()
497 return ext4_handle_dirty_metadata(handle, inode, bh); in ext4_handle_dirty_dx_node()
555 static inline unsigned dx_root_limit(struct inode *dir, unsigned infosize) in dx_root_limit()
565 static inline unsigned dx_node_limit(struct inode *dir) in dx_node_limit()
596 static struct stats dx_show_leaf(struct inode *dir, in dx_show_leaf()
608 if (de->inode) in dx_show_leaf()
621 if (ext4_encrypted_inode(inode)) in dx_show_leaf()
685 struct stats dx_show_entries(struct dx_hash_info *hinfo, struct inode *dir, in dx_show_entries()
730 dx_probe(struct ext4_filename *fname, struct inode *dir, in dx_probe()
884 static int ext4_htree_next_block(struct inode *dir, __u32 hash, in ext4_htree_next_block()
948 struct inode *dir, ext4_lblk_t block, in htree_dirblock_to_tree()
996 if (de->inode == 0) in htree_dirblock_to_tree()
1048 struct inode *dir; in ext4_htree_fill_tree()
1145 struct inode *dir, in search_dirblock()
1163 static int dx_make_map(struct inode *dir, struct ext4_dir_entry_2 *de, in dx_make_map()
1172 if (de->name_len && de->inode) { in dx_make_map()
1240 if (!de->inode) in ext4_match()
1266 struct inode *dir, struct ext4_filename *fname, in ext4_search_dir()
1317 static int is_dx_internal_node(struct inode *dir, ext4_lblk_t block, in is_dx_internal_node()
1326 if (de->inode == 0 && in is_dx_internal_node()
1344 static struct buffer_head * ext4_find_entry (struct inode *dir, in ext4_find_entry()
1501 static struct buffer_head * ext4_dx_find_entry(struct inode *dir, in ext4_dx_find_entry()
1555 static struct dentry *ext4_lookup(struct inode *dir, struct dentry *dentry, unsigned int flags) in ext4_lookup()
1557 struct inode *inode; in ext4_lookup() local
1567 inode = NULL; in ext4_lookup()
1569 __u32 ino = le32_to_cpu(de->inode); in ext4_lookup()
1580 inode = ext4_iget_normal(dir->i_sb, ino); in ext4_lookup()
1581 if (inode == ERR_PTR(-ESTALE)) { in ext4_lookup()
1587 if (!IS_ERR(inode) && ext4_encrypted_inode(dir) && in ext4_lookup()
1588 (S_ISREG(inode->i_mode) || S_ISDIR(inode->i_mode) || in ext4_lookup()
1589 S_ISLNK(inode->i_mode)) && in ext4_lookup()
1591 inode)) { in ext4_lookup()
1592 iput(inode); in ext4_lookup()
1593 ext4_warning(inode->i_sb, in ext4_lookup()
1596 (unsigned long) inode->i_ino); in ext4_lookup()
1600 return d_splice_alias(inode, dentry); in ext4_lookup()
1616 ino = le32_to_cpu(de->inode); in ext4_get_parent()
1645 de->inode = 0; in dx_move_dirents()
1664 if (de->inode && de->name_len) { in dx_pack_dirents()
1682 static struct ext4_dir_entry_2 *do_split(handle_t *handle, struct inode *dir, in do_split()
1792 int ext4_find_dest_de(struct inode *dir, struct inode *inode, in ext4_find_dest_de() argument
1823 if ((de->inode ? rlen - nlen : rlen) >= reclen) in ext4_find_dest_de()
1839 int ext4_insert_dentry(struct inode *dir, in ext4_insert_dentry()
1840 struct inode *inode, in ext4_insert_dentry() argument
1850 if (de->inode) { in ext4_insert_dentry()
1858 de->inode = cpu_to_le32(inode->i_ino); in ext4_insert_dentry()
1859 ext4_set_de_type(inode->i_sb, de, inode->i_mode); in ext4_insert_dentry()
1874 struct inode *dir, in add_dirent_to_buf()
1875 struct inode *inode, struct ext4_dir_entry_2 *de, in add_dirent_to_buf() argument
1882 if (ext4_has_metadata_csum(inode->i_sb)) in add_dirent_to_buf()
1886 err = ext4_find_dest_de(dir, inode, bh, bh->b_data, in add_dirent_to_buf()
1900 err = ext4_insert_dentry(dir, inode, de, blocksize, fname); in add_dirent_to_buf()
1932 struct inode *inode, struct buffer_head *bh) in make_indexed_dir() argument
1934 struct inode *dir = d_inode(dentry->d_parent); in make_indexed_dir()
1949 if (ext4_has_metadata_csum(inode->i_sb)) in make_indexed_dir()
2037 retval = add_dirent_to_buf(handle, fname, dir, inode, de, bh); in make_indexed_dir()
2062 struct inode *inode) in ext4_add_entry() argument
2064 struct inode *dir = d_inode(dentry->d_parent); in ext4_add_entry()
2076 if (ext4_has_metadata_csum(inode->i_sb)) in ext4_add_entry()
2090 dentry, inode); in ext4_add_entry()
2100 retval = ext4_dx_add_entry(handle, &fname, dentry, inode); in ext4_add_entry()
2115 retval = add_dirent_to_buf(handle, &fname, dir, inode, in ext4_add_entry()
2123 inode, bh); in ext4_add_entry()
2136 de->inode = 0; in ext4_add_entry()
2144 retval = add_dirent_to_buf(handle, &fname, dir, inode, de, bh); in ext4_add_entry()
2149 ext4_set_inode_state(inode, EXT4_STATE_NEWENTRY); in ext4_add_entry()
2157 struct dentry *dentry, struct inode *inode) in ext4_dx_add_entry() argument
2162 struct inode *dir = d_inode(dentry->d_parent); in ext4_dx_add_entry()
2184 err = add_dirent_to_buf(handle, fname, dir, inode, NULL, bh); in ext4_dx_add_entry()
2276 ext4_std_error(inode->i_sb, err); in ext4_dx_add_entry()
2285 err = add_dirent_to_buf(handle, fname, dir, inode, de, bh); in ext4_dx_add_entry()
2301 struct inode *dir, in ext4_generic_delete_entry()
2328 de->inode = 0; in ext4_generic_delete_entry()
2340 struct inode *dir, in ext4_delete_entry()
2384 static void ext4_inc_count(handle_t *handle, struct inode *inode) in ext4_inc_count() argument
2386 inc_nlink(inode); in ext4_inc_count()
2387 if (is_dx(inode) && inode->i_nlink > 1) { in ext4_inc_count()
2389 if (inode->i_nlink >= EXT4_LINK_MAX || inode->i_nlink == 2) { in ext4_inc_count()
2390 set_nlink(inode, 1); in ext4_inc_count()
2391 ext4_set_feature_dir_nlink(inode->i_sb); in ext4_inc_count()
2400 static void ext4_dec_count(handle_t *handle, struct inode *inode) in ext4_dec_count() argument
2402 if (!S_ISDIR(inode->i_mode) || inode->i_nlink > 2) in ext4_dec_count()
2403 drop_nlink(inode); in ext4_dec_count()
2408 struct dentry *dentry, struct inode *inode) in ext4_add_nondir() argument
2410 int err = ext4_add_entry(handle, dentry, inode); in ext4_add_nondir()
2412 ext4_mark_inode_dirty(handle, inode); in ext4_add_nondir()
2413 unlock_new_inode(inode); in ext4_add_nondir()
2414 d_instantiate(dentry, inode); in ext4_add_nondir()
2417 drop_nlink(inode); in ext4_add_nondir()
2418 unlock_new_inode(inode); in ext4_add_nondir()
2419 iput(inode); in ext4_add_nondir()
2431 static int ext4_create(struct inode *dir, struct dentry *dentry, umode_t mode, in ext4_create()
2435 struct inode *inode; in ext4_create() local
2445 inode = ext4_new_inode_start_handle(dir, mode, &dentry->d_name, 0, in ext4_create()
2448 err = PTR_ERR(inode); in ext4_create()
2449 if (!IS_ERR(inode)) { in ext4_create()
2450 inode->i_op = &ext4_file_inode_operations; in ext4_create()
2451 inode->i_fop = &ext4_file_operations; in ext4_create()
2452 ext4_set_aops(inode); in ext4_create()
2453 err = ext4_add_nondir(handle, dentry, inode); in ext4_create()
2464 static int ext4_mknod(struct inode *dir, struct dentry *dentry, in ext4_mknod()
2468 struct inode *inode; in ext4_mknod() local
2478 inode = ext4_new_inode_start_handle(dir, mode, &dentry->d_name, 0, in ext4_mknod()
2481 err = PTR_ERR(inode); in ext4_mknod()
2482 if (!IS_ERR(inode)) { in ext4_mknod()
2483 init_special_inode(inode, inode->i_mode, rdev); in ext4_mknod()
2484 inode->i_op = &ext4_special_inode_operations; in ext4_mknod()
2485 err = ext4_add_nondir(handle, dentry, inode); in ext4_mknod()
2496 static int ext4_tmpfile(struct inode *dir, struct dentry *dentry, umode_t mode) in ext4_tmpfile()
2499 struct inode *inode; in ext4_tmpfile() local
2507 inode = ext4_new_inode_start_handle(dir, mode, in ext4_tmpfile()
2513 err = PTR_ERR(inode); in ext4_tmpfile()
2514 if (!IS_ERR(inode)) { in ext4_tmpfile()
2515 inode->i_op = &ext4_file_inode_operations; in ext4_tmpfile()
2516 inode->i_fop = &ext4_file_operations; in ext4_tmpfile()
2517 ext4_set_aops(inode); in ext4_tmpfile()
2518 d_tmpfile(dentry, inode); in ext4_tmpfile()
2519 err = ext4_orphan_add(handle, inode); in ext4_tmpfile()
2522 mark_inode_dirty(inode); in ext4_tmpfile()
2523 unlock_new_inode(inode); in ext4_tmpfile()
2532 unlock_new_inode(inode); in ext4_tmpfile()
2536 struct ext4_dir_entry_2 *ext4_init_dot_dotdot(struct inode *inode, in ext4_init_dot_dotdot() argument
2541 de->inode = cpu_to_le32(inode->i_ino); in ext4_init_dot_dotdot()
2546 ext4_set_de_type(inode->i_sb, de, S_IFDIR); in ext4_init_dot_dotdot()
2549 de->inode = cpu_to_le32(parent_ino); in ext4_init_dot_dotdot()
2559 ext4_set_de_type(inode->i_sb, de, S_IFDIR); in ext4_init_dot_dotdot()
2564 static int ext4_init_new_dir(handle_t *handle, struct inode *dir, in ext4_init_new_dir()
2565 struct inode *inode) in ext4_init_new_dir() argument
2578 if (ext4_test_inode_state(inode, EXT4_STATE_MAY_INLINE_DATA)) { in ext4_init_new_dir()
2579 err = ext4_try_create_inline_dir(handle, dir, inode); in ext4_init_new_dir()
2586 inode->i_size = 0; in ext4_init_new_dir()
2587 dir_block = ext4_append(handle, inode, &block); in ext4_init_new_dir()
2591 ext4_init_dot_dotdot(inode, de, blocksize, csum_size, dir->i_ino, 0); in ext4_init_new_dir()
2592 set_nlink(inode, 2); in ext4_init_new_dir()
2599 err = ext4_handle_dirty_dirent_node(handle, inode, dir_block); in ext4_init_new_dir()
2608 static int ext4_mkdir(struct inode *dir, struct dentry *dentry, umode_t mode) in ext4_mkdir()
2611 struct inode *inode; in ext4_mkdir() local
2624 inode = ext4_new_inode_start_handle(dir, S_IFDIR | mode, in ext4_mkdir()
2628 err = PTR_ERR(inode); in ext4_mkdir()
2629 if (IS_ERR(inode)) in ext4_mkdir()
2632 inode->i_op = &ext4_dir_inode_operations; in ext4_mkdir()
2633 inode->i_fop = &ext4_dir_operations; in ext4_mkdir()
2634 err = ext4_init_new_dir(handle, dir, inode); in ext4_mkdir()
2637 err = ext4_mark_inode_dirty(handle, inode); in ext4_mkdir()
2639 err = ext4_add_entry(handle, dentry, inode); in ext4_mkdir()
2642 clear_nlink(inode); in ext4_mkdir()
2643 unlock_new_inode(inode); in ext4_mkdir()
2644 ext4_mark_inode_dirty(handle, inode); in ext4_mkdir()
2645 iput(inode); in ext4_mkdir()
2653 unlock_new_inode(inode); in ext4_mkdir()
2654 d_instantiate(dentry, inode); in ext4_mkdir()
2669 int ext4_empty_dir(struct inode *inode) in ext4_empty_dir() argument
2677 if (ext4_has_inline_data(inode)) { in ext4_empty_dir()
2680 err = empty_inline_dir(inode, &has_inline_data); in ext4_empty_dir()
2685 sb = inode->i_sb; in ext4_empty_dir()
2686 if (inode->i_size < EXT4_DIR_REC_LEN(1) + EXT4_DIR_REC_LEN(2)) { in ext4_empty_dir()
2687 EXT4_ERROR_INODE(inode, "invalid size"); in ext4_empty_dir()
2690 bh = ext4_read_dirblock(inode, 0, EITHER); in ext4_empty_dir()
2696 if (le32_to_cpu(de->inode) != inode->i_ino || in ext4_empty_dir()
2697 le32_to_cpu(de1->inode) == 0 || in ext4_empty_dir()
2699 ext4_warning_inode(inode, "directory missing '.' and/or '..'"); in ext4_empty_dir()
2706 while (offset < inode->i_size) { in ext4_empty_dir()
2712 bh = ext4_read_dirblock(inode, lblock, EITHER); in ext4_empty_dir()
2717 if (ext4_check_dir_entry(inode, NULL, de, bh, in ext4_empty_dir()
2724 if (le32_to_cpu(de->inode)) { in ext4_empty_dir()
2747 int ext4_orphan_add(handle_t *handle, struct inode *inode) in ext4_orphan_add() argument
2749 struct super_block *sb = inode->i_sb; in ext4_orphan_add()
2755 if (!sbi->s_journal || is_bad_inode(inode)) in ext4_orphan_add()
2758 WARN_ON_ONCE(!(inode->i_state & (I_NEW | I_FREEING)) && in ext4_orphan_add()
2759 !mutex_is_locked(&inode->i_mutex)); in ext4_orphan_add()
2764 if (!list_empty(&EXT4_I(inode)->i_orphan)) in ext4_orphan_add()
2773 J_ASSERT((S_ISREG(inode->i_mode) || S_ISDIR(inode->i_mode) || in ext4_orphan_add()
2774 S_ISLNK(inode->i_mode)) || inode->i_nlink == 0); in ext4_orphan_add()
2781 err = ext4_reserve_inode_write(handle, inode, &iloc); in ext4_orphan_add()
2790 if (!NEXT_ORPHAN(inode) || NEXT_ORPHAN(inode) > in ext4_orphan_add()
2793 NEXT_ORPHAN(inode) = le32_to_cpu(sbi->s_es->s_last_orphan); in ext4_orphan_add()
2794 sbi->s_es->s_last_orphan = cpu_to_le32(inode->i_ino); in ext4_orphan_add()
2797 list_add(&EXT4_I(inode)->i_orphan, &sbi->s_orphan); in ext4_orphan_add()
2802 rc = ext4_mark_iloc_dirty(handle, inode, &iloc); in ext4_orphan_add()
2812 list_del_init(&EXT4_I(inode)->i_orphan); in ext4_orphan_add()
2816 jbd_debug(4, "superblock will point to %lu\n", inode->i_ino); in ext4_orphan_add()
2818 inode->i_ino, NEXT_ORPHAN(inode)); in ext4_orphan_add()
2828 int ext4_orphan_del(handle_t *handle, struct inode *inode) in ext4_orphan_del() argument
2831 struct ext4_inode_info *ei = EXT4_I(inode); in ext4_orphan_del()
2832 struct ext4_sb_info *sbi = EXT4_SB(inode->i_sb); in ext4_orphan_del()
2840 WARN_ON_ONCE(!(inode->i_state & (I_NEW | I_FREEING)) && in ext4_orphan_del()
2841 !mutex_is_locked(&inode->i_mutex)); in ext4_orphan_del()
2848 err = ext4_reserve_inode_write(handle, inode, &iloc); in ext4_orphan_del()
2852 jbd_debug(4, "remove inode %lu from orphan list\n", inode->i_ino); in ext4_orphan_del()
2866 ino_next = NEXT_ORPHAN(inode); in ext4_orphan_del()
2877 err = ext4_handle_dirty_super(handle, inode->i_sb); in ext4_orphan_del()
2880 struct inode *i_prev = in ext4_orphan_del()
2896 NEXT_ORPHAN(inode) = 0; in ext4_orphan_del()
2897 err = ext4_mark_iloc_dirty(handle, inode, &iloc); in ext4_orphan_del()
2899 ext4_std_error(inode->i_sb, err); in ext4_orphan_del()
2907 static int ext4_rmdir(struct inode *dir, struct dentry *dentry) in ext4_rmdir()
2910 struct inode *inode; in ext4_rmdir() local
2931 inode = d_inode(dentry); in ext4_rmdir()
2934 if (le32_to_cpu(de->inode) != inode->i_ino) in ext4_rmdir()
2938 if (!ext4_empty_dir(inode)) in ext4_rmdir()
2955 if (!EXT4_DIR_LINK_EMPTY(inode)) in ext4_rmdir()
2956 ext4_warning_inode(inode, in ext4_rmdir()
2959 inode->i_nlink); in ext4_rmdir()
2960 inode->i_version++; in ext4_rmdir()
2961 clear_nlink(inode); in ext4_rmdir()
2965 inode->i_size = 0; in ext4_rmdir()
2966 ext4_orphan_add(handle, inode); in ext4_rmdir()
2967 inode->i_ctime = dir->i_ctime = dir->i_mtime = ext4_current_time(inode); in ext4_rmdir()
2968 ext4_mark_inode_dirty(handle, inode); in ext4_rmdir()
2980 static int ext4_unlink(struct inode *dir, struct dentry *dentry) in ext4_unlink()
2983 struct inode *inode; in ext4_unlink() local
3005 inode = d_inode(dentry); in ext4_unlink()
3008 if (le32_to_cpu(de->inode) != inode->i_ino) in ext4_unlink()
3022 if (inode->i_nlink == 0) { in ext4_unlink()
3023 ext4_warning_inode(inode, "Deleting file '%.*s' with no links", in ext4_unlink()
3025 set_nlink(inode, 1); in ext4_unlink()
3033 drop_nlink(inode); in ext4_unlink()
3034 if (!inode->i_nlink) in ext4_unlink()
3035 ext4_orphan_add(handle, inode); in ext4_unlink()
3036 inode->i_ctime = ext4_current_time(inode); in ext4_unlink()
3037 ext4_mark_inode_dirty(handle, inode); in ext4_unlink()
3047 static int ext4_symlink(struct inode *dir, in ext4_symlink()
3051 struct inode *inode; in ext4_symlink() local
3105 inode = ext4_new_inode_start_handle(dir, S_IFLNK|S_IRWXUGO, in ext4_symlink()
3109 if (IS_ERR(inode)) { in ext4_symlink()
3112 err = PTR_ERR(inode); in ext4_symlink()
3124 err = ext4_fname_usr_to_disk(inode, &istr, &ostr); in ext4_symlink()
3129 inode->i_op = &ext4_encrypted_symlink_inode_operations; in ext4_symlink()
3134 inode->i_op = &ext4_symlink_inode_operations; in ext4_symlink()
3135 ext4_set_aops(inode); in ext4_symlink()
3146 drop_nlink(inode); in ext4_symlink()
3147 err = ext4_orphan_add(handle, inode); in ext4_symlink()
3152 err = __page_symlink(inode, disk_link.name, disk_link.len, 1); in ext4_symlink()
3167 set_nlink(inode, 1); in ext4_symlink()
3168 err = ext4_orphan_del(handle, inode); in ext4_symlink()
3173 ext4_clear_inode_flag(inode, EXT4_INODE_EXTENTS); in ext4_symlink()
3175 inode->i_op = &ext4_fast_symlink_inode_operations; in ext4_symlink()
3176 inode->i_link = (char *)&EXT4_I(inode)->i_data; in ext4_symlink()
3178 memcpy((char *)&EXT4_I(inode)->i_data, disk_link.name, in ext4_symlink()
3180 inode->i_size = disk_link.len - 1; in ext4_symlink()
3182 EXT4_I(inode)->i_disksize = inode->i_size; in ext4_symlink()
3183 err = ext4_add_nondir(handle, dentry, inode); in ext4_symlink()
3194 clear_nlink(inode); in ext4_symlink()
3195 unlock_new_inode(inode); in ext4_symlink()
3196 iput(inode); in ext4_symlink()
3203 struct inode *dir, struct dentry *dentry) in ext4_link()
3206 struct inode *inode = d_inode(old_dentry); in ext4_link() local
3209 if (inode->i_nlink >= EXT4_LINK_MAX) in ext4_link()
3212 !ext4_is_child_context_consistent_with_parent(dir, inode)) in ext4_link()
3228 inode->i_ctime = ext4_current_time(inode); in ext4_link()
3229 ext4_inc_count(handle, inode); in ext4_link()
3230 ihold(inode); in ext4_link()
3232 err = ext4_add_entry(handle, dentry, inode); in ext4_link()
3234 ext4_mark_inode_dirty(handle, inode); in ext4_link()
3238 if (inode->i_nlink == 1) in ext4_link()
3239 ext4_orphan_del(handle, inode); in ext4_link()
3240 d_instantiate(dentry, inode); in ext4_link()
3242 drop_nlink(inode); in ext4_link()
3243 iput(inode); in ext4_link()
3258 struct inode *inode, in ext4_get_first_dir_block() argument
3265 if (!ext4_has_inline_data(inode)) { in ext4_get_first_dir_block()
3266 bh = ext4_read_dirblock(inode, 0, EITHER); in ext4_get_first_dir_block()
3273 inode->i_sb->s_blocksize); in ext4_get_first_dir_block()
3278 return ext4_get_first_inline_block(inode, parent_de, retval); in ext4_get_first_dir_block()
3282 struct inode *dir;
3284 struct inode *inode; member
3303 ent->dir_bh = ext4_get_first_dir_block(handle, ent->inode, in ext4_rename_dir_prepare()
3308 if (le32_to_cpu(ent->parent_de->inode) != ent->dir->i_ino) in ext4_rename_dir_prepare()
3319 ent->parent_de->inode = cpu_to_le32(dir_ino); in ext4_rename_dir_finish()
3322 if (is_dx(ent->inode)) { in ext4_rename_dir_finish()
3324 ent->inode, in ext4_rename_dir_finish()
3328 ent->inode, in ext4_rename_dir_finish()
3332 retval = ext4_mark_inode_dirty(handle, ent->inode); in ext4_rename_dir_finish()
3350 ent->de->inode = cpu_to_le32(ino); in ext4_setent()
3372 static int ext4_find_delete_entry(handle_t *handle, struct inode *dir, in ext4_find_delete_entry()
3399 if (le32_to_cpu(ent->de->inode) != ent->inode->i_ino || in ext4_rename_delete()
3432 static struct inode *ext4_whiteout_for_rename(struct ext4_renament *ent, in ext4_whiteout_for_rename()
3435 struct inode *wh; in ext4_whiteout_for_rename()
3473 static int ext4_rename(struct inode *old_dir, struct dentry *old_dentry, in ext4_rename()
3474 struct inode *new_dir, struct dentry *new_dentry, in ext4_rename()
3481 .inode = d_inode(old_dentry), in ext4_rename()
3486 .inode = d_inode(new_dentry), in ext4_rename()
3490 struct inode *whiteout = NULL; in ext4_rename()
3503 if (new.inode) { in ext4_rename()
3504 retval = dquot_initialize(new.inode); in ext4_rename()
3519 if (!old.bh || le32_to_cpu(old.de->inode) != old.inode->i_ino) in ext4_rename()
3525 old.inode)) { in ext4_rename()
3538 if (!new.inode) { in ext4_rename()
3543 if (new.inode && !test_opt(new.dir->i_sb, NO_AUTO_DA_ALLOC)) in ext4_rename()
3544 ext4_alloc_da_blocks(old.inode); in ext4_rename()
3567 if (S_ISDIR(old.inode->i_mode)) { in ext4_rename()
3568 if (new.inode) { in ext4_rename()
3570 if (!ext4_empty_dir(new.inode)) in ext4_rename()
3604 retval = ext4_add_entry(handle, new.dentry, old.inode); in ext4_rename()
3609 old.inode->i_ino, old_file_type); in ext4_rename()
3621 old.inode->i_ctime = ext4_current_time(old.inode); in ext4_rename()
3622 ext4_mark_inode_dirty(handle, old.inode); in ext4_rename()
3631 if (new.inode) { in ext4_rename()
3632 ext4_dec_count(handle, new.inode); in ext4_rename()
3633 new.inode->i_ctime = ext4_current_time(new.inode); in ext4_rename()
3643 if (new.inode) { in ext4_rename()
3647 clear_nlink(new.inode); in ext4_rename()
3655 if (new.inode) { in ext4_rename()
3656 ext4_mark_inode_dirty(handle, new.inode); in ext4_rename()
3657 if (!new.inode->i_nlink) in ext4_rename()
3658 ext4_orphan_add(handle, new.inode); in ext4_rename()
3677 static int ext4_cross_rename(struct inode *old_dir, struct dentry *old_dentry, in ext4_cross_rename()
3678 struct inode *new_dir, struct dentry *new_dentry) in ext4_cross_rename()
3684 .inode = d_inode(old_dentry), in ext4_cross_rename()
3689 .inode = d_inode(new_dentry), in ext4_cross_rename()
3698 old.inode) || in ext4_cross_rename()
3700 new.inode))) in ext4_cross_rename()
3721 if (!old.bh || le32_to_cpu(old.de->inode) != old.inode->i_ino) in ext4_cross_rename()
3733 if (!new.bh || le32_to_cpu(new.de->inode) != new.inode->i_ino) in ext4_cross_rename()
3748 if (S_ISDIR(old.inode->i_mode)) { in ext4_cross_rename()
3754 if (S_ISDIR(new.inode->i_mode)) { in ext4_cross_rename()
3775 retval = ext4_setent(handle, &new, old.inode->i_ino, old.de->file_type); in ext4_cross_rename()
3779 retval = ext4_setent(handle, &old, new.inode->i_ino, new_file_type); in ext4_cross_rename()
3787 old.inode->i_ctime = ext4_current_time(old.inode); in ext4_cross_rename()
3788 new.inode->i_ctime = ext4_current_time(new.inode); in ext4_cross_rename()
3789 ext4_mark_inode_dirty(handle, old.inode); in ext4_cross_rename()
3790 ext4_mark_inode_dirty(handle, new.inode); in ext4_cross_rename()
3816 static int ext4_rename2(struct inode *old_dir, struct dentry *old_dentry, in ext4_rename2()
3817 struct inode *new_dir, struct dentry *new_dentry, in ext4_rename2()