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 ext4_dir_entry_2 *de,
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
767 frame->bh = ext4_read_dirblock(dir, 0, INDEX); in dx_probe()
775 ext4_warning_inode(dir, "Unrecognised inode hash code %u", in dx_probe()
783 hinfo->hash_version += EXT4_SB(dir->i_sb)->s_hash_unsigned; in dx_probe()
784 hinfo->seed = EXT4_SB(dir->i_sb)->s_hash_seed; in dx_probe()
786 ext4fs_dirhash(dir, fname_name(fname), fname_len(fname), hinfo); in dx_probe()
790 ext4_warning_inode(dir, "Unimplemented hash flags: %#06x", in dx_probe()
796 if (indirect >= ext4_dir_htree_level(dir->i_sb)) { in dx_probe()
797 ext4_warning(dir->i_sb, in dx_probe()
799 "supported value", dir->i_ino, in dx_probe()
800 ext4_dir_htree_level(dir->i_sb)); in dx_probe()
801 if (ext4_dir_htree_level(dir->i_sb) < EXT4_HTREE_LEVEL) { in dx_probe()
802 ext4_warning(dir->i_sb, "Enable large directory " in dx_probe()
811 if (dx_get_limit(entries) != dx_root_limit(dir, in dx_probe()
813 ext4_warning_inode(dir, "dx entry: limit %u != root limit %u", in dx_probe()
815 dx_root_limit(dir, root->info.info_length)); in dx_probe()
823 ext4_warning_inode(dir, in dx_probe()
864 frame->bh = ext4_read_dirblock(dir, dx_get_block(at), INDEX); in dx_probe()
872 if (dx_get_limit(entries) != dx_node_limit(dir)) { in dx_probe()
873 ext4_warning_inode(dir, in dx_probe()
875 dx_get_limit(entries), dx_node_limit(dir)); in dx_probe()
886 ext4_warning_inode(dir, in dx_probe()
928 static int ext4_htree_next_block(struct inode *dir, __u32 hash, in ext4_htree_next_block() argument
974 bh = ext4_read_dirblock(dir, dx_get_block(p->at), INDEX); in ext4_htree_next_block()
992 struct inode *dir, ext4_lblk_t block, in htree_dirblock_to_tree() argument
1003 bh = ext4_read_dirblock(dir, block, DIRENT_HTREE); in htree_dirblock_to_tree()
1009 dir->i_sb->s_blocksize - in htree_dirblock_to_tree()
1012 if (IS_ENCRYPTED(dir)) { in htree_dirblock_to_tree()
1013 err = fscrypt_get_encryption_info(dir); in htree_dirblock_to_tree()
1026 for (; de < top; de = ext4_next_entry(de, dir->i_sb->s_blocksize)) { in htree_dirblock_to_tree()
1027 if (ext4_check_dir_entry(dir, NULL, de, bh, in htree_dirblock_to_tree()
1029 (block<<EXT4_BLOCK_SIZE_BITS(dir->i_sb)) in htree_dirblock_to_tree()
1034 ext4fs_dirhash(dir, de->name, de->name_len, hinfo); in htree_dirblock_to_tree()
1041 if (!IS_ENCRYPTED(dir)) { in htree_dirblock_to_tree()
1053 err = fscrypt_fname_disk_to_usr(dir, hinfo->hash, in htree_dirblock_to_tree()
1092 struct inode *dir; in ext4_htree_fill_tree() local
1101 dir = file_inode(dir_file); in ext4_htree_fill_tree()
1102 if (!(ext4_test_inode_flag(dir, EXT4_INODE_INDEX))) { in ext4_htree_fill_tree()
1103 hinfo.hash_version = EXT4_SB(dir->i_sb)->s_def_hash_version; in ext4_htree_fill_tree()
1106 EXT4_SB(dir->i_sb)->s_hash_unsigned; in ext4_htree_fill_tree()
1107 hinfo.seed = EXT4_SB(dir->i_sb)->s_hash_seed; in ext4_htree_fill_tree()
1108 if (ext4_has_inline_data(dir)) { in ext4_htree_fill_tree()
1110 count = ext4_inlinedir_to_tree(dir_file, dir, 0, in ext4_htree_fill_tree()
1119 count = htree_dirblock_to_tree(dir_file, dir, 0, &hinfo, in ext4_htree_fill_tree()
1126 frame = dx_probe(NULL, dir, &hinfo, frames); in ext4_htree_fill_tree()
1143 de = ext4_next_entry(de, dir->i_sb->s_blocksize); in ext4_htree_fill_tree()
1160 ret = htree_dirblock_to_tree(dir_file, dir, block, &hinfo, in ext4_htree_fill_tree()
1168 ret = ext4_htree_next_block(dir, HASH_NB_ALWAYS, in ext4_htree_fill_tree()
1194 struct inode *dir, in search_dirblock() argument
1199 return ext4_search_dir(bh, bh->b_data, dir->i_sb->s_blocksize, dir, in search_dirblock()
1211 static int dx_make_map(struct inode *dir, struct ext4_dir_entry_2 *de, in dx_make_map() argument
1221 ext4fs_dirhash(dir, de->name, de->name_len, &h); in dx_make_map()
1313 void ext4_fname_setup_ci_filename(struct inode *dir, const struct qstr *iname, in ext4_fname_setup_ci_filename() argument
1318 if (!IS_CASEFOLDED(dir) || !dir->i_sb->s_encoding) { in ext4_fname_setup_ci_filename()
1327 len = utf8_casefold(dir->i_sb->s_encoding, in ext4_fname_setup_ci_filename()
1382 struct inode *dir, struct ext4_filename *fname, in ext4_search_dir() argument
1395 ext4_match(dir, fname, de)) { in ext4_search_dir()
1398 if (ext4_check_dir_entry(dir, NULL, de, bh, search_buf, in ext4_search_dir()
1406 dir->i_sb->s_blocksize); in ext4_search_dir()
1415 static int is_dx_internal_node(struct inode *dir, ext4_lblk_t block, in is_dx_internal_node() argument
1418 struct super_block *sb = dir->i_sb; in is_dx_internal_node()
1420 if (!is_dx(dir)) in is_dx_internal_node()
1442 static struct buffer_head *__ext4_find_entry(struct inode *dir, in __ext4_find_entry() argument
1460 sb = dir->i_sb; in __ext4_find_entry()
1465 if (ext4_has_inline_data(dir)) { in __ext4_find_entry()
1467 ret = ext4_find_inline_entry(dir, fname, res_dir, in __ext4_find_entry()
1486 if (is_dx(dir)) { in __ext4_find_entry()
1487 ret = ext4_dx_find_entry(dir, fname, res_dir); in __ext4_find_entry()
1499 nblocks = dir->i_size >> EXT4_BLOCK_SIZE_BITS(sb); in __ext4_find_entry()
1504 start = EXT4_I(dir)->i_dir_start_lookup; in __ext4_find_entry()
1522 retval = ext4_bread_batch(dir, block, ra_max, in __ext4_find_entry()
1534 EXT4_ERROR_INODE_ERR(dir, EIO, in __ext4_find_entry()
1542 !is_dx_internal_node(dir, block, in __ext4_find_entry()
1544 !ext4_dirblock_csum_verify(dir, bh)) { in __ext4_find_entry()
1545 EXT4_ERROR_INODE_ERR(dir, EFSBADCRC, in __ext4_find_entry()
1553 i = search_dirblock(bh, dir, fname, in __ext4_find_entry()
1556 EXT4_I(dir)->i_dir_start_lookup = block; in __ext4_find_entry()
1574 nblocks = dir->i_size >> EXT4_BLOCK_SIZE_BITS(sb); in __ext4_find_entry()
1587 static struct buffer_head *ext4_find_entry(struct inode *dir, in ext4_find_entry() argument
1596 err = ext4_fname_setup_filename(dir, d_name, 1, &fname); in ext4_find_entry()
1602 bh = __ext4_find_entry(dir, &fname, res_dir, inlined); in ext4_find_entry()
1608 static struct buffer_head *ext4_lookup_entry(struct inode *dir, in ext4_lookup_entry() argument
1616 err = ext4_fname_prepare_lookup(dir, dentry, &fname); in ext4_lookup_entry()
1622 bh = __ext4_find_entry(dir, &fname, res_dir, NULL); in ext4_lookup_entry()
1628 static struct buffer_head * ext4_dx_find_entry(struct inode *dir, in ext4_dx_find_entry() argument
1632 struct super_block * sb = dir->i_sb; in ext4_dx_find_entry()
1641 frame = dx_probe(fname, dir, NULL, frames); in ext4_dx_find_entry()
1646 bh = ext4_read_dirblock(dir, block, DIRENT_HTREE); in ext4_dx_find_entry()
1650 retval = search_dirblock(bh, dir, fname, in ext4_dx_find_entry()
1662 retval = ext4_htree_next_block(dir, fname->hinfo.hash, frame, in ext4_dx_find_entry()
1665 ext4_warning_inode(dir, in ext4_dx_find_entry()
1681 static struct dentry *ext4_lookup(struct inode *dir, struct dentry *dentry, unsigned int flags) in ext4_lookup() argument
1690 bh = ext4_lookup_entry(dir, dentry, &de); in ext4_lookup()
1697 if (!ext4_valid_inum(dir->i_sb, ino)) { in ext4_lookup()
1698 EXT4_ERROR_INODE(dir, "bad inode number: %u", ino); in ext4_lookup()
1701 if (unlikely(ino == dir->i_ino)) { in ext4_lookup()
1702 EXT4_ERROR_INODE(dir, "'%pd' linked to parent dir", in ext4_lookup()
1706 inode = ext4_iget(dir->i_sb, ino, EXT4_IGET_NORMAL); in ext4_lookup()
1708 EXT4_ERROR_INODE(dir, in ext4_lookup()
1713 if (!IS_ERR(inode) && IS_ENCRYPTED(dir) && in ext4_lookup()
1715 !fscrypt_has_permitted_context(dir, inode)) { in ext4_lookup()
1718 dir->i_ino, inode->i_ino); in ext4_lookup()
1725 if (!inode && IS_CASEFOLDED(dir)) { in ext4_lookup()
1816 static struct ext4_dir_entry_2 *do_split(handle_t *handle, struct inode *dir, in do_split() argument
1820 unsigned blocksize = dir->i_sb->s_blocksize; in do_split()
1832 if (ext4_has_metadata_csum(dir->i_sb)) in do_split()
1835 bh2 = ext4_append(handle, dir, &newblock); in do_split()
1856 count = dx_make_map(dir, (struct ext4_dir_entry_2 *) data1, in do_split()
1903 dxtrace(dx_show_leaf(dir, hinfo, (struct ext4_dir_entry_2 *) data1, in do_split()
1905 dxtrace(dx_show_leaf(dir, hinfo, (struct ext4_dir_entry_2 *) data2, in do_split()
1914 err = ext4_handle_dirty_dirblock(handle, dir, bh2); in do_split()
1917 err = ext4_handle_dirty_dx_node(handle, dir, frame->bh); in do_split()
1928 ext4_std_error(dir->i_sb, err); in do_split()
1932 int ext4_find_dest_de(struct inode *dir, struct inode *inode, in ext4_find_dest_de() argument
1947 if (ext4_check_dir_entry(dir, NULL, de, bh, in ext4_find_dest_de()
1950 if (ext4_match(dir, fname, de)) in ext4_find_dest_de()
1999 struct inode *dir, in add_dirent_to_buf() argument
2003 unsigned int blocksize = dir->i_sb->s_blocksize; in add_dirent_to_buf()
2011 err = ext4_find_dest_de(dir, inode, bh, bh->b_data, in add_dirent_to_buf()
2019 ext4_std_error(dir->i_sb, err); in add_dirent_to_buf()
2037 dir->i_mtime = dir->i_ctime = current_time(dir); in add_dirent_to_buf()
2038 ext4_update_dx_flag(dir); in add_dirent_to_buf()
2039 inode_inc_iversion(dir); in add_dirent_to_buf()
2040 err2 = ext4_mark_inode_dirty(handle, dir); in add_dirent_to_buf()
2042 err = ext4_handle_dirty_dirblock(handle, dir, bh); in add_dirent_to_buf()
2044 ext4_std_error(dir->i_sb, err); in add_dirent_to_buf()
2053 struct inode *dir, in make_indexed_dir() argument
2072 blocksize = dir->i_sb->s_blocksize; in make_indexed_dir()
2073 dxtrace(printk(KERN_DEBUG "Creating index: inode %lu\n", dir->i_ino)); in make_indexed_dir()
2077 ext4_std_error(dir->i_sb, retval); in make_indexed_dir()
2088 EXT4_ERROR_INODE(dir, "invalid rec_len for '..'"); in make_indexed_dir()
2095 bh2 = ext4_append(handle, dir, &block); in make_indexed_dir()
2100 ext4_set_inode_flag(dir, EXT4_INODE_INDEX); in make_indexed_dir()
2120 root->info.hash_version = EXT4_SB(dir->i_sb)->s_def_hash_version; in make_indexed_dir()
2124 dx_set_limit(entries, dx_root_limit(dir, sizeof(root->info))); in make_indexed_dir()
2129 fname->hinfo.hash_version += EXT4_SB(dir->i_sb)->s_hash_unsigned; in make_indexed_dir()
2130 fname->hinfo.seed = EXT4_SB(dir->i_sb)->s_hash_seed; in make_indexed_dir()
2131 ext4fs_dirhash(dir, fname_name(fname), fname_len(fname), &fname->hinfo); in make_indexed_dir()
2139 retval = ext4_handle_dirty_dx_node(handle, dir, frame->bh); in make_indexed_dir()
2142 retval = ext4_handle_dirty_dirblock(handle, dir, bh2); in make_indexed_dir()
2146 de = do_split(handle,dir, &bh2, frame, &fname->hinfo); in make_indexed_dir()
2152 retval = add_dirent_to_buf(handle, fname, dir, inode, de, bh2); in make_indexed_dir()
2160 ext4_mark_inode_dirty(handle, dir); in make_indexed_dir()
2179 struct inode *dir = d_inode(dentry->d_parent); in ext4_add_entry() local
2193 sb = dir->i_sb; in ext4_add_entry()
2199 if (sb_has_strict_encoding(sb) && IS_CASEFOLDED(dir) && in ext4_add_entry()
2204 retval = ext4_fname_setup_filename(dir, &dentry->d_name, 0, &fname); in ext4_add_entry()
2208 if (ext4_has_inline_data(dir)) { in ext4_add_entry()
2209 retval = ext4_try_add_inline_entry(handle, &fname, dir, inode); in ext4_add_entry()
2218 if (is_dx(dir)) { in ext4_add_entry()
2219 retval = ext4_dx_add_entry(handle, &fname, dir, inode); in ext4_add_entry()
2224 EXT4_ERROR_INODE(dir, in ext4_add_entry()
2229 ext4_clear_inode_flag(dir, EXT4_INODE_INDEX); in ext4_add_entry()
2231 retval = ext4_mark_inode_dirty(handle, dir); in ext4_add_entry()
2235 blocks = dir->i_size >> sb->s_blocksize_bits; in ext4_add_entry()
2237 bh = ext4_read_dirblock(dir, block, DIRENT); in ext4_add_entry()
2239 bh = ext4_bread(handle, dir, block, in ext4_add_entry()
2248 retval = add_dirent_to_buf(handle, &fname, dir, inode, in ext4_add_entry()
2255 retval = make_indexed_dir(handle, &fname, dir, in ext4_add_entry()
2262 bh = ext4_append(handle, dir, &block); in ext4_add_entry()
2276 retval = add_dirent_to_buf(handle, &fname, dir, inode, de, bh); in ext4_add_entry()
2289 struct inode *dir, struct inode *inode) in ext4_dx_add_entry() argument
2294 struct super_block *sb = dir->i_sb; in ext4_dx_add_entry()
2301 frame = dx_probe(fname, dir, NULL, frames); in ext4_dx_add_entry()
2306 bh = ext4_read_dirblock(dir, dx_get_block(frame->at), DIRENT_HTREE); in ext4_dx_add_entry()
2318 err = add_dirent_to_buf(handle, fname, dir, inode, NULL, bh); in ext4_dx_add_entry()
2350 dir->i_ino, levels); in ext4_dx_add_entry()
2360 bh2 = ext4_append(handle, dir, &newblock); in ext4_dx_add_entry()
2390 dx_set_limit(entries2, dx_node_limit(dir)); in ext4_dx_add_entry()
2402 err = ext4_handle_dirty_dx_node(handle, dir, bh2); in ext4_dx_add_entry()
2406 err = ext4_handle_dirty_dx_node(handle, dir, in ext4_dx_add_entry()
2411 err = ext4_handle_dirty_dx_node(handle, dir, in ext4_dx_add_entry()
2419 dx_set_limit(entries2, dx_node_limit(dir)); in ext4_dx_add_entry()
2429 err = ext4_handle_dirty_dx_node(handle, dir, frame->bh); in ext4_dx_add_entry()
2432 err = ext4_handle_dirty_dx_node(handle, dir, bh2); in ext4_dx_add_entry()
2438 de = do_split(handle, dir, &bh, frame, &fname->hinfo); in ext4_dx_add_entry()
2443 err = add_dirent_to_buf(handle, fname, dir, inode, de, bh); in ext4_dx_add_entry()
2447 ext4_std_error(dir->i_sb, err); /* this is a no-op if err == 0 */ in ext4_dx_add_entry()
2463 int ext4_generic_delete_entry(struct inode *dir, in ext4_generic_delete_entry() argument
2471 unsigned int blocksize = dir->i_sb->s_blocksize; in ext4_generic_delete_entry()
2478 if (ext4_check_dir_entry(dir, NULL, de, bh, in ext4_generic_delete_entry()
2491 inode_inc_iversion(dir); in ext4_generic_delete_entry()
2502 struct inode *dir, in ext4_delete_entry() argument
2508 if (ext4_has_inline_data(dir)) { in ext4_delete_entry()
2510 err = ext4_delete_inline_entry(handle, dir, de_del, bh, in ext4_delete_entry()
2516 if (ext4_has_metadata_csum(dir->i_sb)) in ext4_delete_entry()
2524 err = ext4_generic_delete_entry(dir, de_del, bh, bh->b_data, in ext4_delete_entry()
2525 dir->i_sb->s_blocksize, csum_size); in ext4_delete_entry()
2530 err = ext4_handle_dirty_dirblock(handle, dir, bh); in ext4_delete_entry()
2537 ext4_std_error(dir->i_sb, err); in ext4_delete_entry()
2580 struct inode *dir = d_inode(dentry->d_parent); in ext4_add_nondir() local
2585 if (IS_DIRSYNC(dir)) in ext4_add_nondir()
2605 static int ext4_create(struct inode *dir, struct dentry *dentry, umode_t mode, in ext4_create() argument
2612 err = dquot_initialize(dir); in ext4_create()
2616 credits = (EXT4_DATA_TRANS_BLOCKS(dir->i_sb) + in ext4_create()
2619 inode = ext4_new_inode_start_handle(dir, mode, &dentry->d_name, 0, in ext4_create()
2635 if (err == -ENOSPC && ext4_should_retry_alloc(dir->i_sb, &retries)) in ext4_create()
2640 static int ext4_mknod(struct inode *dir, struct dentry *dentry, in ext4_mknod() argument
2647 err = dquot_initialize(dir); in ext4_mknod()
2651 credits = (EXT4_DATA_TRANS_BLOCKS(dir->i_sb) + in ext4_mknod()
2654 inode = ext4_new_inode_start_handle(dir, mode, &dentry->d_name, 0, in ext4_mknod()
2669 if (err == -ENOSPC && ext4_should_retry_alloc(dir->i_sb, &retries)) in ext4_mknod()
2674 static int ext4_tmpfile(struct inode *dir, struct dentry *dentry, umode_t mode) in ext4_tmpfile() argument
2680 err = dquot_initialize(dir); in ext4_tmpfile()
2685 inode = ext4_new_inode_start_handle(dir, mode, in ext4_tmpfile()
2688 EXT4_MAXQUOTAS_INIT_BLOCKS(dir->i_sb) + in ext4_tmpfile()
2705 if (err == -ENOSPC && ext4_should_retry_alloc(dir->i_sb, &retries)) in ext4_tmpfile()
2742 int ext4_init_new_dir(handle_t *handle, struct inode *dir, in ext4_init_new_dir() argument
2748 unsigned int blocksize = dir->i_sb->s_blocksize; in ext4_init_new_dir()
2752 if (ext4_has_metadata_csum(dir->i_sb)) in ext4_init_new_dir()
2756 err = ext4_try_create_inline_dir(handle, dir, inode); in ext4_init_new_dir()
2768 ext4_init_dot_dotdot(inode, de, blocksize, csum_size, dir->i_ino, 0); in ext4_init_new_dir()
2783 static int ext4_mkdir(struct inode *dir, struct dentry *dentry, umode_t mode) in ext4_mkdir() argument
2789 if (EXT4_DIR_LINK_MAX(dir)) in ext4_mkdir()
2792 err = dquot_initialize(dir); in ext4_mkdir()
2796 credits = (EXT4_DATA_TRANS_BLOCKS(dir->i_sb) + in ext4_mkdir()
2799 inode = ext4_new_inode_start_handle(dir, S_IFDIR | mode, in ext4_mkdir()
2809 err = ext4_init_new_dir(handle, dir, inode); in ext4_mkdir()
2827 ext4_inc_count(dir); in ext4_mkdir()
2829 ext4_update_dx_flag(dir); in ext4_mkdir()
2830 err = ext4_mark_inode_dirty(handle, dir); in ext4_mkdir()
2835 if (IS_DIRSYNC(dir)) in ext4_mkdir()
2842 if (err == -ENOSPC && ext4_should_retry_alloc(dir->i_sb, &retries)) in ext4_mkdir()
3100 static int ext4_rmdir(struct inode *dir, struct dentry *dentry) in ext4_rmdir() argument
3108 if (unlikely(ext4_forced_shutdown(EXT4_SB(dir->i_sb)))) in ext4_rmdir()
3113 retval = dquot_initialize(dir); in ext4_rmdir()
3121 bh = ext4_find_entry(dir, &dentry->d_name, &de, NULL); in ext4_rmdir()
3137 handle = ext4_journal_start(dir, EXT4_HT_DIR, in ext4_rmdir()
3138 EXT4_DATA_TRANS_BLOCKS(dir->i_sb)); in ext4_rmdir()
3145 if (IS_DIRSYNC(dir)) in ext4_rmdir()
3148 retval = ext4_delete_entry(handle, dir, de, bh); in ext4_rmdir()
3163 inode->i_ctime = dir->i_ctime = dir->i_mtime = current_time(inode); in ext4_rmdir()
3167 ext4_dec_count(dir); in ext4_rmdir()
3168 ext4_update_dx_flag(dir); in ext4_rmdir()
3170 retval = ext4_mark_inode_dirty(handle, dir); in ext4_rmdir()
3179 if (IS_CASEFOLDED(dir)) in ext4_rmdir()
3190 int __ext4_unlink(handle_t *handle, struct inode *dir, const struct qstr *d_name, in __ext4_unlink() argument
3198 bh = ext4_find_entry(dir, d_name, &de, NULL); in __ext4_unlink()
3217 if (IS_DIRSYNC(dir)) in __ext4_unlink()
3221 retval = ext4_delete_entry(handle, dir, de, bh); in __ext4_unlink()
3224 dir->i_ctime = dir->i_mtime = current_time(dir); in __ext4_unlink()
3225 ext4_update_dx_flag(dir); in __ext4_unlink()
3226 retval = ext4_mark_inode_dirty(handle, dir); in __ext4_unlink()
3247 static int ext4_unlink(struct inode *dir, struct dentry *dentry) in ext4_unlink() argument
3252 if (unlikely(ext4_forced_shutdown(EXT4_SB(dir->i_sb)))) in ext4_unlink()
3255 trace_ext4_unlink_enter(dir, dentry); in ext4_unlink()
3260 retval = dquot_initialize(dir); in ext4_unlink()
3267 handle = ext4_journal_start(dir, EXT4_HT_DIR, in ext4_unlink()
3268 EXT4_DATA_TRANS_BLOCKS(dir->i_sb)); in ext4_unlink()
3274 retval = __ext4_unlink(handle, dir, &dentry->d_name, d_inode(dentry)); in ext4_unlink()
3284 if (IS_CASEFOLDED(dir)) in ext4_unlink()
3295 static int ext4_symlink(struct inode *dir, in ext4_symlink() argument
3304 if (unlikely(ext4_forced_shutdown(EXT4_SB(dir->i_sb)))) in ext4_symlink()
3307 err = fscrypt_prepare_symlink(dir, symname, len, dir->i_sb->s_blocksize, in ext4_symlink()
3312 err = dquot_initialize(dir); in ext4_symlink()
3323 credits = 4 + EXT4_MAXQUOTAS_INIT_BLOCKS(dir->i_sb) + in ext4_symlink()
3332 credits = EXT4_DATA_TRANS_BLOCKS(dir->i_sb) + in ext4_symlink()
3336 inode = ext4_new_inode_start_handle(dir, S_IFLNK|S_IRWXUGO, in ext4_symlink()
3382 handle = ext4_journal_start(dir, EXT4_HT_DIR, in ext4_symlink()
3383 EXT4_DATA_TRANS_BLOCKS(dir->i_sb) + in ext4_symlink()
3425 int __ext4_link(struct inode *dir, struct inode *inode, struct dentry *dentry) in __ext4_link() argument
3430 handle = ext4_journal_start(dir, EXT4_HT_DIR, in __ext4_link()
3431 (EXT4_DATA_TRANS_BLOCKS(dir->i_sb) + in __ext4_link()
3436 if (IS_DIRSYNC(dir)) in __ext4_link()
3458 if (err == -ENOSPC && ext4_should_retry_alloc(dir->i_sb, &retries)) in __ext4_link()
3464 struct inode *dir, struct dentry *dentry) in ext4_link() argument
3472 err = fscrypt_prepare_link(old_dentry, dir, dentry); in ext4_link()
3476 if ((ext4_test_inode_flag(dir, EXT4_INODE_PROJINHERIT)) && in ext4_link()
3477 (!projid_eq(EXT4_I(dir)->i_projid, in ext4_link()
3481 err = dquot_initialize(dir); in ext4_link()
3484 return __ext4_link(dir, inode, dentry); in ext4_link()
3520 struct inode *dir; member
3546 if (le32_to_cpu(ent->parent_de->inode) != ent->dir->i_ino) in ext4_rename_dir_prepare()
3572 ext4_std_error(ent->dir->i_sb, retval); in ext4_rename_dir_finish()
3588 if (ext4_has_feature_filetype(ent->dir->i_sb)) in ext4_setent()
3590 inode_inc_iversion(ent->dir); in ext4_setent()
3591 ent->dir->i_ctime = ent->dir->i_mtime = in ext4_setent()
3592 current_time(ent->dir); in ext4_setent()
3593 retval = ext4_mark_inode_dirty(handle, ent->dir); in ext4_setent()
3596 retval2 = ext4_handle_dirty_dirblock(handle, ent->dir, ent->bh); in ext4_setent()
3598 ext4_std_error(ent->dir->i_sb, retval2); in ext4_setent()
3608 static int ext4_find_delete_entry(handle_t *handle, struct inode *dir, in ext4_find_delete_entry() argument
3615 bh = ext4_find_entry(dir, d_name, &de, NULL); in ext4_find_delete_entry()
3619 retval = ext4_delete_entry(handle, dir, de, bh); in ext4_find_delete_entry()
3640 retval = ext4_find_delete_entry(handle, ent->dir, in ext4_rename_delete()
3643 retval = ext4_delete_entry(handle, ent->dir, ent->de, ent->bh); in ext4_rename_delete()
3645 retval = ext4_find_delete_entry(handle, ent->dir, in ext4_rename_delete()
3651 ext4_warning_inode(ent->dir, in ext4_rename_delete()
3653 ent->dir->i_nlink, retval); in ext4_rename_delete()
3661 ext4_dec_count(ent->dir); in ext4_update_dir_count()
3663 ext4_inc_count(ent->dir); in ext4_update_dir_count()
3664 ext4_mark_inode_dirty(handle, ent->dir); in ext4_update_dir_count()
3679 credits += (EXT4_MAXQUOTAS_TRANS_BLOCKS(ent->dir->i_sb) + in ext4_whiteout_for_rename()
3682 wh = ext4_new_inode_start_handle(ent->dir, S_IFCHR | WHITEOUT_MODE, in ext4_whiteout_for_rename()
3691 ext4_should_retry_alloc(ent->dir->i_sb, &retries)) in ext4_whiteout_for_rename()
3715 .dir = old_dir, in ext4_rename()
3720 .dir = new_dir, in ext4_rename()
3741 retval = dquot_initialize(old.dir); in ext4_rename()
3744 retval = dquot_initialize(new.dir); in ext4_rename()
3756 old.bh = ext4_find_entry(old.dir, &old.dentry->d_name, &old.de, NULL); in ext4_rename()
3769 new.bh = ext4_find_entry(new.dir, &new.dentry->d_name, in ext4_rename()
3782 if (new.inode && !test_opt(new.dir->i_sb, NO_AUTO_DA_ALLOC)) in ext4_rename()
3785 credits = (2 * EXT4_DATA_TRANS_BLOCKS(old.dir->i_sb) + in ext4_rename()
3788 handle = ext4_journal_start(old.dir, EXT4_HT_DIR, credits); in ext4_rename()
3803 if (IS_DIRSYNC(old.dir) || IS_DIRSYNC(new.dir)) in ext4_rename()
3813 if (new.dir != old.dir && EXT4_DIR_LINK_MAX(new.dir)) in ext4_rename()
3827 force_reread = (new.dir->i_ino == old.dir->i_ino && in ext4_rename()
3828 ext4_test_inode_flag(new.dir, EXT4_INODE_INLINE_DATA)); in ext4_rename()
3855 force_reread = !ext4_test_inode_flag(new.dir, in ext4_rename()
3878 old.dir->i_ctime = old.dir->i_mtime = current_time(old.dir); in ext4_rename()
3879 ext4_update_dx_flag(old.dir); in ext4_rename()
3881 retval = ext4_rename_dir_finish(handle, &old, new.dir->i_ino); in ext4_rename()
3885 ext4_dec_count(old.dir); in ext4_rename()
3892 ext4_inc_count(new.dir); in ext4_rename()
3893 ext4_update_dx_flag(new.dir); in ext4_rename()
3894 retval = ext4_mark_inode_dirty(handle, new.dir); in ext4_rename()
3899 retval = ext4_mark_inode_dirty(handle, old.dir); in ext4_rename()
3947 .dir = old_dir, in ext4_cross_rename()
3952 .dir = new_dir, in ext4_cross_rename()
3968 retval = dquot_initialize(old.dir); in ext4_cross_rename()
3971 retval = dquot_initialize(new.dir); in ext4_cross_rename()
3975 old.bh = ext4_find_entry(old.dir, &old.dentry->d_name, in ext4_cross_rename()
3989 new.bh = ext4_find_entry(new.dir, &new.dentry->d_name, in ext4_cross_rename()
4001 handle = ext4_journal_start(old.dir, EXT4_HT_DIR, in ext4_cross_rename()
4002 (2 * EXT4_DATA_TRANS_BLOCKS(old.dir->i_sb) + in ext4_cross_rename()
4010 if (IS_DIRSYNC(old.dir) || IS_DIRSYNC(new.dir)) in ext4_cross_rename()
4030 if (old.dir != new.dir && old.is_dir != new.is_dir) { in ext4_cross_rename()
4034 if ((old.dir_nlink_delta > 0 && EXT4_DIR_LINK_MAX(old.dir)) || in ext4_cross_rename()
4035 (new.dir_nlink_delta > 0 && EXT4_DIR_LINK_MAX(new.dir))) in ext4_cross_rename()
4064 retval = ext4_rename_dir_finish(handle, &old, new.dir->i_ino); in ext4_cross_rename()
4069 retval = ext4_rename_dir_finish(handle, &new, old.dir->i_ino); in ext4_cross_rename()