Lines Matching refs:dir
269 static unsigned dx_root_limit(struct inode *dir, unsigned infosize);
270 static unsigned dx_node_limit(struct inode *dir);
272 struct inode *dir,
276 static int dx_make_map(struct inode *dir, struct ext4_dir_entry_2 *de,
285 static int ext4_htree_next_block(struct inode *dir, __u32 hash,
289 static struct buffer_head * ext4_dx_find_entry(struct inode *dir,
293 struct inode *dir, struct inode *inode);
572 static inline unsigned dx_root_limit(struct inode *dir, unsigned infosize) in dx_root_limit() argument
574 unsigned entry_space = dir->i_sb->s_blocksize - EXT4_DIR_REC_LEN(1) - in dx_root_limit()
577 if (ext4_has_metadata_csum(dir->i_sb)) in dx_root_limit()
582 static inline unsigned dx_node_limit(struct inode *dir) in dx_node_limit() argument
584 unsigned entry_space = dir->i_sb->s_blocksize - EXT4_DIR_REC_LEN(0); in dx_node_limit()
586 if (ext4_has_metadata_csum(dir->i_sb)) in dx_node_limit()
614 static struct stats dx_show_leaf(struct inode *dir, in dx_show_leaf() argument
639 if (IS_ENCRYPTED(dir)) in dx_show_leaf()
640 res = fscrypt_get_encryption_info(dir); in dx_show_leaf()
645 if (!fscrypt_has_encryption_key(dir)) { in dx_show_leaf()
647 ext4fs_dirhash(dir, de->name, in dx_show_leaf()
659 dir, len, in dx_show_leaf()
666 res = fscrypt_fname_disk_to_usr(dir, in dx_show_leaf()
680 ext4fs_dirhash(dir, de->name, in dx_show_leaf()
691 ext4fs_dirhash(dir, de->name, de->name_len, &h); in dx_show_leaf()
705 struct stats dx_show_entries(struct dx_hash_info *hinfo, struct inode *dir, in dx_show_entries() argument
708 unsigned blocksize = dir->i_sb->s_blocksize; in dx_show_entries()
720 bh = ext4_bread(NULL,dir, block, 0); in dx_show_entries()
724 dx_show_entries(hinfo, dir, ((struct dx_node *) bh->b_data)->entries, levels - 1): in dx_show_entries()
725 dx_show_leaf(dir, hinfo, (struct ext4_dir_entry_2 *) in dx_show_entries()
750 dx_probe(struct ext4_filename *fname, struct inode *dir, in dx_probe() argument
761 frame->bh = ext4_read_dirblock(dir, 0, INDEX); in dx_probe()
769 ext4_warning_inode(dir, "Unrecognised inode hash code %u", in dx_probe()
777 hinfo->hash_version += EXT4_SB(dir->i_sb)->s_hash_unsigned; in dx_probe()
778 hinfo->seed = EXT4_SB(dir->i_sb)->s_hash_seed; in dx_probe()
780 ext4fs_dirhash(dir, fname_name(fname), fname_len(fname), hinfo); in dx_probe()
784 ext4_warning_inode(dir, "Unimplemented hash flags: %#06x", in dx_probe()
790 if (indirect >= ext4_dir_htree_level(dir->i_sb)) { in dx_probe()
791 ext4_warning(dir->i_sb, in dx_probe()
793 "supported value", dir->i_ino, in dx_probe()
794 ext4_dir_htree_level(dir->i_sb)); in dx_probe()
795 if (ext4_dir_htree_level(dir->i_sb) < EXT4_HTREE_LEVEL) { in dx_probe()
796 ext4_warning(dir->i_sb, "Enable large directory " in dx_probe()
805 if (dx_get_limit(entries) != dx_root_limit(dir, in dx_probe()
807 ext4_warning_inode(dir, "dx entry: limit %u != root limit %u", in dx_probe()
809 dx_root_limit(dir, root->info.info_length)); in dx_probe()
817 ext4_warning_inode(dir, in dx_probe()
858 frame->bh = ext4_read_dirblock(dir, dx_get_block(at), INDEX); in dx_probe()
866 if (dx_get_limit(entries) != dx_node_limit(dir)) { in dx_probe()
867 ext4_warning_inode(dir, in dx_probe()
869 dx_get_limit(entries), dx_node_limit(dir)); in dx_probe()
880 ext4_warning_inode(dir, in dx_probe()
922 static int ext4_htree_next_block(struct inode *dir, __u32 hash, in ext4_htree_next_block() argument
968 bh = ext4_read_dirblock(dir, dx_get_block(p->at), INDEX); in ext4_htree_next_block()
986 struct inode *dir, ext4_lblk_t block, in htree_dirblock_to_tree() argument
997 bh = ext4_read_dirblock(dir, block, DIRENT_HTREE); in htree_dirblock_to_tree()
1003 dir->i_sb->s_blocksize - in htree_dirblock_to_tree()
1007 if (IS_ENCRYPTED(dir)) { in htree_dirblock_to_tree()
1008 err = fscrypt_get_encryption_info(dir); in htree_dirblock_to_tree()
1013 err = fscrypt_fname_alloc_buffer(dir, EXT4_NAME_LEN, in htree_dirblock_to_tree()
1021 for (; de < top; de = ext4_next_entry(de, dir->i_sb->s_blocksize)) { in htree_dirblock_to_tree()
1022 if (ext4_check_dir_entry(dir, NULL, de, bh, in htree_dirblock_to_tree()
1024 (block<<EXT4_BLOCK_SIZE_BITS(dir->i_sb)) in htree_dirblock_to_tree()
1029 ext4fs_dirhash(dir, de->name, de->name_len, hinfo); in htree_dirblock_to_tree()
1036 if (!IS_ENCRYPTED(dir)) { in htree_dirblock_to_tree()
1048 err = fscrypt_fname_disk_to_usr(dir, hinfo->hash, in htree_dirblock_to_tree()
1089 struct inode *dir; in ext4_htree_fill_tree() local
1098 dir = file_inode(dir_file); in ext4_htree_fill_tree()
1099 if (!(ext4_test_inode_flag(dir, EXT4_INODE_INDEX))) { in ext4_htree_fill_tree()
1100 hinfo.hash_version = EXT4_SB(dir->i_sb)->s_def_hash_version; in ext4_htree_fill_tree()
1103 EXT4_SB(dir->i_sb)->s_hash_unsigned; in ext4_htree_fill_tree()
1104 hinfo.seed = EXT4_SB(dir->i_sb)->s_hash_seed; in ext4_htree_fill_tree()
1105 if (ext4_has_inline_data(dir)) { in ext4_htree_fill_tree()
1107 count = ext4_inlinedir_to_tree(dir_file, dir, 0, in ext4_htree_fill_tree()
1116 count = htree_dirblock_to_tree(dir_file, dir, 0, &hinfo, in ext4_htree_fill_tree()
1123 frame = dx_probe(NULL, dir, &hinfo, frames); in ext4_htree_fill_tree()
1140 de = ext4_next_entry(de, dir->i_sb->s_blocksize); in ext4_htree_fill_tree()
1157 ret = htree_dirblock_to_tree(dir_file, dir, block, &hinfo, in ext4_htree_fill_tree()
1165 ret = ext4_htree_next_block(dir, HASH_NB_ALWAYS, in ext4_htree_fill_tree()
1191 struct inode *dir, in search_dirblock() argument
1196 return ext4_search_dir(bh, bh->b_data, dir->i_sb->s_blocksize, dir, in search_dirblock()
1208 static int dx_make_map(struct inode *dir, struct ext4_dir_entry_2 *de, in dx_make_map() argument
1218 ext4fs_dirhash(dir, de->name, de->name_len, &h); in dx_make_map()
1310 void ext4_fname_setup_ci_filename(struct inode *dir, const struct qstr *iname, in ext4_fname_setup_ci_filename() argument
1315 if (!IS_CASEFOLDED(dir) || !EXT4_SB(dir->i_sb)->s_encoding) { in ext4_fname_setup_ci_filename()
1324 len = utf8_casefold(EXT4_SB(dir->i_sb)->s_encoding, in ext4_fname_setup_ci_filename()
1379 struct inode *dir, struct ext4_filename *fname, in ext4_search_dir() argument
1392 ext4_match(dir, fname, de)) { in ext4_search_dir()
1395 if (ext4_check_dir_entry(dir, NULL, de, bh, bh->b_data, in ext4_search_dir()
1403 dir->i_sb->s_blocksize); in ext4_search_dir()
1412 static int is_dx_internal_node(struct inode *dir, ext4_lblk_t block, in is_dx_internal_node() argument
1415 struct super_block *sb = dir->i_sb; in is_dx_internal_node()
1417 if (!is_dx(dir)) in is_dx_internal_node()
1439 static struct buffer_head *__ext4_find_entry(struct inode *dir, in __ext4_find_entry() argument
1457 sb = dir->i_sb; in __ext4_find_entry()
1462 if (ext4_has_inline_data(dir)) { in __ext4_find_entry()
1464 ret = ext4_find_inline_entry(dir, fname, res_dir, in __ext4_find_entry()
1483 if (is_dx(dir)) { in __ext4_find_entry()
1484 ret = ext4_dx_find_entry(dir, fname, res_dir); in __ext4_find_entry()
1496 nblocks = dir->i_size >> EXT4_BLOCK_SIZE_BITS(sb); in __ext4_find_entry()
1501 start = EXT4_I(dir)->i_dir_start_lookup; in __ext4_find_entry()
1518 retval = ext4_bread_batch(dir, block, ra_max, in __ext4_find_entry()
1530 EXT4_ERROR_INODE(dir, "reading directory lblock %lu", in __ext4_find_entry()
1537 !is_dx_internal_node(dir, block, in __ext4_find_entry()
1539 !ext4_dirblock_csum_verify(dir, bh)) { in __ext4_find_entry()
1540 EXT4_ERROR_INODE(dir, "checksumming directory " in __ext4_find_entry()
1547 i = search_dirblock(bh, dir, fname, in __ext4_find_entry()
1550 EXT4_I(dir)->i_dir_start_lookup = block; in __ext4_find_entry()
1568 nblocks = dir->i_size >> EXT4_BLOCK_SIZE_BITS(sb); in __ext4_find_entry()
1581 static struct buffer_head *ext4_find_entry(struct inode *dir, in ext4_find_entry() argument
1590 err = ext4_fname_setup_filename(dir, d_name, 1, &fname); in ext4_find_entry()
1596 bh = __ext4_find_entry(dir, &fname, res_dir, inlined); in ext4_find_entry()
1602 static struct buffer_head *ext4_lookup_entry(struct inode *dir, in ext4_lookup_entry() argument
1610 err = ext4_fname_prepare_lookup(dir, dentry, &fname); in ext4_lookup_entry()
1616 bh = __ext4_find_entry(dir, &fname, res_dir, NULL); in ext4_lookup_entry()
1622 static struct buffer_head * ext4_dx_find_entry(struct inode *dir, in ext4_dx_find_entry() argument
1626 struct super_block * sb = dir->i_sb; in ext4_dx_find_entry()
1635 frame = dx_probe(fname, dir, NULL, frames); in ext4_dx_find_entry()
1640 bh = ext4_read_dirblock(dir, block, DIRENT_HTREE); in ext4_dx_find_entry()
1644 retval = search_dirblock(bh, dir, fname, in ext4_dx_find_entry()
1656 retval = ext4_htree_next_block(dir, fname->hinfo.hash, frame, in ext4_dx_find_entry()
1659 ext4_warning_inode(dir, in ext4_dx_find_entry()
1675 static struct dentry *ext4_lookup(struct inode *dir, struct dentry *dentry, unsigned int flags) in ext4_lookup() argument
1684 bh = ext4_lookup_entry(dir, dentry, &de); in ext4_lookup()
1691 if (!ext4_valid_inum(dir->i_sb, ino)) { in ext4_lookup()
1692 EXT4_ERROR_INODE(dir, "bad inode number: %u", ino); in ext4_lookup()
1695 if (unlikely(ino == dir->i_ino)) { in ext4_lookup()
1696 EXT4_ERROR_INODE(dir, "'%pd' linked to parent dir", in ext4_lookup()
1700 inode = ext4_iget(dir->i_sb, ino, EXT4_IGET_NORMAL); in ext4_lookup()
1702 EXT4_ERROR_INODE(dir, in ext4_lookup()
1707 if (!IS_ERR(inode) && IS_ENCRYPTED(dir) && in ext4_lookup()
1709 !fscrypt_has_permitted_context(dir, inode)) { in ext4_lookup()
1712 dir->i_ino, inode->i_ino); in ext4_lookup()
1719 if (!inode && IS_CASEFOLDED(dir)) { in ext4_lookup()
1810 static struct ext4_dir_entry_2 *do_split(handle_t *handle, struct inode *dir, in do_split() argument
1814 unsigned blocksize = dir->i_sb->s_blocksize; in do_split()
1826 if (ext4_has_metadata_csum(dir->i_sb)) in do_split()
1829 bh2 = ext4_append(handle, dir, &newblock); in do_split()
1850 count = dx_make_map(dir, (struct ext4_dir_entry_2 *) data1, in do_split()
1887 dxtrace(dx_show_leaf(dir, hinfo, (struct ext4_dir_entry_2 *) data1, in do_split()
1889 dxtrace(dx_show_leaf(dir, hinfo, (struct ext4_dir_entry_2 *) data2, in do_split()
1898 err = ext4_handle_dirty_dirblock(handle, dir, bh2); in do_split()
1901 err = ext4_handle_dirty_dx_node(handle, dir, frame->bh); in do_split()
1912 ext4_std_error(dir->i_sb, err); in do_split()
1916 int ext4_find_dest_de(struct inode *dir, struct inode *inode, in ext4_find_dest_de() argument
1931 if (ext4_check_dir_entry(dir, NULL, de, bh, in ext4_find_dest_de()
1934 if (ext4_match(dir, fname, de)) in ext4_find_dest_de()
1983 struct inode *dir, in add_dirent_to_buf() argument
1987 unsigned int blocksize = dir->i_sb->s_blocksize; in add_dirent_to_buf()
1995 err = ext4_find_dest_de(dir, inode, bh, bh->b_data, in add_dirent_to_buf()
2003 ext4_std_error(dir->i_sb, err); in add_dirent_to_buf()
2021 dir->i_mtime = dir->i_ctime = current_time(dir); in add_dirent_to_buf()
2022 ext4_update_dx_flag(dir); in add_dirent_to_buf()
2023 inode_inc_iversion(dir); in add_dirent_to_buf()
2024 ext4_mark_inode_dirty(handle, dir); in add_dirent_to_buf()
2026 err = ext4_handle_dirty_dirblock(handle, dir, bh); in add_dirent_to_buf()
2028 ext4_std_error(dir->i_sb, err); in add_dirent_to_buf()
2037 struct inode *dir, in make_indexed_dir() argument
2056 blocksize = dir->i_sb->s_blocksize; in make_indexed_dir()
2057 dxtrace(printk(KERN_DEBUG "Creating index: inode %lu\n", dir->i_ino)); in make_indexed_dir()
2061 ext4_std_error(dir->i_sb, retval); in make_indexed_dir()
2072 EXT4_ERROR_INODE(dir, "invalid rec_len for '..'"); in make_indexed_dir()
2079 bh2 = ext4_append(handle, dir, &block); in make_indexed_dir()
2084 ext4_set_inode_flag(dir, EXT4_INODE_INDEX); in make_indexed_dir()
2104 root->info.hash_version = EXT4_SB(dir->i_sb)->s_def_hash_version; in make_indexed_dir()
2108 dx_set_limit(entries, dx_root_limit(dir, sizeof(root->info))); in make_indexed_dir()
2113 fname->hinfo.hash_version += EXT4_SB(dir->i_sb)->s_hash_unsigned; in make_indexed_dir()
2114 fname->hinfo.seed = EXT4_SB(dir->i_sb)->s_hash_seed; in make_indexed_dir()
2115 ext4fs_dirhash(dir, fname_name(fname), fname_len(fname), &fname->hinfo); in make_indexed_dir()
2123 retval = ext4_handle_dirty_dx_node(handle, dir, frame->bh); in make_indexed_dir()
2126 retval = ext4_handle_dirty_dirblock(handle, dir, bh2); in make_indexed_dir()
2130 de = do_split(handle,dir, &bh2, frame, &fname->hinfo); in make_indexed_dir()
2136 retval = add_dirent_to_buf(handle, fname, dir, inode, de, bh2); in make_indexed_dir()
2144 ext4_mark_inode_dirty(handle, dir); in make_indexed_dir()
2163 struct inode *dir = d_inode(dentry->d_parent); in ext4_add_entry() local
2178 sb = dir->i_sb; in ext4_add_entry()
2185 if (ext4_has_strict_mode(sbi) && IS_CASEFOLDED(dir) && in ext4_add_entry()
2190 retval = ext4_fname_setup_filename(dir, &dentry->d_name, 0, &fname); in ext4_add_entry()
2194 if (ext4_has_inline_data(dir)) { in ext4_add_entry()
2195 retval = ext4_try_add_inline_entry(handle, &fname, dir, inode); in ext4_add_entry()
2204 if (is_dx(dir)) { in ext4_add_entry()
2205 retval = ext4_dx_add_entry(handle, &fname, dir, inode); in ext4_add_entry()
2208 ext4_clear_inode_flag(dir, EXT4_INODE_INDEX); in ext4_add_entry()
2210 ext4_mark_inode_dirty(handle, dir); in ext4_add_entry()
2212 blocks = dir->i_size >> sb->s_blocksize_bits; in ext4_add_entry()
2214 bh = ext4_read_dirblock(dir, block, DIRENT); in ext4_add_entry()
2216 bh = ext4_bread(handle, dir, block, in ext4_add_entry()
2225 retval = add_dirent_to_buf(handle, &fname, dir, inode, in ext4_add_entry()
2232 retval = make_indexed_dir(handle, &fname, dir, in ext4_add_entry()
2239 bh = ext4_append(handle, dir, &block); in ext4_add_entry()
2253 retval = add_dirent_to_buf(handle, &fname, dir, inode, de, bh); in ext4_add_entry()
2266 struct inode *dir, struct inode *inode) in ext4_dx_add_entry() argument
2271 struct super_block *sb = dir->i_sb; in ext4_dx_add_entry()
2278 frame = dx_probe(fname, dir, NULL, frames); in ext4_dx_add_entry()
2283 bh = ext4_read_dirblock(dir, dx_get_block(frame->at), DIRENT_HTREE); in ext4_dx_add_entry()
2295 err = add_dirent_to_buf(handle, fname, dir, inode, NULL, bh); in ext4_dx_add_entry()
2327 dir->i_ino, levels); in ext4_dx_add_entry()
2337 bh2 = ext4_append(handle, dir, &newblock); in ext4_dx_add_entry()
2367 dx_set_limit(entries2, dx_node_limit(dir)); in ext4_dx_add_entry()
2379 err = ext4_handle_dirty_dx_node(handle, dir, bh2); in ext4_dx_add_entry()
2383 err = ext4_handle_dirty_dx_node(handle, dir, in ext4_dx_add_entry()
2388 err = ext4_handle_dirty_dx_node(handle, dir, in ext4_dx_add_entry()
2396 dx_set_limit(entries2, dx_node_limit(dir)); in ext4_dx_add_entry()
2406 err = ext4_handle_dirty_dx_node(handle, dir, frame->bh); in ext4_dx_add_entry()
2409 err = ext4_handle_dirty_dx_node(handle, dir, bh2); in ext4_dx_add_entry()
2415 de = do_split(handle, dir, &bh, frame, &fname->hinfo); in ext4_dx_add_entry()
2420 err = add_dirent_to_buf(handle, fname, dir, inode, de, bh); in ext4_dx_add_entry()
2424 ext4_std_error(dir->i_sb, err); /* this is a no-op if err == 0 */ in ext4_dx_add_entry()
2441 struct inode *dir, in ext4_generic_delete_entry() argument
2449 unsigned int blocksize = dir->i_sb->s_blocksize; in ext4_generic_delete_entry()
2456 if (ext4_check_dir_entry(dir, NULL, de, bh, in ext4_generic_delete_entry()
2469 inode_inc_iversion(dir); in ext4_generic_delete_entry()
2480 struct inode *dir, in ext4_delete_entry() argument
2486 if (ext4_has_inline_data(dir)) { in ext4_delete_entry()
2488 err = ext4_delete_inline_entry(handle, dir, de_del, bh, in ext4_delete_entry()
2494 if (ext4_has_metadata_csum(dir->i_sb)) in ext4_delete_entry()
2502 err = ext4_generic_delete_entry(handle, dir, de_del, in ext4_delete_entry()
2504 dir->i_sb->s_blocksize, csum_size); in ext4_delete_entry()
2509 err = ext4_handle_dirty_dirblock(handle, dir, bh); in ext4_delete_entry()
2516 ext4_std_error(dir->i_sb, err); in ext4_delete_entry()
2573 static int ext4_create(struct inode *dir, struct dentry *dentry, umode_t mode, in ext4_create() argument
2580 err = dquot_initialize(dir); in ext4_create()
2584 credits = (EXT4_DATA_TRANS_BLOCKS(dir->i_sb) + in ext4_create()
2587 inode = ext4_new_inode_start_handle(dir, mode, &dentry->d_name, 0, in ext4_create()
2596 if (!err && IS_DIRSYNC(dir)) in ext4_create()
2601 if (err == -ENOSPC && ext4_should_retry_alloc(dir->i_sb, &retries)) in ext4_create()
2606 static int ext4_mknod(struct inode *dir, struct dentry *dentry, in ext4_mknod() argument
2613 err = dquot_initialize(dir); in ext4_mknod()
2617 credits = (EXT4_DATA_TRANS_BLOCKS(dir->i_sb) + in ext4_mknod()
2620 inode = ext4_new_inode_start_handle(dir, mode, &dentry->d_name, 0, in ext4_mknod()
2628 if (!err && IS_DIRSYNC(dir)) in ext4_mknod()
2633 if (err == -ENOSPC && ext4_should_retry_alloc(dir->i_sb, &retries)) in ext4_mknod()
2638 static int ext4_tmpfile(struct inode *dir, struct dentry *dentry, umode_t mode) in ext4_tmpfile() argument
2644 err = dquot_initialize(dir); in ext4_tmpfile()
2649 inode = ext4_new_inode_start_handle(dir, mode, in ext4_tmpfile()
2652 EXT4_MAXQUOTAS_INIT_BLOCKS(dir->i_sb) + in ext4_tmpfile()
2669 if (err == -ENOSPC && ext4_should_retry_alloc(dir->i_sb, &retries)) in ext4_tmpfile()
2706 static int ext4_init_new_dir(handle_t *handle, struct inode *dir, in ext4_init_new_dir() argument
2712 unsigned int blocksize = dir->i_sb->s_blocksize; in ext4_init_new_dir()
2716 if (ext4_has_metadata_csum(dir->i_sb)) in ext4_init_new_dir()
2720 err = ext4_try_create_inline_dir(handle, dir, inode); in ext4_init_new_dir()
2732 ext4_init_dot_dotdot(inode, de, blocksize, csum_size, dir->i_ino, 0); in ext4_init_new_dir()
2747 static int ext4_mkdir(struct inode *dir, struct dentry *dentry, umode_t mode) in ext4_mkdir() argument
2753 if (EXT4_DIR_LINK_MAX(dir)) in ext4_mkdir()
2756 err = dquot_initialize(dir); in ext4_mkdir()
2760 credits = (EXT4_DATA_TRANS_BLOCKS(dir->i_sb) + in ext4_mkdir()
2763 inode = ext4_new_inode_start_handle(dir, S_IFDIR | mode, in ext4_mkdir()
2773 err = ext4_init_new_dir(handle, dir, inode); in ext4_mkdir()
2787 ext4_inc_count(handle, dir); in ext4_mkdir()
2788 ext4_update_dx_flag(dir); in ext4_mkdir()
2789 err = ext4_mark_inode_dirty(handle, dir); in ext4_mkdir()
2793 if (IS_DIRSYNC(dir)) in ext4_mkdir()
2799 if (err == -ENOSPC && ext4_should_retry_alloc(dir->i_sb, &retries)) in ext4_mkdir()
3053 static int ext4_rmdir(struct inode *dir, struct dentry *dentry) in ext4_rmdir() argument
3061 if (unlikely(ext4_forced_shutdown(EXT4_SB(dir->i_sb)))) in ext4_rmdir()
3066 retval = dquot_initialize(dir); in ext4_rmdir()
3074 bh = ext4_find_entry(dir, &dentry->d_name, &de, NULL); in ext4_rmdir()
3090 handle = ext4_journal_start(dir, EXT4_HT_DIR, in ext4_rmdir()
3091 EXT4_DATA_TRANS_BLOCKS(dir->i_sb)); in ext4_rmdir()
3098 if (IS_DIRSYNC(dir)) in ext4_rmdir()
3101 retval = ext4_delete_entry(handle, dir, de, bh); in ext4_rmdir()
3116 inode->i_ctime = dir->i_ctime = dir->i_mtime = current_time(inode); in ext4_rmdir()
3118 ext4_dec_count(handle, dir); in ext4_rmdir()
3119 ext4_update_dx_flag(dir); in ext4_rmdir()
3120 ext4_mark_inode_dirty(handle, dir); in ext4_rmdir()
3129 if (IS_CASEFOLDED(dir)) in ext4_rmdir()
3140 static int ext4_unlink(struct inode *dir, struct dentry *dentry) in ext4_unlink() argument
3148 if (unlikely(ext4_forced_shutdown(EXT4_SB(dir->i_sb)))) in ext4_unlink()
3151 trace_ext4_unlink_enter(dir, dentry); in ext4_unlink()
3154 retval = dquot_initialize(dir); in ext4_unlink()
3162 bh = ext4_find_entry(dir, &dentry->d_name, &de, NULL); in ext4_unlink()
3174 handle = ext4_journal_start(dir, EXT4_HT_DIR, in ext4_unlink()
3175 EXT4_DATA_TRANS_BLOCKS(dir->i_sb)); in ext4_unlink()
3182 if (IS_DIRSYNC(dir)) in ext4_unlink()
3190 retval = ext4_delete_entry(handle, dir, de, bh); in ext4_unlink()
3193 dir->i_ctime = dir->i_mtime = current_time(dir); in ext4_unlink()
3194 ext4_update_dx_flag(dir); in ext4_unlink()
3195 ext4_mark_inode_dirty(handle, dir); in ext4_unlink()
3209 if (IS_CASEFOLDED(dir)) in ext4_unlink()
3221 static int ext4_symlink(struct inode *dir, in ext4_symlink() argument
3230 if (unlikely(ext4_forced_shutdown(EXT4_SB(dir->i_sb)))) in ext4_symlink()
3233 err = fscrypt_prepare_symlink(dir, symname, len, dir->i_sb->s_blocksize, in ext4_symlink()
3238 err = dquot_initialize(dir); in ext4_symlink()
3249 credits = 4 + EXT4_MAXQUOTAS_INIT_BLOCKS(dir->i_sb) + in ext4_symlink()
3258 credits = EXT4_DATA_TRANS_BLOCKS(dir->i_sb) + in ext4_symlink()
3262 inode = ext4_new_inode_start_handle(dir, S_IFLNK|S_IRWXUGO, in ext4_symlink()
3307 handle = ext4_journal_start(dir, EXT4_HT_DIR, in ext4_symlink()
3308 EXT4_DATA_TRANS_BLOCKS(dir->i_sb) + in ext4_symlink()
3332 if (!err && IS_DIRSYNC(dir)) in ext4_symlink()
3352 struct inode *dir, struct dentry *dentry) in ext4_link() argument
3361 err = fscrypt_prepare_link(old_dentry, dir, dentry); in ext4_link()
3365 if ((ext4_test_inode_flag(dir, EXT4_INODE_PROJINHERIT)) && in ext4_link()
3366 (!projid_eq(EXT4_I(dir)->i_projid, in ext4_link()
3370 err = dquot_initialize(dir); in ext4_link()
3375 handle = ext4_journal_start(dir, EXT4_HT_DIR, in ext4_link()
3376 (EXT4_DATA_TRANS_BLOCKS(dir->i_sb) + in ext4_link()
3381 if (IS_DIRSYNC(dir)) in ext4_link()
3402 if (err == -ENOSPC && ext4_should_retry_alloc(dir->i_sb, &retries)) in ext4_link()
3441 struct inode *dir; member
3467 if (le32_to_cpu(ent->parent_de->inode) != ent->dir->i_ino) in ext4_rename_dir_prepare()
3493 ext4_std_error(ent->dir->i_sb, retval); in ext4_rename_dir_finish()
3509 if (ext4_has_feature_filetype(ent->dir->i_sb)) in ext4_setent()
3511 inode_inc_iversion(ent->dir); in ext4_setent()
3512 ent->dir->i_ctime = ent->dir->i_mtime = in ext4_setent()
3513 current_time(ent->dir); in ext4_setent()
3514 ext4_mark_inode_dirty(handle, ent->dir); in ext4_setent()
3517 retval = ext4_handle_dirty_dirblock(handle, ent->dir, ent->bh); in ext4_setent()
3519 ext4_std_error(ent->dir->i_sb, retval); in ext4_setent()
3529 static int ext4_find_delete_entry(handle_t *handle, struct inode *dir, in ext4_find_delete_entry() argument
3536 bh = ext4_find_entry(dir, d_name, &de, NULL); in ext4_find_delete_entry()
3540 retval = ext4_delete_entry(handle, dir, de, bh); in ext4_find_delete_entry()
3561 retval = ext4_find_delete_entry(handle, ent->dir, in ext4_rename_delete()
3564 retval = ext4_delete_entry(handle, ent->dir, ent->de, ent->bh); in ext4_rename_delete()
3566 retval = ext4_find_delete_entry(handle, ent->dir, in ext4_rename_delete()
3572 ext4_warning_inode(ent->dir, in ext4_rename_delete()
3574 ent->dir->i_nlink, retval); in ext4_rename_delete()
3582 ext4_dec_count(handle, ent->dir); in ext4_update_dir_count()
3584 ext4_inc_count(handle, ent->dir); in ext4_update_dir_count()
3585 ext4_mark_inode_dirty(handle, ent->dir); in ext4_update_dir_count()
3600 credits += (EXT4_MAXQUOTAS_TRANS_BLOCKS(ent->dir->i_sb) + in ext4_whiteout_for_rename()
3603 wh = ext4_new_inode_start_handle(ent->dir, S_IFCHR | WHITEOUT_MODE, in ext4_whiteout_for_rename()
3612 ext4_should_retry_alloc(ent->dir->i_sb, &retries)) in ext4_whiteout_for_rename()
3636 .dir = old_dir, in ext4_rename()
3641 .dir = new_dir, in ext4_rename()
3662 retval = dquot_initialize(old.dir); in ext4_rename()
3665 retval = dquot_initialize(new.dir); in ext4_rename()
3677 old.bh = ext4_find_entry(old.dir, &old.dentry->d_name, &old.de, NULL); in ext4_rename()
3690 new.bh = ext4_find_entry(new.dir, &new.dentry->d_name, in ext4_rename()
3703 if (new.inode && !test_opt(new.dir->i_sb, NO_AUTO_DA_ALLOC)) in ext4_rename()
3706 credits = (2 * EXT4_DATA_TRANS_BLOCKS(old.dir->i_sb) + in ext4_rename()
3709 handle = ext4_journal_start(old.dir, EXT4_HT_DIR, credits); in ext4_rename()
3724 if (IS_DIRSYNC(old.dir) || IS_DIRSYNC(new.dir)) in ext4_rename()
3734 if (new.dir != old.dir && EXT4_DIR_LINK_MAX(new.dir)) in ext4_rename()
3748 force_reread = (new.dir->i_ino == old.dir->i_ino && in ext4_rename()
3749 ext4_test_inode_flag(new.dir, EXT4_INODE_INLINE_DATA)); in ext4_rename()
3774 force_reread = !ext4_test_inode_flag(new.dir, in ext4_rename()
3795 old.dir->i_ctime = old.dir->i_mtime = current_time(old.dir); in ext4_rename()
3796 ext4_update_dx_flag(old.dir); in ext4_rename()
3798 retval = ext4_rename_dir_finish(handle, &old, new.dir->i_ino); in ext4_rename()
3802 ext4_dec_count(handle, old.dir); in ext4_rename()
3809 ext4_inc_count(handle, new.dir); in ext4_rename()
3810 ext4_update_dx_flag(new.dir); in ext4_rename()
3811 ext4_mark_inode_dirty(handle, new.dir); in ext4_rename()
3814 ext4_mark_inode_dirty(handle, old.dir); in ext4_rename()
3842 .dir = old_dir, in ext4_cross_rename()
3847 .dir = new_dir, in ext4_cross_rename()
3863 retval = dquot_initialize(old.dir); in ext4_cross_rename()
3866 retval = dquot_initialize(new.dir); in ext4_cross_rename()
3870 old.bh = ext4_find_entry(old.dir, &old.dentry->d_name, in ext4_cross_rename()
3884 new.bh = ext4_find_entry(new.dir, &new.dentry->d_name, in ext4_cross_rename()
3896 handle = ext4_journal_start(old.dir, EXT4_HT_DIR, in ext4_cross_rename()
3897 (2 * EXT4_DATA_TRANS_BLOCKS(old.dir->i_sb) + in ext4_cross_rename()
3905 if (IS_DIRSYNC(old.dir) || IS_DIRSYNC(new.dir)) in ext4_cross_rename()
3925 if (old.dir != new.dir && old.is_dir != new.is_dir) { in ext4_cross_rename()
3929 if ((old.dir_nlink_delta > 0 && EXT4_DIR_LINK_MAX(old.dir)) || in ext4_cross_rename()
3930 (new.dir_nlink_delta > 0 && EXT4_DIR_LINK_MAX(new.dir))) in ext4_cross_rename()
3954 retval = ext4_rename_dir_finish(handle, &old, new.dir->i_ino); in ext4_cross_rename()
3959 retval = ext4_rename_dir_finish(handle, &new, old.dir->i_ino); in ext4_cross_rename()