Lines Matching refs:dir

299 static unsigned dx_root_limit(struct inode *dir, unsigned infosize);
300 static unsigned dx_node_limit(struct inode *dir);
302 struct inode *dir,
306 static int dx_make_map(struct inode *dir, struct ext4_dir_entry_2 *de,
310 static struct ext4_dir_entry_2 *dx_move_dirents(struct inode *dir, char *from,
313 static struct ext4_dir_entry_2 *dx_pack_dirents(struct inode *dir, char *base,
317 static int ext4_htree_next_block(struct inode *dir, __u32 hash,
321 static struct buffer_head * ext4_dx_find_entry(struct inode *dir,
325 struct inode *dir, struct inode *inode);
604 static inline unsigned dx_root_limit(struct inode *dir, unsigned infosize) in dx_root_limit() argument
606 unsigned int entry_space = dir->i_sb->s_blocksize - in dx_root_limit()
610 if (ext4_has_metadata_csum(dir->i_sb)) in dx_root_limit()
615 static inline unsigned dx_node_limit(struct inode *dir) in dx_node_limit() argument
617 unsigned int entry_space = dir->i_sb->s_blocksize - in dx_node_limit()
618 ext4_dir_rec_len(0, dir); in dx_node_limit()
620 if (ext4_has_metadata_csum(dir->i_sb)) in dx_node_limit()
648 static struct stats dx_show_leaf(struct inode *dir, in dx_show_leaf() argument
673 if (!IS_ENCRYPTED(dir)) { in dx_show_leaf()
675 ext4fs_dirhash(dir, de->name, in dx_show_leaf()
693 res = fscrypt_fname_disk_to_usr(dir, in dx_show_leaf()
707 if (IS_CASEFOLDED(dir)) in dx_show_leaf()
710 ext4fs_dirhash(dir, de->name, in dx_show_leaf()
721 ext4fs_dirhash(dir, de->name, de->name_len, &h); in dx_show_leaf()
726 space += ext4_dir_rec_len(de->name_len, dir); in dx_show_leaf()
735 struct stats dx_show_entries(struct dx_hash_info *hinfo, struct inode *dir, in dx_show_entries() argument
738 unsigned blocksize = dir->i_sb->s_blocksize; in dx_show_entries()
750 bh = ext4_bread(NULL,dir, block, 0); in dx_show_entries()
754 dx_show_entries(hinfo, dir, ((struct dx_node *) bh->b_data)->entries, levels - 1): in dx_show_entries()
755 dx_show_leaf(dir, hinfo, (struct ext4_dir_entry_2 *) in dx_show_entries()
780 dx_probe(struct ext4_filename *fname, struct inode *dir, in dx_probe() argument
793 frame->bh = ext4_read_dirblock(dir, 0, INDEX); in dx_probe()
802 ext4_warning_inode(dir, "Unrecognised inode hash code %u", in dx_probe()
806 if (ext4_hash_in_dirent(dir)) { in dx_probe()
808 ext4_warning_inode(dir, in dx_probe()
814 ext4_warning_inode(dir, in dx_probe()
823 hinfo->hash_version += EXT4_SB(dir->i_sb)->s_hash_unsigned; in dx_probe()
824 hinfo->seed = EXT4_SB(dir->i_sb)->s_hash_seed; in dx_probe()
827 !(IS_ENCRYPTED(dir) && IS_CASEFOLDED(dir))) in dx_probe()
828 ext4fs_dirhash(dir, fname_name(fname), fname_len(fname), hinfo); in dx_probe()
832 ext4_warning_inode(dir, "Unimplemented hash flags: %#06x", in dx_probe()
838 if (indirect >= ext4_dir_htree_level(dir->i_sb)) { in dx_probe()
839 ext4_warning(dir->i_sb, in dx_probe()
841 "supported value", dir->i_ino, in dx_probe()
842 ext4_dir_htree_level(dir->i_sb)); in dx_probe()
843 if (ext4_dir_htree_level(dir->i_sb) < EXT4_HTREE_LEVEL) { in dx_probe()
844 ext4_warning(dir->i_sb, "Enable large directory " in dx_probe()
853 if (dx_get_limit(entries) != dx_root_limit(dir, in dx_probe()
855 ext4_warning_inode(dir, "dx entry: limit %u != root limit %u", in dx_probe()
857 dx_root_limit(dir, root->info.info_length)); in dx_probe()
867 ext4_warning_inode(dir, in dx_probe()
909 ext4_warning_inode(dir, in dx_probe()
919 frame->bh = ext4_read_dirblock(dir, block, INDEX); in dx_probe()
928 if (dx_get_limit(entries) != dx_node_limit(dir)) { in dx_probe()
929 ext4_warning_inode(dir, in dx_probe()
931 dx_get_limit(entries), dx_node_limit(dir)); in dx_probe()
942 ext4_warning_inode(dir, in dx_probe()
984 static int ext4_htree_next_block(struct inode *dir, __u32 hash, in ext4_htree_next_block() argument
1030 bh = ext4_read_dirblock(dir, dx_get_block(p->at), INDEX); in ext4_htree_next_block()
1048 struct inode *dir, ext4_lblk_t block, in htree_dirblock_to_tree() argument
1056 int csum = ext4_has_metadata_csum(dir->i_sb); in htree_dirblock_to_tree()
1060 bh = ext4_read_dirblock(dir, block, DIRENT_HTREE); in htree_dirblock_to_tree()
1067 dir->i_sb->s_blocksize - in htree_dirblock_to_tree()
1069 csum ? NULL : dir)); in htree_dirblock_to_tree()
1071 if (IS_ENCRYPTED(dir)) { in htree_dirblock_to_tree()
1072 err = fscrypt_prepare_readdir(dir); in htree_dirblock_to_tree()
1085 for (; de < top; de = ext4_next_entry(de, dir->i_sb->s_blocksize)) { in htree_dirblock_to_tree()
1086 if (ext4_check_dir_entry(dir, NULL, de, bh, in htree_dirblock_to_tree()
1088 (block<<EXT4_BLOCK_SIZE_BITS(dir->i_sb)) in htree_dirblock_to_tree()
1093 if (ext4_hash_in_dirent(dir)) { in htree_dirblock_to_tree()
1102 ext4fs_dirhash(dir, de->name, de->name_len, hinfo); in htree_dirblock_to_tree()
1110 if (!IS_ENCRYPTED(dir)) { in htree_dirblock_to_tree()
1122 err = fscrypt_fname_disk_to_usr(dir, hinfo->hash, in htree_dirblock_to_tree()
1161 struct inode *dir; in ext4_htree_fill_tree() local
1170 dir = file_inode(dir_file); in ext4_htree_fill_tree()
1171 if (!(ext4_test_inode_flag(dir, EXT4_INODE_INDEX))) { in ext4_htree_fill_tree()
1172 if (ext4_hash_in_dirent(dir)) in ext4_htree_fill_tree()
1176 EXT4_SB(dir->i_sb)->s_def_hash_version; in ext4_htree_fill_tree()
1179 EXT4_SB(dir->i_sb)->s_hash_unsigned; in ext4_htree_fill_tree()
1180 hinfo.seed = EXT4_SB(dir->i_sb)->s_hash_seed; in ext4_htree_fill_tree()
1181 if (ext4_has_inline_data(dir)) { in ext4_htree_fill_tree()
1183 count = ext4_inlinedir_to_tree(dir_file, dir, 0, in ext4_htree_fill_tree()
1192 count = htree_dirblock_to_tree(dir_file, dir, 0, &hinfo, in ext4_htree_fill_tree()
1199 frame = dx_probe(NULL, dir, &hinfo, frames); in ext4_htree_fill_tree()
1216 de = ext4_next_entry(de, dir->i_sb->s_blocksize); in ext4_htree_fill_tree()
1233 ret = htree_dirblock_to_tree(dir_file, dir, block, &hinfo, in ext4_htree_fill_tree()
1241 ret = ext4_htree_next_block(dir, HASH_NB_ALWAYS, in ext4_htree_fill_tree()
1267 struct inode *dir, in search_dirblock() argument
1273 return ext4_search_dir(bh, bh->b_data, dir->i_sb->s_blocksize, dir, in search_dirblock()
1285 static int dx_make_map(struct inode *dir, struct ext4_dir_entry_2 *de, in dx_make_map() argument
1295 if (ext4_hash_in_dirent(dir)) in dx_make_map()
1298 ext4fs_dirhash(dir, de->name, de->name_len, &h); in dx_make_map()
1406 int ext4_fname_setup_ci_filename(struct inode *dir, const struct qstr *iname, in ext4_fname_setup_ci_filename() argument
1413 if (!IS_CASEFOLDED(dir) || !dir->i_sb->s_encoding || in ext4_fname_setup_ci_filename()
1414 (IS_ENCRYPTED(dir) && !fscrypt_has_encryption_key(dir))) { in ext4_fname_setup_ci_filename()
1423 len = utf8_casefold(dir->i_sb->s_encoding, in ext4_fname_setup_ci_filename()
1431 if (!IS_ENCRYPTED(dir)) in ext4_fname_setup_ci_filename()
1437 ext4fs_dirhash(dir, cf_name->name, cf_name->len, hinfo); in ext4_fname_setup_ci_filename()
1439 ext4fs_dirhash(dir, iname->name, iname->len, hinfo); in ext4_fname_setup_ci_filename()
1493 struct inode *dir, struct ext4_filename *fname, in ext4_search_dir() argument
1507 ext4_match(dir, fname, de)) { in ext4_search_dir()
1510 if (ext4_check_dir_entry(dir, NULL, de, bh, search_buf, in ext4_search_dir()
1518 dir->i_sb->s_blocksize); in ext4_search_dir()
1527 static int is_dx_internal_node(struct inode *dir, ext4_lblk_t block, in is_dx_internal_node() argument
1530 struct super_block *sb = dir->i_sb; in is_dx_internal_node()
1532 if (!is_dx(dir)) in is_dx_internal_node()
1554 static struct buffer_head *__ext4_find_entry(struct inode *dir, in __ext4_find_entry() argument
1572 sb = dir->i_sb; in __ext4_find_entry()
1577 if (ext4_has_inline_data(dir)) { in __ext4_find_entry()
1579 ret = ext4_find_inline_entry(dir, fname, res_dir, in __ext4_find_entry()
1600 if (is_dx(dir)) { in __ext4_find_entry()
1601 ret = ext4_dx_find_entry(dir, fname, res_dir, lblk); in __ext4_find_entry()
1613 nblocks = dir->i_size >> EXT4_BLOCK_SIZE_BITS(sb); in __ext4_find_entry()
1618 start = EXT4_I(dir)->i_dir_start_lookup; in __ext4_find_entry()
1636 retval = ext4_bread_batch(dir, block, ra_max, in __ext4_find_entry()
1648 EXT4_ERROR_INODE_ERR(dir, EIO, in __ext4_find_entry()
1656 !is_dx_internal_node(dir, block, in __ext4_find_entry()
1658 !ext4_dirblock_csum_verify(dir, bh)) { in __ext4_find_entry()
1659 EXT4_ERROR_INODE_ERR(dir, EFSBADCRC, in __ext4_find_entry()
1667 i = search_dirblock(bh, dir, fname, block, in __ext4_find_entry()
1672 EXT4_I(dir)->i_dir_start_lookup = block; in __ext4_find_entry()
1690 nblocks = dir->i_size >> EXT4_BLOCK_SIZE_BITS(sb); in __ext4_find_entry()
1703 static struct buffer_head *ext4_find_entry(struct inode *dir, in ext4_find_entry() argument
1712 err = ext4_fname_setup_filename(dir, d_name, 1, &fname); in ext4_find_entry()
1718 bh = __ext4_find_entry(dir, &fname, res_dir, inlined, lblk); in ext4_find_entry()
1724 static struct buffer_head *ext4_lookup_entry(struct inode *dir, in ext4_lookup_entry() argument
1732 err = ext4_fname_prepare_lookup(dir, dentry, &fname); in ext4_lookup_entry()
1739 bh = __ext4_find_entry(dir, &fname, res_dir, NULL, NULL); in ext4_lookup_entry()
1745 static struct buffer_head * ext4_dx_find_entry(struct inode *dir, in ext4_dx_find_entry() argument
1749 struct super_block * sb = dir->i_sb; in ext4_dx_find_entry()
1758 frame = dx_probe(fname, dir, NULL, frames); in ext4_dx_find_entry()
1765 bh = ext4_read_dirblock(dir, block, DIRENT_HTREE); in ext4_dx_find_entry()
1769 retval = search_dirblock(bh, dir, fname, block, in ext4_dx_find_entry()
1781 retval = ext4_htree_next_block(dir, fname->hinfo.hash, frame, in ext4_dx_find_entry()
1784 ext4_warning_inode(dir, in ext4_dx_find_entry()
1800 static struct dentry *ext4_lookup(struct inode *dir, struct dentry *dentry, unsigned int flags) in ext4_lookup() argument
1809 bh = ext4_lookup_entry(dir, dentry, &de); in ext4_lookup()
1816 if (!ext4_valid_inum(dir->i_sb, ino)) { in ext4_lookup()
1817 EXT4_ERROR_INODE(dir, "bad inode number: %u", ino); in ext4_lookup()
1820 if (unlikely(ino == dir->i_ino)) { in ext4_lookup()
1821 EXT4_ERROR_INODE(dir, "'%pd' linked to parent dir", in ext4_lookup()
1825 inode = ext4_iget(dir->i_sb, ino, EXT4_IGET_NORMAL); in ext4_lookup()
1827 EXT4_ERROR_INODE(dir, in ext4_lookup()
1832 if (!IS_ERR(inode) && IS_ENCRYPTED(dir) && in ext4_lookup()
1834 !fscrypt_has_permitted_context(dir, inode)) { in ext4_lookup()
1837 dir->i_ino, inode->i_ino); in ext4_lookup()
1844 if (!inode && IS_CASEFOLDED(dir)) { in ext4_lookup()
1886 dx_move_dirents(struct inode *dir, char *from, char *to, in dx_move_dirents() argument
1895 rec_len = ext4_dir_rec_len(de->name_len, dir); in dx_move_dirents()
1911 static struct ext4_dir_entry_2 *dx_pack_dirents(struct inode *dir, char *base, in dx_pack_dirents() argument
1921 rec_len = ext4_dir_rec_len(de->name_len, dir); in dx_pack_dirents()
1938 static struct ext4_dir_entry_2 *do_split(handle_t *handle, struct inode *dir, in do_split() argument
1942 unsigned blocksize = dir->i_sb->s_blocksize; in do_split()
1954 if (ext4_has_metadata_csum(dir->i_sb)) in do_split()
1957 bh2 = ext4_append(handle, dir, newblock); in do_split()
1978 count = dx_make_map(dir, (struct ext4_dir_entry_2 *) data1, in do_split()
2011 de2 = dx_move_dirents(dir, data1, data2, map + split, count - split, in do_split()
2013 de = dx_pack_dirents(dir, data1, blocksize); in do_split()
2025 dxtrace(dx_show_leaf(dir, hinfo, (struct ext4_dir_entry_2 *) data1, in do_split()
2027 dxtrace(dx_show_leaf(dir, hinfo, (struct ext4_dir_entry_2 *) data2, in do_split()
2036 err = ext4_handle_dirty_dirblock(handle, dir, bh2); in do_split()
2039 err = ext4_handle_dirty_dx_node(handle, dir, frame->bh); in do_split()
2050 ext4_std_error(dir->i_sb, err); in do_split()
2054 int ext4_find_dest_de(struct inode *dir, struct inode *inode, in ext4_find_dest_de() argument
2062 unsigned short reclen = ext4_dir_rec_len(fname_len(fname), dir); in ext4_find_dest_de()
2070 if (ext4_check_dir_entry(dir, NULL, de, bh, in ext4_find_dest_de()
2073 if (ext4_match(dir, fname, de)) in ext4_find_dest_de()
2075 nlen = ext4_dir_rec_len(de->name_len, dir); in ext4_find_dest_de()
2089 void ext4_insert_dentry(struct inode *dir, in ext4_insert_dentry() argument
2098 nlen = ext4_dir_rec_len(de->name_len, dir); in ext4_insert_dentry()
2112 if (ext4_hash_in_dirent(dir)) { in ext4_insert_dentry()
2130 struct inode *dir, in add_dirent_to_buf() argument
2135 unsigned int blocksize = dir->i_sb->s_blocksize; in add_dirent_to_buf()
2143 err = ext4_find_dest_de(dir, inode, blk, bh, bh->b_data, in add_dirent_to_buf()
2151 ext4_std_error(dir->i_sb, err); in add_dirent_to_buf()
2156 ext4_insert_dentry(dir, inode, de, blocksize, fname); in add_dirent_to_buf()
2169 dir->i_mtime = dir->i_ctime = current_time(dir); in add_dirent_to_buf()
2170 ext4_update_dx_flag(dir); in add_dirent_to_buf()
2171 inode_inc_iversion(dir); in add_dirent_to_buf()
2172 err2 = ext4_mark_inode_dirty(handle, dir); in add_dirent_to_buf()
2174 err = ext4_handle_dirty_dirblock(handle, dir, bh); in add_dirent_to_buf()
2176 ext4_std_error(dir->i_sb, err); in add_dirent_to_buf()
2185 struct inode *dir, in make_indexed_dir() argument
2204 blocksize = dir->i_sb->s_blocksize; in make_indexed_dir()
2205 dxtrace(printk(KERN_DEBUG "Creating index: inode %lu\n", dir->i_ino)); in make_indexed_dir()
2209 ext4_std_error(dir->i_sb, retval); in make_indexed_dir()
2220 EXT4_ERROR_INODE(dir, "invalid rec_len for '..'"); in make_indexed_dir()
2227 bh2 = ext4_append(handle, dir, &block); in make_indexed_dir()
2232 ext4_set_inode_flag(dir, EXT4_INODE_INDEX); in make_indexed_dir()
2239 if (ext4_check_dir_entry(dir, NULL, de, bh2, data2, len, block, in make_indexed_dir()
2260 if (ext4_hash_in_dirent(dir)) in make_indexed_dir()
2264 EXT4_SB(dir->i_sb)->s_def_hash_version; in make_indexed_dir()
2269 dx_set_limit(entries, dx_root_limit(dir, sizeof(root->info))); in make_indexed_dir()
2274 fname->hinfo.hash_version += EXT4_SB(dir->i_sb)->s_hash_unsigned; in make_indexed_dir()
2275 fname->hinfo.seed = EXT4_SB(dir->i_sb)->s_hash_seed; in make_indexed_dir()
2278 if (!ext4_hash_in_dirent(dir)) in make_indexed_dir()
2279 ext4fs_dirhash(dir, fname_name(fname), in make_indexed_dir()
2288 retval = ext4_handle_dirty_dx_node(handle, dir, frame->bh); in make_indexed_dir()
2291 retval = ext4_handle_dirty_dirblock(handle, dir, bh2); in make_indexed_dir()
2295 de = do_split(handle, dir, &bh2, frame, &fname->hinfo, &block); in make_indexed_dir()
2301 retval = add_dirent_to_buf(handle, fname, dir, inode, de, block, bh2); in make_indexed_dir()
2309 ext4_mark_inode_dirty(handle, dir); in make_indexed_dir()
2328 struct inode *dir = d_inode(dentry->d_parent); in ext4_add_entry() local
2342 sb = dir->i_sb; in ext4_add_entry()
2351 if (sb_has_strict_encoding(sb) && IS_CASEFOLDED(dir) && in ext4_add_entry()
2356 retval = ext4_fname_setup_filename(dir, &dentry->d_name, 0, &fname); in ext4_add_entry()
2360 if (ext4_has_inline_data(dir)) { in ext4_add_entry()
2361 retval = ext4_try_add_inline_entry(handle, &fname, dir, inode); in ext4_add_entry()
2370 if (is_dx(dir)) { in ext4_add_entry()
2371 retval = ext4_dx_add_entry(handle, &fname, dir, inode); in ext4_add_entry()
2376 EXT4_ERROR_INODE(dir, in ext4_add_entry()
2381 ext4_clear_inode_flag(dir, EXT4_INODE_INDEX); in ext4_add_entry()
2383 retval = ext4_mark_inode_dirty(handle, dir); in ext4_add_entry()
2387 blocks = dir->i_size >> sb->s_blocksize_bits; in ext4_add_entry()
2389 bh = ext4_read_dirblock(dir, block, DIRENT); in ext4_add_entry()
2391 bh = ext4_bread(handle, dir, block, in ext4_add_entry()
2400 retval = add_dirent_to_buf(handle, &fname, dir, inode, in ext4_add_entry()
2407 retval = make_indexed_dir(handle, &fname, dir, in ext4_add_entry()
2414 bh = ext4_append(handle, dir, &block); in ext4_add_entry()
2428 retval = add_dirent_to_buf(handle, &fname, dir, inode, de, block, bh); in ext4_add_entry()
2441 struct inode *dir, struct inode *inode) in ext4_dx_add_entry() argument
2446 struct super_block *sb = dir->i_sb; in ext4_dx_add_entry()
2454 frame = dx_probe(fname, dir, NULL, frames); in ext4_dx_add_entry()
2460 bh = ext4_read_dirblock(dir, lblk, DIRENT_HTREE); in ext4_dx_add_entry()
2472 err = add_dirent_to_buf(handle, fname, dir, inode, NULL, lblk, bh); in ext4_dx_add_entry()
2504 dir->i_ino, levels); in ext4_dx_add_entry()
2514 bh2 = ext4_append(handle, dir, &newblock); in ext4_dx_add_entry()
2544 dx_set_limit(entries2, dx_node_limit(dir)); in ext4_dx_add_entry()
2556 err = ext4_handle_dirty_dx_node(handle, dir, bh2); in ext4_dx_add_entry()
2560 err = ext4_handle_dirty_dx_node(handle, dir, in ext4_dx_add_entry()
2564 err = ext4_handle_dirty_dx_node(handle, dir, in ext4_dx_add_entry()
2572 dx_set_limit(entries2, dx_node_limit(dir)); in ext4_dx_add_entry()
2582 err = ext4_handle_dirty_dx_node(handle, dir, frame->bh); in ext4_dx_add_entry()
2585 err = ext4_handle_dirty_dx_node(handle, dir, bh2); in ext4_dx_add_entry()
2591 de = do_split(handle, dir, &bh, frame, &fname->hinfo, &lblk); in ext4_dx_add_entry()
2596 err = add_dirent_to_buf(handle, fname, dir, inode, de, lblk, bh); in ext4_dx_add_entry()
2600 ext4_std_error(dir->i_sb, err); /* this is a no-op if err == 0 */ in ext4_dx_add_entry()
2616 int ext4_generic_delete_entry(struct inode *dir, in ext4_generic_delete_entry() argument
2625 unsigned int blocksize = dir->i_sb->s_blocksize; in ext4_generic_delete_entry()
2632 if (ext4_check_dir_entry(dir, NULL, de, bh, in ext4_generic_delete_entry()
2645 inode_inc_iversion(dir); in ext4_generic_delete_entry()
2656 struct inode *dir, in ext4_delete_entry() argument
2663 if (ext4_has_inline_data(dir)) { in ext4_delete_entry()
2665 err = ext4_delete_inline_entry(handle, dir, de_del, bh, in ext4_delete_entry()
2671 if (ext4_has_metadata_csum(dir->i_sb)) in ext4_delete_entry()
2679 err = ext4_generic_delete_entry(dir, de_del, lblk, bh, bh->b_data, in ext4_delete_entry()
2680 dir->i_sb->s_blocksize, csum_size); in ext4_delete_entry()
2685 err = ext4_handle_dirty_dirblock(handle, dir, bh); in ext4_delete_entry()
2692 ext4_std_error(dir->i_sb, err); in ext4_delete_entry()
2735 struct inode *dir = d_inode(dentry->d_parent); in ext4_add_nondir() local
2740 if (IS_DIRSYNC(dir)) in ext4_add_nondir()
2760 static int ext4_create(struct inode *dir, struct dentry *dentry, umode_t mode, in ext4_create() argument
2767 err = dquot_initialize(dir); in ext4_create()
2771 credits = (EXT4_DATA_TRANS_BLOCKS(dir->i_sb) + in ext4_create()
2774 inode = ext4_new_inode_start_handle(dir, mode, &dentry->d_name, 0, in ext4_create()
2790 if (err == -ENOSPC && ext4_should_retry_alloc(dir->i_sb, &retries)) in ext4_create()
2795 static int ext4_mknod(struct inode *dir, struct dentry *dentry, in ext4_mknod() argument
2802 err = dquot_initialize(dir); in ext4_mknod()
2806 credits = (EXT4_DATA_TRANS_BLOCKS(dir->i_sb) + in ext4_mknod()
2809 inode = ext4_new_inode_start_handle(dir, mode, &dentry->d_name, 0, in ext4_mknod()
2824 if (err == -ENOSPC && ext4_should_retry_alloc(dir->i_sb, &retries)) in ext4_mknod()
2829 static int ext4_tmpfile(struct inode *dir, struct dentry *dentry, umode_t mode) in ext4_tmpfile() argument
2835 err = dquot_initialize(dir); in ext4_tmpfile()
2840 inode = ext4_new_inode_start_handle(dir, mode, in ext4_tmpfile()
2843 EXT4_MAXQUOTAS_INIT_BLOCKS(dir->i_sb) + in ext4_tmpfile()
2860 if (err == -ENOSPC && ext4_should_retry_alloc(dir->i_sb, &retries)) in ext4_tmpfile()
2898 int ext4_init_new_dir(handle_t *handle, struct inode *dir, in ext4_init_new_dir() argument
2904 unsigned int blocksize = dir->i_sb->s_blocksize; in ext4_init_new_dir()
2908 if (ext4_has_metadata_csum(dir->i_sb)) in ext4_init_new_dir()
2912 err = ext4_try_create_inline_dir(handle, dir, inode); in ext4_init_new_dir()
2924 ext4_init_dot_dotdot(inode, de, blocksize, csum_size, dir->i_ino, 0); in ext4_init_new_dir()
2939 static int ext4_mkdir(struct inode *dir, struct dentry *dentry, umode_t mode) in ext4_mkdir() argument
2945 if (EXT4_DIR_LINK_MAX(dir)) in ext4_mkdir()
2948 err = dquot_initialize(dir); in ext4_mkdir()
2952 credits = (EXT4_DATA_TRANS_BLOCKS(dir->i_sb) + in ext4_mkdir()
2955 inode = ext4_new_inode_start_handle(dir, S_IFDIR | mode, in ext4_mkdir()
2965 err = ext4_init_new_dir(handle, dir, inode); in ext4_mkdir()
2983 ext4_inc_count(dir); in ext4_mkdir()
2985 ext4_update_dx_flag(dir); in ext4_mkdir()
2986 err = ext4_mark_inode_dirty(handle, dir); in ext4_mkdir()
2991 if (IS_DIRSYNC(dir)) in ext4_mkdir()
2998 if (err == -ENOSPC && ext4_should_retry_alloc(dir->i_sb, &retries)) in ext4_mkdir()
3254 static int ext4_rmdir(struct inode *dir, struct dentry *dentry) in ext4_rmdir() argument
3264 if (unlikely(ext4_forced_shutdown(EXT4_SB(dir->i_sb)))) in ext4_rmdir()
3269 retval = dquot_initialize(dir); in ext4_rmdir()
3277 bh = ext4_find_entry(dir, &dentry->d_name, &de, NULL, &lblk); in ext4_rmdir()
3293 handle = ext4_journal_start(dir, EXT4_HT_DIR, in ext4_rmdir()
3294 EXT4_DATA_TRANS_BLOCKS(dir->i_sb)); in ext4_rmdir()
3301 if (IS_DIRSYNC(dir)) in ext4_rmdir()
3304 retval = ext4_delete_entry(handle, dir, de, lblk, bh); in ext4_rmdir()
3319 inode->i_ctime = dir->i_ctime = dir->i_mtime = current_time(inode); in ext4_rmdir()
3323 ext4_dec_count(dir); in ext4_rmdir()
3324 ext4_update_dx_flag(dir); in ext4_rmdir()
3326 retval = ext4_mark_inode_dirty(handle, dir); in ext4_rmdir()
3335 if (IS_CASEFOLDED(dir)) in ext4_rmdir()
3346 int __ext4_unlink(handle_t *handle, struct inode *dir, const struct qstr *d_name, in __ext4_unlink() argument
3355 bh = ext4_find_entry(dir, d_name, &de, NULL, &lblk); in __ext4_unlink()
3374 if (IS_DIRSYNC(dir)) in __ext4_unlink()
3378 retval = ext4_delete_entry(handle, dir, de, lblk, bh); in __ext4_unlink()
3381 dir->i_ctime = dir->i_mtime = current_time(dir); in __ext4_unlink()
3382 ext4_update_dx_flag(dir); in __ext4_unlink()
3383 retval = ext4_mark_inode_dirty(handle, dir); in __ext4_unlink()
3404 static int ext4_unlink(struct inode *dir, struct dentry *dentry) in ext4_unlink() argument
3409 if (unlikely(ext4_forced_shutdown(EXT4_SB(dir->i_sb)))) in ext4_unlink()
3412 trace_ext4_unlink_enter(dir, dentry); in ext4_unlink()
3417 retval = dquot_initialize(dir); in ext4_unlink()
3424 handle = ext4_journal_start(dir, EXT4_HT_DIR, in ext4_unlink()
3425 EXT4_DATA_TRANS_BLOCKS(dir->i_sb)); in ext4_unlink()
3431 retval = __ext4_unlink(handle, dir, &dentry->d_name, d_inode(dentry)); in ext4_unlink()
3441 if (IS_CASEFOLDED(dir)) in ext4_unlink()
3452 static int ext4_symlink(struct inode *dir, in ext4_symlink() argument
3461 if (unlikely(ext4_forced_shutdown(EXT4_SB(dir->i_sb)))) in ext4_symlink()
3464 err = fscrypt_prepare_symlink(dir, symname, len, dir->i_sb->s_blocksize, in ext4_symlink()
3469 err = dquot_initialize(dir); in ext4_symlink()
3480 credits = 4 + EXT4_MAXQUOTAS_INIT_BLOCKS(dir->i_sb) + in ext4_symlink()
3489 credits = EXT4_DATA_TRANS_BLOCKS(dir->i_sb) + in ext4_symlink()
3493 inode = ext4_new_inode_start_handle(dir, S_IFLNK|S_IRWXUGO, in ext4_symlink()
3539 handle = ext4_journal_start(dir, EXT4_HT_DIR, in ext4_symlink()
3540 EXT4_DATA_TRANS_BLOCKS(dir->i_sb) + in ext4_symlink()
3582 int __ext4_link(struct inode *dir, struct inode *inode, struct dentry *dentry) in __ext4_link() argument
3587 handle = ext4_journal_start(dir, EXT4_HT_DIR, in __ext4_link()
3588 (EXT4_DATA_TRANS_BLOCKS(dir->i_sb) + in __ext4_link()
3593 if (IS_DIRSYNC(dir)) in __ext4_link()
3615 if (err == -ENOSPC && ext4_should_retry_alloc(dir->i_sb, &retries)) in __ext4_link()
3621 struct inode *dir, struct dentry *dentry) in ext4_link() argument
3629 err = fscrypt_prepare_link(old_dentry, dir, dentry); in ext4_link()
3633 if ((ext4_test_inode_flag(dir, EXT4_INODE_PROJINHERIT)) && in ext4_link()
3634 (!projid_eq(EXT4_I(dir)->i_projid, in ext4_link()
3638 err = dquot_initialize(dir); in ext4_link()
3641 return __ext4_link(dir, inode, dentry); in ext4_link()
3701 struct inode *dir; member
3728 if (le32_to_cpu(ent->parent_de->inode) != ent->dir->i_ino) in ext4_rename_dir_prepare()
3754 ext4_std_error(ent->dir->i_sb, retval); in ext4_rename_dir_finish()
3770 if (ext4_has_feature_filetype(ent->dir->i_sb)) in ext4_setent()
3772 inode_inc_iversion(ent->dir); in ext4_setent()
3773 ent->dir->i_ctime = ent->dir->i_mtime = in ext4_setent()
3774 current_time(ent->dir); in ext4_setent()
3775 retval = ext4_mark_inode_dirty(handle, ent->dir); in ext4_setent()
3778 retval2 = ext4_handle_dirty_dirblock(handle, ent->dir, ent->bh); in ext4_setent()
3780 ext4_std_error(ent->dir->i_sb, retval2); in ext4_setent()
3798 old.bh = ext4_find_entry(old.dir, &old.dentry->d_name, &old.de, NULL, in ext4_resetent()
3805 ext4_std_error(old.dir->i_sb, retval); in ext4_resetent()
3813 static int ext4_find_delete_entry(handle_t *handle, struct inode *dir, in ext4_find_delete_entry() argument
3821 bh = ext4_find_entry(dir, d_name, &de, NULL, &lblk); in ext4_find_delete_entry()
3825 retval = ext4_delete_entry(handle, dir, de, lblk, bh); in ext4_find_delete_entry()
3846 retval = ext4_find_delete_entry(handle, ent->dir, in ext4_rename_delete()
3849 retval = ext4_delete_entry(handle, ent->dir, ent->de, in ext4_rename_delete()
3852 retval = ext4_find_delete_entry(handle, ent->dir, in ext4_rename_delete()
3858 ext4_warning_inode(ent->dir, in ext4_rename_delete()
3860 ent->dir->i_nlink, retval); in ext4_rename_delete()
3868 ext4_dec_count(ent->dir); in ext4_update_dir_count()
3870 ext4_inc_count(ent->dir); in ext4_update_dir_count()
3871 ext4_mark_inode_dirty(handle, ent->dir); in ext4_update_dir_count()
3886 credits += (EXT4_MAXQUOTAS_TRANS_BLOCKS(ent->dir->i_sb) + in ext4_whiteout_for_rename()
3889 wh = ext4_new_inode_start_handle(ent->dir, S_IFCHR | WHITEOUT_MODE, in ext4_whiteout_for_rename()
3898 ext4_should_retry_alloc(ent->dir->i_sb, &retries)) in ext4_whiteout_for_rename()
3922 .dir = old_dir, in ext4_rename()
3927 .dir = new_dir, in ext4_rename()
3948 retval = dquot_initialize(old.dir); in ext4_rename()
3951 retval = dquot_initialize(new.dir); in ext4_rename()
3963 old.bh = ext4_find_entry(old.dir, &old.dentry->d_name, &old.de, NULL, in ext4_rename()
3977 new.bh = ext4_find_entry(new.dir, &new.dentry->d_name, in ext4_rename()
3990 if (new.inode && !test_opt(new.dir->i_sb, NO_AUTO_DA_ALLOC)) in ext4_rename()
3993 credits = (2 * EXT4_DATA_TRANS_BLOCKS(old.dir->i_sb) + in ext4_rename()
3996 handle = ext4_journal_start(old.dir, EXT4_HT_DIR, credits); in ext4_rename()
4010 if (IS_DIRSYNC(old.dir) || IS_DIRSYNC(new.dir)) in ext4_rename()
4020 if (new.dir != old.dir && EXT4_DIR_LINK_MAX(new.dir)) in ext4_rename()
4034 force_reread = (new.dir->i_ino == old.dir->i_ino && in ext4_rename()
4035 ext4_test_inode_flag(new.dir, EXT4_INODE_INLINE_DATA)); in ext4_rename()
4062 force_reread = !ext4_test_inode_flag(new.dir, in ext4_rename()
4085 old.dir->i_ctime = old.dir->i_mtime = current_time(old.dir); in ext4_rename()
4086 ext4_update_dx_flag(old.dir); in ext4_rename()
4088 retval = ext4_rename_dir_finish(handle, &old, new.dir->i_ino); in ext4_rename()
4092 ext4_dec_count(old.dir); in ext4_rename()
4099 ext4_inc_count(new.dir); in ext4_rename()
4100 ext4_update_dx_flag(new.dir); in ext4_rename()
4101 retval = ext4_mark_inode_dirty(handle, new.dir); in ext4_rename()
4106 retval = ext4_mark_inode_dirty(handle, old.dir); in ext4_rename()
4162 .dir = old_dir, in ext4_cross_rename()
4167 .dir = new_dir, in ext4_cross_rename()
4183 retval = dquot_initialize(old.dir); in ext4_cross_rename()
4186 retval = dquot_initialize(new.dir); in ext4_cross_rename()
4190 old.bh = ext4_find_entry(old.dir, &old.dentry->d_name, in ext4_cross_rename()
4204 new.bh = ext4_find_entry(new.dir, &new.dentry->d_name, in ext4_cross_rename()
4216 handle = ext4_journal_start(old.dir, EXT4_HT_DIR, in ext4_cross_rename()
4217 (2 * EXT4_DATA_TRANS_BLOCKS(old.dir->i_sb) + in ext4_cross_rename()
4225 if (IS_DIRSYNC(old.dir) || IS_DIRSYNC(new.dir)) in ext4_cross_rename()
4245 if (old.dir != new.dir && old.is_dir != new.is_dir) { in ext4_cross_rename()
4249 if ((old.dir_nlink_delta > 0 && EXT4_DIR_LINK_MAX(old.dir)) || in ext4_cross_rename()
4250 (new.dir_nlink_delta > 0 && EXT4_DIR_LINK_MAX(new.dir))) in ext4_cross_rename()
4279 retval = ext4_rename_dir_finish(handle, &old, new.dir->i_ino); in ext4_cross_rename()
4284 retval = ext4_rename_dir_finish(handle, &new, old.dir->i_ino); in ext4_cross_rename()