Lines Matching refs:dir
276 static unsigned dx_root_limit(struct inode *dir, unsigned infosize);
277 static unsigned dx_node_limit(struct inode *dir);
279 struct inode *dir,
283 static int dx_make_map(struct inode *dir, struct buffer_head *bh,
292 static int ext4_htree_next_block(struct inode *dir, __u32 hash,
296 static struct buffer_head * ext4_dx_find_entry(struct inode *dir,
300 struct inode *dir, struct inode *inode);
579 static inline unsigned dx_root_limit(struct inode *dir, unsigned infosize) in dx_root_limit() argument
581 unsigned entry_space = dir->i_sb->s_blocksize - EXT4_DIR_REC_LEN(1) - in dx_root_limit()
584 if (ext4_has_metadata_csum(dir->i_sb)) in dx_root_limit()
589 static inline unsigned dx_node_limit(struct inode *dir) in dx_node_limit() argument
591 unsigned entry_space = dir->i_sb->s_blocksize - EXT4_DIR_REC_LEN(0); in dx_node_limit()
593 if (ext4_has_metadata_csum(dir->i_sb)) in dx_node_limit()
621 static struct stats dx_show_leaf(struct inode *dir, in dx_show_leaf() argument
646 if (IS_ENCRYPTED(dir)) in dx_show_leaf()
647 res = fscrypt_get_encryption_info(dir); in dx_show_leaf()
652 if (!fscrypt_has_encryption_key(dir)) { in dx_show_leaf()
654 ext4fs_dirhash(dir, de->name, in dx_show_leaf()
672 res = fscrypt_fname_disk_to_usr(dir, in dx_show_leaf()
686 ext4fs_dirhash(dir, de->name, in dx_show_leaf()
697 ext4fs_dirhash(dir, de->name, de->name_len, &h); in dx_show_leaf()
711 struct stats dx_show_entries(struct dx_hash_info *hinfo, struct inode *dir, in dx_show_entries() argument
714 unsigned blocksize = dir->i_sb->s_blocksize; in dx_show_entries()
726 bh = ext4_bread(NULL,dir, block, 0); in dx_show_entries()
730 dx_show_entries(hinfo, dir, ((struct dx_node *) bh->b_data)->entries, levels - 1): in dx_show_entries()
731 dx_show_leaf(dir, hinfo, (struct ext4_dir_entry_2 *) in dx_show_entries()
756 dx_probe(struct ext4_filename *fname, struct inode *dir, in dx_probe() argument
769 frame->bh = ext4_read_dirblock(dir, 0, INDEX); in dx_probe()
777 ext4_warning_inode(dir, "Unrecognised inode hash code %u", in dx_probe()
785 hinfo->hash_version += EXT4_SB(dir->i_sb)->s_hash_unsigned; in dx_probe()
786 hinfo->seed = EXT4_SB(dir->i_sb)->s_hash_seed; in dx_probe()
788 ext4fs_dirhash(dir, fname_name(fname), fname_len(fname), hinfo); in dx_probe()
792 ext4_warning_inode(dir, "Unimplemented hash flags: %#06x", in dx_probe()
798 if (indirect >= ext4_dir_htree_level(dir->i_sb)) { in dx_probe()
799 ext4_warning(dir->i_sb, in dx_probe()
801 "supported value", dir->i_ino, in dx_probe()
802 ext4_dir_htree_level(dir->i_sb)); in dx_probe()
803 if (ext4_dir_htree_level(dir->i_sb) < EXT4_HTREE_LEVEL) { in dx_probe()
804 ext4_warning(dir->i_sb, "Enable large directory " in dx_probe()
813 if (dx_get_limit(entries) != dx_root_limit(dir, in dx_probe()
815 ext4_warning_inode(dir, "dx entry: limit %u != root limit %u", in dx_probe()
817 dx_root_limit(dir, root->info.info_length)); in dx_probe()
827 ext4_warning_inode(dir, in dx_probe()
869 ext4_warning_inode(dir, in dx_probe()
879 frame->bh = ext4_read_dirblock(dir, block, INDEX); in dx_probe()
888 if (dx_get_limit(entries) != dx_node_limit(dir)) { in dx_probe()
889 ext4_warning_inode(dir, in dx_probe()
891 dx_get_limit(entries), dx_node_limit(dir)); in dx_probe()
902 ext4_warning_inode(dir, in dx_probe()
944 static int ext4_htree_next_block(struct inode *dir, __u32 hash, in ext4_htree_next_block() argument
990 bh = ext4_read_dirblock(dir, dx_get_block(p->at), INDEX); in ext4_htree_next_block()
1008 struct inode *dir, ext4_lblk_t block, in htree_dirblock_to_tree() argument
1019 bh = ext4_read_dirblock(dir, block, DIRENT_HTREE); in htree_dirblock_to_tree()
1025 dir->i_sb->s_blocksize - in htree_dirblock_to_tree()
1028 if (IS_ENCRYPTED(dir)) { in htree_dirblock_to_tree()
1029 err = fscrypt_get_encryption_info(dir); in htree_dirblock_to_tree()
1042 for (; de < top; de = ext4_next_entry(de, dir->i_sb->s_blocksize)) { in htree_dirblock_to_tree()
1043 if (ext4_check_dir_entry(dir, NULL, de, bh, in htree_dirblock_to_tree()
1045 (block<<EXT4_BLOCK_SIZE_BITS(dir->i_sb)) in htree_dirblock_to_tree()
1050 ext4fs_dirhash(dir, de->name, de->name_len, hinfo); in htree_dirblock_to_tree()
1057 if (!IS_ENCRYPTED(dir)) { in htree_dirblock_to_tree()
1069 err = fscrypt_fname_disk_to_usr(dir, hinfo->hash, in htree_dirblock_to_tree()
1108 struct inode *dir; in ext4_htree_fill_tree() local
1117 dir = file_inode(dir_file); in ext4_htree_fill_tree()
1118 if (!(ext4_test_inode_flag(dir, EXT4_INODE_INDEX))) { in ext4_htree_fill_tree()
1119 hinfo.hash_version = EXT4_SB(dir->i_sb)->s_def_hash_version; in ext4_htree_fill_tree()
1122 EXT4_SB(dir->i_sb)->s_hash_unsigned; in ext4_htree_fill_tree()
1123 hinfo.seed = EXT4_SB(dir->i_sb)->s_hash_seed; in ext4_htree_fill_tree()
1124 if (ext4_has_inline_data(dir)) { in ext4_htree_fill_tree()
1126 count = ext4_inlinedir_to_tree(dir_file, dir, 0, in ext4_htree_fill_tree()
1135 count = htree_dirblock_to_tree(dir_file, dir, 0, &hinfo, in ext4_htree_fill_tree()
1142 frame = dx_probe(NULL, dir, &hinfo, frames); in ext4_htree_fill_tree()
1159 de = ext4_next_entry(de, dir->i_sb->s_blocksize); in ext4_htree_fill_tree()
1176 ret = htree_dirblock_to_tree(dir_file, dir, block, &hinfo, in ext4_htree_fill_tree()
1184 ret = ext4_htree_next_block(dir, HASH_NB_ALWAYS, in ext4_htree_fill_tree()
1210 struct inode *dir, in search_dirblock() argument
1215 return ext4_search_dir(bh, bh->b_data, dir->i_sb->s_blocksize, dir, in search_dirblock()
1227 static int dx_make_map(struct inode *dir, struct buffer_head *bh, in dx_make_map() argument
1237 if (ext4_has_metadata_csum(dir->i_sb)) in dx_make_map()
1241 if (ext4_check_dir_entry(dir, NULL, de, bh, base, buflen, in dx_make_map()
1245 ext4fs_dirhash(dir, de->name, de->name_len, &h); in dx_make_map()
1253 de = ext4_next_entry(de, dir->i_sb->s_blocksize); in dx_make_map()
1336 void ext4_fname_setup_ci_filename(struct inode *dir, const struct qstr *iname, in ext4_fname_setup_ci_filename() argument
1341 if (!IS_CASEFOLDED(dir) || !dir->i_sb->s_encoding) { in ext4_fname_setup_ci_filename()
1350 len = utf8_casefold(dir->i_sb->s_encoding, in ext4_fname_setup_ci_filename()
1405 struct inode *dir, struct ext4_filename *fname, in ext4_search_dir() argument
1418 ext4_match(dir, fname, de)) { in ext4_search_dir()
1421 if (ext4_check_dir_entry(dir, NULL, de, bh, search_buf, in ext4_search_dir()
1429 dir->i_sb->s_blocksize); in ext4_search_dir()
1438 static int is_dx_internal_node(struct inode *dir, ext4_lblk_t block, in is_dx_internal_node() argument
1441 struct super_block *sb = dir->i_sb; in is_dx_internal_node()
1443 if (!is_dx(dir)) in is_dx_internal_node()
1465 static struct buffer_head *__ext4_find_entry(struct inode *dir, in __ext4_find_entry() argument
1483 sb = dir->i_sb; in __ext4_find_entry()
1488 if (ext4_has_inline_data(dir)) { in __ext4_find_entry()
1490 ret = ext4_find_inline_entry(dir, fname, res_dir, in __ext4_find_entry()
1509 if (is_dx(dir)) { in __ext4_find_entry()
1510 ret = ext4_dx_find_entry(dir, fname, res_dir); in __ext4_find_entry()
1522 nblocks = dir->i_size >> EXT4_BLOCK_SIZE_BITS(sb); in __ext4_find_entry()
1527 start = EXT4_I(dir)->i_dir_start_lookup; in __ext4_find_entry()
1545 retval = ext4_bread_batch(dir, block, ra_max, in __ext4_find_entry()
1557 EXT4_ERROR_INODE_ERR(dir, EIO, in __ext4_find_entry()
1565 !is_dx_internal_node(dir, block, in __ext4_find_entry()
1567 !ext4_dirblock_csum_verify(dir, bh)) { in __ext4_find_entry()
1568 EXT4_ERROR_INODE_ERR(dir, EFSBADCRC, in __ext4_find_entry()
1576 i = search_dirblock(bh, dir, fname, in __ext4_find_entry()
1579 EXT4_I(dir)->i_dir_start_lookup = block; in __ext4_find_entry()
1597 nblocks = dir->i_size >> EXT4_BLOCK_SIZE_BITS(sb); in __ext4_find_entry()
1610 static struct buffer_head *ext4_find_entry(struct inode *dir, in ext4_find_entry() argument
1619 err = ext4_fname_setup_filename(dir, d_name, 1, &fname); in ext4_find_entry()
1625 bh = __ext4_find_entry(dir, &fname, res_dir, inlined); in ext4_find_entry()
1631 static struct buffer_head *ext4_lookup_entry(struct inode *dir, in ext4_lookup_entry() argument
1639 err = ext4_fname_prepare_lookup(dir, dentry, &fname); in ext4_lookup_entry()
1645 bh = __ext4_find_entry(dir, &fname, res_dir, NULL); in ext4_lookup_entry()
1651 static struct buffer_head * ext4_dx_find_entry(struct inode *dir, in ext4_dx_find_entry() argument
1655 struct super_block * sb = dir->i_sb; in ext4_dx_find_entry()
1664 frame = dx_probe(fname, dir, NULL, frames); in ext4_dx_find_entry()
1669 bh = ext4_read_dirblock(dir, block, DIRENT_HTREE); in ext4_dx_find_entry()
1673 retval = search_dirblock(bh, dir, fname, in ext4_dx_find_entry()
1685 retval = ext4_htree_next_block(dir, fname->hinfo.hash, frame, in ext4_dx_find_entry()
1688 ext4_warning_inode(dir, in ext4_dx_find_entry()
1704 static struct dentry *ext4_lookup(struct inode *dir, struct dentry *dentry, unsigned int flags) in ext4_lookup() argument
1713 bh = ext4_lookup_entry(dir, dentry, &de); in ext4_lookup()
1720 if (!ext4_valid_inum(dir->i_sb, ino)) { in ext4_lookup()
1721 EXT4_ERROR_INODE(dir, "bad inode number: %u", ino); in ext4_lookup()
1724 if (unlikely(ino == dir->i_ino)) { in ext4_lookup()
1725 EXT4_ERROR_INODE(dir, "'%pd' linked to parent dir", in ext4_lookup()
1729 inode = ext4_iget(dir->i_sb, ino, EXT4_IGET_NORMAL); in ext4_lookup()
1731 EXT4_ERROR_INODE(dir, in ext4_lookup()
1736 if (!IS_ERR(inode) && IS_ENCRYPTED(dir) && in ext4_lookup()
1738 !fscrypt_has_permitted_context(dir, inode)) { in ext4_lookup()
1741 dir->i_ino, inode->i_ino); in ext4_lookup()
1748 if (!inode && IS_CASEFOLDED(dir)) { in ext4_lookup()
1846 static struct ext4_dir_entry_2 *do_split(handle_t *handle, struct inode *dir, in do_split() argument
1850 unsigned blocksize = dir->i_sb->s_blocksize; in do_split()
1862 if (ext4_has_metadata_csum(dir->i_sb)) in do_split()
1865 bh2 = ext4_append(handle, dir, &newblock); in do_split()
1886 count = dx_make_map(dir, *bh, hinfo, map); in do_split()
1936 dxtrace(dx_show_leaf(dir, hinfo, (struct ext4_dir_entry_2 *) data1, in do_split()
1938 dxtrace(dx_show_leaf(dir, hinfo, (struct ext4_dir_entry_2 *) data2, in do_split()
1947 err = ext4_handle_dirty_dirblock(handle, dir, bh2); in do_split()
1950 err = ext4_handle_dirty_dx_node(handle, dir, frame->bh); in do_split()
1961 ext4_std_error(dir->i_sb, err); in do_split()
1965 int ext4_find_dest_de(struct inode *dir, struct inode *inode, in ext4_find_dest_de() argument
1980 if (ext4_check_dir_entry(dir, NULL, de, bh, in ext4_find_dest_de()
1983 if (ext4_match(dir, fname, de)) in ext4_find_dest_de()
2032 struct inode *dir, in add_dirent_to_buf() argument
2036 unsigned int blocksize = dir->i_sb->s_blocksize; in add_dirent_to_buf()
2044 err = ext4_find_dest_de(dir, inode, bh, bh->b_data, in add_dirent_to_buf()
2052 ext4_std_error(dir->i_sb, err); in add_dirent_to_buf()
2070 dir->i_mtime = dir->i_ctime = current_time(dir); in add_dirent_to_buf()
2071 ext4_update_dx_flag(dir); in add_dirent_to_buf()
2072 inode_inc_iversion(dir); in add_dirent_to_buf()
2073 err2 = ext4_mark_inode_dirty(handle, dir); in add_dirent_to_buf()
2075 err = ext4_handle_dirty_dirblock(handle, dir, bh); in add_dirent_to_buf()
2077 ext4_std_error(dir->i_sb, err); in add_dirent_to_buf()
2086 struct inode *dir, in make_indexed_dir() argument
2105 blocksize = dir->i_sb->s_blocksize; in make_indexed_dir()
2106 dxtrace(printk(KERN_DEBUG "Creating index: inode %lu\n", dir->i_ino)); in make_indexed_dir()
2110 ext4_std_error(dir->i_sb, retval); in make_indexed_dir()
2121 EXT4_ERROR_INODE(dir, "invalid rec_len for '..'"); in make_indexed_dir()
2128 bh2 = ext4_append(handle, dir, &block); in make_indexed_dir()
2133 ext4_set_inode_flag(dir, EXT4_INODE_INDEX); in make_indexed_dir()
2154 root->info.hash_version = EXT4_SB(dir->i_sb)->s_def_hash_version; in make_indexed_dir()
2158 dx_set_limit(entries, dx_root_limit(dir, sizeof(root->info))); in make_indexed_dir()
2163 fname->hinfo.hash_version += EXT4_SB(dir->i_sb)->s_hash_unsigned; in make_indexed_dir()
2164 fname->hinfo.seed = EXT4_SB(dir->i_sb)->s_hash_seed; in make_indexed_dir()
2165 ext4fs_dirhash(dir, fname_name(fname), fname_len(fname), &fname->hinfo); in make_indexed_dir()
2173 retval = ext4_handle_dirty_dx_node(handle, dir, frame->bh); in make_indexed_dir()
2176 retval = ext4_handle_dirty_dirblock(handle, dir, bh2); in make_indexed_dir()
2180 de = do_split(handle,dir, &bh2, frame, &fname->hinfo); in make_indexed_dir()
2186 retval = add_dirent_to_buf(handle, fname, dir, inode, de, bh2); in make_indexed_dir()
2194 ext4_mark_inode_dirty(handle, dir); in make_indexed_dir()
2213 struct inode *dir = d_inode(dentry->d_parent); in ext4_add_entry() local
2227 sb = dir->i_sb; in ext4_add_entry()
2236 if (sb_has_strict_encoding(sb) && IS_CASEFOLDED(dir) && in ext4_add_entry()
2241 retval = ext4_fname_setup_filename(dir, &dentry->d_name, 0, &fname); in ext4_add_entry()
2245 if (ext4_has_inline_data(dir)) { in ext4_add_entry()
2246 retval = ext4_try_add_inline_entry(handle, &fname, dir, inode); in ext4_add_entry()
2255 if (is_dx(dir)) { in ext4_add_entry()
2256 retval = ext4_dx_add_entry(handle, &fname, dir, inode); in ext4_add_entry()
2261 EXT4_ERROR_INODE(dir, in ext4_add_entry()
2266 ext4_clear_inode_flag(dir, EXT4_INODE_INDEX); in ext4_add_entry()
2268 retval = ext4_mark_inode_dirty(handle, dir); in ext4_add_entry()
2272 blocks = dir->i_size >> sb->s_blocksize_bits; in ext4_add_entry()
2274 bh = ext4_read_dirblock(dir, block, DIRENT); in ext4_add_entry()
2276 bh = ext4_bread(handle, dir, block, in ext4_add_entry()
2285 retval = add_dirent_to_buf(handle, &fname, dir, inode, in ext4_add_entry()
2292 retval = make_indexed_dir(handle, &fname, dir, in ext4_add_entry()
2299 bh = ext4_append(handle, dir, &block); in ext4_add_entry()
2313 retval = add_dirent_to_buf(handle, &fname, dir, inode, de, bh); in ext4_add_entry()
2326 struct inode *dir, struct inode *inode) in ext4_dx_add_entry() argument
2331 struct super_block *sb = dir->i_sb; in ext4_dx_add_entry()
2338 frame = dx_probe(fname, dir, NULL, frames); in ext4_dx_add_entry()
2343 bh = ext4_read_dirblock(dir, dx_get_block(frame->at), DIRENT_HTREE); in ext4_dx_add_entry()
2355 err = add_dirent_to_buf(handle, fname, dir, inode, NULL, bh); in ext4_dx_add_entry()
2387 dir->i_ino, levels); in ext4_dx_add_entry()
2397 bh2 = ext4_append(handle, dir, &newblock); in ext4_dx_add_entry()
2427 dx_set_limit(entries2, dx_node_limit(dir)); in ext4_dx_add_entry()
2439 err = ext4_handle_dirty_dx_node(handle, dir, bh2); in ext4_dx_add_entry()
2443 err = ext4_handle_dirty_dx_node(handle, dir, in ext4_dx_add_entry()
2447 err = ext4_handle_dirty_dx_node(handle, dir, in ext4_dx_add_entry()
2455 dx_set_limit(entries2, dx_node_limit(dir)); in ext4_dx_add_entry()
2465 err = ext4_handle_dirty_dx_node(handle, dir, frame->bh); in ext4_dx_add_entry()
2468 err = ext4_handle_dirty_dx_node(handle, dir, bh2); in ext4_dx_add_entry()
2474 de = do_split(handle, dir, &bh, frame, &fname->hinfo); in ext4_dx_add_entry()
2479 err = add_dirent_to_buf(handle, fname, dir, inode, de, bh); in ext4_dx_add_entry()
2483 ext4_std_error(dir->i_sb, err); /* this is a no-op if err == 0 */ in ext4_dx_add_entry()
2499 int ext4_generic_delete_entry(struct inode *dir, in ext4_generic_delete_entry() argument
2507 unsigned int blocksize = dir->i_sb->s_blocksize; in ext4_generic_delete_entry()
2514 if (ext4_check_dir_entry(dir, NULL, de, bh, in ext4_generic_delete_entry()
2539 inode_inc_iversion(dir); in ext4_generic_delete_entry()
2550 struct inode *dir, in ext4_delete_entry() argument
2556 if (ext4_has_inline_data(dir)) { in ext4_delete_entry()
2558 err = ext4_delete_inline_entry(handle, dir, de_del, bh, in ext4_delete_entry()
2564 if (ext4_has_metadata_csum(dir->i_sb)) in ext4_delete_entry()
2572 err = ext4_generic_delete_entry(dir, de_del, bh, bh->b_data, in ext4_delete_entry()
2573 dir->i_sb->s_blocksize, csum_size); in ext4_delete_entry()
2578 err = ext4_handle_dirty_dirblock(handle, dir, bh); in ext4_delete_entry()
2585 ext4_std_error(dir->i_sb, err); in ext4_delete_entry()
2628 struct inode *dir = d_inode(dentry->d_parent); in ext4_add_nondir() local
2633 if (IS_DIRSYNC(dir)) in ext4_add_nondir()
2653 static int ext4_create(struct inode *dir, struct dentry *dentry, umode_t mode, in ext4_create() argument
2660 err = dquot_initialize(dir); in ext4_create()
2664 credits = (EXT4_DATA_TRANS_BLOCKS(dir->i_sb) + in ext4_create()
2667 inode = ext4_new_inode_start_handle(dir, mode, &dentry->d_name, 0, in ext4_create()
2683 if (err == -ENOSPC && ext4_should_retry_alloc(dir->i_sb, &retries)) in ext4_create()
2688 static int ext4_mknod(struct inode *dir, struct dentry *dentry, in ext4_mknod() argument
2695 err = dquot_initialize(dir); in ext4_mknod()
2699 credits = (EXT4_DATA_TRANS_BLOCKS(dir->i_sb) + in ext4_mknod()
2702 inode = ext4_new_inode_start_handle(dir, mode, &dentry->d_name, 0, in ext4_mknod()
2717 if (err == -ENOSPC && ext4_should_retry_alloc(dir->i_sb, &retries)) in ext4_mknod()
2722 static int ext4_tmpfile(struct inode *dir, struct dentry *dentry, umode_t mode) in ext4_tmpfile() argument
2728 err = dquot_initialize(dir); in ext4_tmpfile()
2733 inode = ext4_new_inode_start_handle(dir, mode, in ext4_tmpfile()
2736 EXT4_MAXQUOTAS_INIT_BLOCKS(dir->i_sb) + in ext4_tmpfile()
2753 if (err == -ENOSPC && ext4_should_retry_alloc(dir->i_sb, &retries)) in ext4_tmpfile()
2790 int ext4_init_new_dir(handle_t *handle, struct inode *dir, in ext4_init_new_dir() argument
2796 unsigned int blocksize = dir->i_sb->s_blocksize; in ext4_init_new_dir()
2800 if (ext4_has_metadata_csum(dir->i_sb)) in ext4_init_new_dir()
2804 err = ext4_try_create_inline_dir(handle, dir, inode); in ext4_init_new_dir()
2816 ext4_init_dot_dotdot(inode, de, blocksize, csum_size, dir->i_ino, 0); in ext4_init_new_dir()
2831 static int ext4_mkdir(struct inode *dir, struct dentry *dentry, umode_t mode) in ext4_mkdir() argument
2837 if (EXT4_DIR_LINK_MAX(dir)) in ext4_mkdir()
2840 err = dquot_initialize(dir); in ext4_mkdir()
2844 credits = (EXT4_DATA_TRANS_BLOCKS(dir->i_sb) + in ext4_mkdir()
2847 inode = ext4_new_inode_start_handle(dir, S_IFDIR | mode, in ext4_mkdir()
2857 err = ext4_init_new_dir(handle, dir, inode); in ext4_mkdir()
2875 ext4_inc_count(dir); in ext4_mkdir()
2877 ext4_update_dx_flag(dir); in ext4_mkdir()
2878 err = ext4_mark_inode_dirty(handle, dir); in ext4_mkdir()
2883 if (IS_DIRSYNC(dir)) in ext4_mkdir()
2890 if (err == -ENOSPC && ext4_should_retry_alloc(dir->i_sb, &retries)) in ext4_mkdir()
3154 static int ext4_rmdir(struct inode *dir, struct dentry *dentry) in ext4_rmdir() argument
3162 if (unlikely(ext4_forced_shutdown(EXT4_SB(dir->i_sb)))) in ext4_rmdir()
3167 retval = dquot_initialize(dir); in ext4_rmdir()
3175 bh = ext4_find_entry(dir, &dentry->d_name, &de, NULL); in ext4_rmdir()
3191 handle = ext4_journal_start(dir, EXT4_HT_DIR, in ext4_rmdir()
3192 EXT4_DATA_TRANS_BLOCKS(dir->i_sb)); in ext4_rmdir()
3199 if (IS_DIRSYNC(dir)) in ext4_rmdir()
3202 retval = ext4_delete_entry(handle, dir, de, bh); in ext4_rmdir()
3217 inode->i_ctime = dir->i_ctime = dir->i_mtime = current_time(inode); in ext4_rmdir()
3221 ext4_dec_count(dir); in ext4_rmdir()
3222 ext4_update_dx_flag(dir); in ext4_rmdir()
3224 retval = ext4_mark_inode_dirty(handle, dir); in ext4_rmdir()
3233 if (IS_CASEFOLDED(dir)) in ext4_rmdir()
3244 int __ext4_unlink(handle_t *handle, struct inode *dir, const struct qstr *d_name, in __ext4_unlink() argument
3252 bh = ext4_find_entry(dir, d_name, &de, NULL); in __ext4_unlink()
3271 if (IS_DIRSYNC(dir)) in __ext4_unlink()
3275 retval = ext4_delete_entry(handle, dir, de, bh); in __ext4_unlink()
3278 dir->i_ctime = dir->i_mtime = current_time(dir); in __ext4_unlink()
3279 ext4_update_dx_flag(dir); in __ext4_unlink()
3280 retval = ext4_mark_inode_dirty(handle, dir); in __ext4_unlink()
3301 static int ext4_unlink(struct inode *dir, struct dentry *dentry) in ext4_unlink() argument
3306 if (unlikely(ext4_forced_shutdown(EXT4_SB(dir->i_sb)))) in ext4_unlink()
3309 trace_ext4_unlink_enter(dir, dentry); in ext4_unlink()
3314 retval = dquot_initialize(dir); in ext4_unlink()
3321 handle = ext4_journal_start(dir, EXT4_HT_DIR, in ext4_unlink()
3322 EXT4_DATA_TRANS_BLOCKS(dir->i_sb)); in ext4_unlink()
3328 retval = __ext4_unlink(handle, dir, &dentry->d_name, d_inode(dentry)); in ext4_unlink()
3338 if (IS_CASEFOLDED(dir)) in ext4_unlink()
3349 static int ext4_symlink(struct inode *dir, in ext4_symlink() argument
3358 if (unlikely(ext4_forced_shutdown(EXT4_SB(dir->i_sb)))) in ext4_symlink()
3361 err = fscrypt_prepare_symlink(dir, symname, len, dir->i_sb->s_blocksize, in ext4_symlink()
3366 err = dquot_initialize(dir); in ext4_symlink()
3377 credits = 4 + EXT4_MAXQUOTAS_INIT_BLOCKS(dir->i_sb) + in ext4_symlink()
3386 credits = EXT4_DATA_TRANS_BLOCKS(dir->i_sb) + in ext4_symlink()
3390 inode = ext4_new_inode_start_handle(dir, S_IFLNK|S_IRWXUGO, in ext4_symlink()
3436 handle = ext4_journal_start(dir, EXT4_HT_DIR, in ext4_symlink()
3437 EXT4_DATA_TRANS_BLOCKS(dir->i_sb) + in ext4_symlink()
3479 int __ext4_link(struct inode *dir, struct inode *inode, struct dentry *dentry) in __ext4_link() argument
3484 handle = ext4_journal_start(dir, EXT4_HT_DIR, in __ext4_link()
3485 (EXT4_DATA_TRANS_BLOCKS(dir->i_sb) + in __ext4_link()
3490 if (IS_DIRSYNC(dir)) in __ext4_link()
3512 if (err == -ENOSPC && ext4_should_retry_alloc(dir->i_sb, &retries)) in __ext4_link()
3518 struct inode *dir, struct dentry *dentry) in ext4_link() argument
3526 err = fscrypt_prepare_link(old_dentry, dir, dentry); in ext4_link()
3530 if ((ext4_test_inode_flag(dir, EXT4_INODE_PROJINHERIT)) && in ext4_link()
3531 (!projid_eq(EXT4_I(dir)->i_projid, in ext4_link()
3535 err = dquot_initialize(dir); in ext4_link()
3538 return __ext4_link(dir, inode, dentry); in ext4_link()
3574 struct inode *dir; member
3600 if (le32_to_cpu(ent->parent_de->inode) != ent->dir->i_ino) in ext4_rename_dir_prepare()
3626 ext4_std_error(ent->dir->i_sb, retval); in ext4_rename_dir_finish()
3642 if (ext4_has_feature_filetype(ent->dir->i_sb)) in ext4_setent()
3644 inode_inc_iversion(ent->dir); in ext4_setent()
3645 ent->dir->i_ctime = ent->dir->i_mtime = in ext4_setent()
3646 current_time(ent->dir); in ext4_setent()
3647 retval = ext4_mark_inode_dirty(handle, ent->dir); in ext4_setent()
3650 retval2 = ext4_handle_dirty_dirblock(handle, ent->dir, ent->bh); in ext4_setent()
3652 ext4_std_error(ent->dir->i_sb, retval2); in ext4_setent()
3670 old.bh = ext4_find_entry(old.dir, &old.dentry->d_name, &old.de, NULL); in ext4_resetent()
3676 ext4_std_error(old.dir->i_sb, retval); in ext4_resetent()
3684 static int ext4_find_delete_entry(handle_t *handle, struct inode *dir, in ext4_find_delete_entry() argument
3691 bh = ext4_find_entry(dir, d_name, &de, NULL); in ext4_find_delete_entry()
3695 retval = ext4_delete_entry(handle, dir, de, bh); in ext4_find_delete_entry()
3716 retval = ext4_find_delete_entry(handle, ent->dir, in ext4_rename_delete()
3719 retval = ext4_delete_entry(handle, ent->dir, ent->de, ent->bh); in ext4_rename_delete()
3721 retval = ext4_find_delete_entry(handle, ent->dir, in ext4_rename_delete()
3727 ext4_warning_inode(ent->dir, in ext4_rename_delete()
3729 ent->dir->i_nlink, retval); in ext4_rename_delete()
3737 ext4_dec_count(ent->dir); in ext4_update_dir_count()
3739 ext4_inc_count(ent->dir); in ext4_update_dir_count()
3740 ext4_mark_inode_dirty(handle, ent->dir); in ext4_update_dir_count()
3755 credits += (EXT4_MAXQUOTAS_TRANS_BLOCKS(ent->dir->i_sb) + in ext4_whiteout_for_rename()
3758 wh = ext4_new_inode_start_handle(ent->dir, S_IFCHR | WHITEOUT_MODE, in ext4_whiteout_for_rename()
3767 ext4_should_retry_alloc(ent->dir->i_sb, &retries)) in ext4_whiteout_for_rename()
3791 .dir = old_dir, in ext4_rename()
3796 .dir = new_dir, in ext4_rename()
3817 retval = dquot_initialize(old.dir); in ext4_rename()
3820 retval = dquot_initialize(new.dir); in ext4_rename()
3832 old.bh = ext4_find_entry(old.dir, &old.dentry->d_name, &old.de, NULL); in ext4_rename()
3845 new.bh = ext4_find_entry(new.dir, &new.dentry->d_name, in ext4_rename()
3858 if (new.inode && !test_opt(new.dir->i_sb, NO_AUTO_DA_ALLOC)) in ext4_rename()
3861 credits = (2 * EXT4_DATA_TRANS_BLOCKS(old.dir->i_sb) + in ext4_rename()
3864 handle = ext4_journal_start(old.dir, EXT4_HT_DIR, credits); in ext4_rename()
3878 if (IS_DIRSYNC(old.dir) || IS_DIRSYNC(new.dir)) in ext4_rename()
3888 if (new.dir != old.dir && EXT4_DIR_LINK_MAX(new.dir)) in ext4_rename()
3902 force_reread = (new.dir->i_ino == old.dir->i_ino && in ext4_rename()
3903 ext4_test_inode_flag(new.dir, EXT4_INODE_INLINE_DATA)); in ext4_rename()
3930 force_reread = !ext4_test_inode_flag(new.dir, in ext4_rename()
3953 old.dir->i_ctime = old.dir->i_mtime = current_time(old.dir); in ext4_rename()
3954 ext4_update_dx_flag(old.dir); in ext4_rename()
3956 retval = ext4_rename_dir_finish(handle, &old, new.dir->i_ino); in ext4_rename()
3960 ext4_dec_count(old.dir); in ext4_rename()
3967 ext4_inc_count(new.dir); in ext4_rename()
3968 ext4_update_dx_flag(new.dir); in ext4_rename()
3969 retval = ext4_mark_inode_dirty(handle, new.dir); in ext4_rename()
3974 retval = ext4_mark_inode_dirty(handle, old.dir); in ext4_rename()
4030 .dir = old_dir, in ext4_cross_rename()
4035 .dir = new_dir, in ext4_cross_rename()
4051 retval = dquot_initialize(old.dir); in ext4_cross_rename()
4054 retval = dquot_initialize(new.dir); in ext4_cross_rename()
4058 old.bh = ext4_find_entry(old.dir, &old.dentry->d_name, in ext4_cross_rename()
4072 new.bh = ext4_find_entry(new.dir, &new.dentry->d_name, in ext4_cross_rename()
4084 handle = ext4_journal_start(old.dir, EXT4_HT_DIR, in ext4_cross_rename()
4085 (2 * EXT4_DATA_TRANS_BLOCKS(old.dir->i_sb) + in ext4_cross_rename()
4093 if (IS_DIRSYNC(old.dir) || IS_DIRSYNC(new.dir)) in ext4_cross_rename()
4113 if (old.dir != new.dir && old.is_dir != new.is_dir) { in ext4_cross_rename()
4117 if ((old.dir_nlink_delta > 0 && EXT4_DIR_LINK_MAX(old.dir)) || in ext4_cross_rename()
4118 (new.dir_nlink_delta > 0 && EXT4_DIR_LINK_MAX(new.dir))) in ext4_cross_rename()
4147 retval = ext4_rename_dir_finish(handle, &old, new.dir->i_ino); in ext4_cross_rename()
4152 retval = ext4_rename_dir_finish(handle, &new, old.dir->i_ino); in ext4_cross_rename()