Lines Matching defs:dir
3 * fs/f2fs/dir.c
20 static inline bool f2fs_should_fallback_to_linear(struct inode *dir)
22 struct f2fs_sb_info *sbi = F2FS_I_SB(dir);
62 /* If @dir is casefolded, initialize @fname->cf_name from @fname->usr_fname. */
63 int f2fs_init_casefolded_name(const struct inode *dir,
66 struct super_block *sb = dir->i_sb;
70 if (IS_CASEFOLDED(dir) &&
104 static int __f2fs_setup_filename(const struct inode *dir,
121 err = f2fs_init_casefolded_name(dir, fname);
126 f2fs_hash_filename(dir, fname);
132 * Prepare to search for @iname in @dir. This is similar to
137 int f2fs_setup_filename(struct inode *dir, const struct qstr *iname,
143 err = fscrypt_setup_filename(dir, iname, lookup, &crypt_name);
147 return __f2fs_setup_filename(dir, &crypt_name, fname);
151 * Prepare to look up @dentry in @dir. This is similar to
156 int f2fs_prepare_lookup(struct inode *dir, struct dentry *dentry,
162 err = fscrypt_prepare_lookup(dir, dentry, &crypt_name);
166 return __f2fs_setup_filename(dir, &crypt_name, fname);
191 static struct f2fs_dir_entry *find_in_block(struct inode *dir,
202 make_dentry_ptr_block(dir, &d, dentry_blk);
206 static inline int f2fs_match_name(const struct inode *dir,
214 return generic_ci_match(dir, fname->usr_fname,
276 static struct f2fs_dir_entry *find_in_level(struct inode *dir,
290 nbucket = dir_buckets(level, F2FS_I(dir)->i_dir_level);
296 bidx = dir_block_index(level, F2FS_I(dir)->i_dir_level,
303 dentry_folio = f2fs_find_data_folio(dir, bidx, &next_pgofs);
315 de = find_in_block(dir, dentry_folio, fname, &max_slots, use_hash);
336 if (room && F2FS_I(dir)->chash != fname->hash) {
337 F2FS_I(dir)->chash = fname->hash;
338 F2FS_I(dir)->clevel = level;
346 struct f2fs_dir_entry *__f2fs_find_entry(struct inode *dir,
350 unsigned long npages = dir_blocks(dir);
361 if (f2fs_has_inline_dentry(dir)) {
362 de = f2fs_find_in_inline_dir(dir, fname, res_folio, use_hash);
369 max_depth = F2FS_I(dir)->i_current_depth;
371 f2fs_warn(F2FS_I_SB(dir), "Corrupted max_depth of %llu: %u",
372 dir->i_ino, max_depth);
374 f2fs_i_depth_write(dir, max_depth);
378 de = find_in_level(dir, level, fname, res_folio, use_hash);
385 if (f2fs_should_fallback_to_linear(dir) &&
386 IS_CASEFOLDED(dir) && !de && use_hash) {
393 F2FS_I(dir)->task = current;
403 struct f2fs_dir_entry *f2fs_find_entry(struct inode *dir,
410 err = f2fs_setup_filename(dir, child, 1, &fname);
419 de = __f2fs_find_entry(dir, &fname, res_folio);
425 struct f2fs_dir_entry *f2fs_parent_dir(struct inode *dir, struct folio **f)
427 return f2fs_find_entry(dir, &dotdot_name, f);
430 ino_t f2fs_inode_by_name(struct inode *dir, const struct qstr *qstr,
436 de = f2fs_find_entry(dir, qstr, folio);
445 void f2fs_set_link(struct inode *dir, struct f2fs_dir_entry *de,
448 enum page_type type = f2fs_has_inline_dentry(dir) ? NODE : DATA;
456 inode_set_mtime_to_ts(dir, inode_set_ctime_current(dir));
457 f2fs_mark_inode_dirty_sync(dir, false);
461 static void init_dent_inode(struct inode *dir, struct inode *inode,
476 if (IS_ENCRYPTED(dir)) {
485 if (IS_CASEFOLDED(dir)) {
534 struct folio *f2fs_init_inode_metadata(struct inode *inode, struct inode *dir,
548 err = make_empty_dir(inode, dir, folio);
556 err = f2fs_init_acl(inode, dir, folio, dfolio);
560 err = f2fs_init_security(inode, dir,
572 folio = f2fs_get_inode_folio(F2FS_I_SB(dir), inode->i_ino);
577 init_dent_inode(dir, inode, fname, folio);
591 f2fs_remove_orphan_inode(F2FS_I_SB(dir), inode->i_ino);
603 void f2fs_update_parent_metadata(struct inode *dir, struct inode *inode,
608 f2fs_i_links_write(dir, true);
611 inode_set_mtime_to_ts(dir, inode_set_ctime_current(dir));
612 f2fs_mark_inode_dirty_sync(dir, false);
614 if (F2FS_I(dir)->i_current_depth != current_depth)
615 f2fs_i_depth_write(dir, current_depth);
641 bool f2fs_has_enough_room(struct inode *dir, struct folio *ifolio,
648 make_dentry_ptr_inline(dir, &d, inline_data_addr(dir, ifolio));
677 int f2fs_add_regular_entry(struct inode *dir, const struct f2fs_filename *fname,
694 current_depth = F2FS_I(dir)->i_current_depth;
695 if (F2FS_I(dir)->chash == fname->hash) {
696 level = F2FS_I(dir)->clevel;
697 F2FS_I(dir)->chash = 0;
701 if (time_to_inject(F2FS_I_SB(dir), FAULT_DIR_DEPTH))
711 nbucket = dir_buckets(level, F2FS_I(dir)->i_dir_level);
714 bidx = dir_block_index(level, F2FS_I(dir)->i_dir_level,
718 dentry_folio = f2fs_get_new_data_folio(dir, NULL, block, true);
739 folio = f2fs_init_inode_metadata(inode, dir, fname, NULL);
753 f2fs_i_pino_write(inode, dir->i_ino);
762 f2fs_update_parent_metadata(dir, inode, current_depth);
772 int f2fs_add_dentry(struct inode *dir, const struct f2fs_filename *fname,
777 if (f2fs_has_inline_dentry(dir)) {
782 f2fs_down_read(&F2FS_I(dir)->i_xattr_sem);
783 err = f2fs_add_inline_entry(dir, fname, inode, ino, mode);
784 f2fs_up_read(&F2FS_I(dir)->i_xattr_sem);
787 err = f2fs_add_regular_entry(dir, fname, inode, ino, mode);
789 f2fs_update_time(F2FS_I_SB(dir), REQ_TIME);
797 int f2fs_do_add_link(struct inode *dir, const struct qstr *name,
805 err = f2fs_setup_filename(dir, name, 0, &fname);
816 if (current != F2FS_I(dir)->task) {
817 de = __f2fs_find_entry(dir, &fname, &folio);
818 F2FS_I(dir)->task = NULL;
826 err = f2fs_add_dentry(dir, &fname, inode, ino, mode);
832 int f2fs_do_tmpfile(struct inode *inode, struct inode *dir,
839 folio = f2fs_init_inode_metadata(inode, dir, fname, NULL);
853 void f2fs_drop_nlink(struct inode *dir, struct inode *inode)
855 struct f2fs_sb_info *sbi = F2FS_I_SB(dir);
860 f2fs_i_links_write(dir, false);
881 struct inode *dir, struct inode *inode)
889 f2fs_update_time(F2FS_I_SB(dir), REQ_TIME);
891 if (F2FS_OPTION(F2FS_I_SB(dir)).fsync_mode == FSYNC_MODE_STRICT)
892 f2fs_add_ino_entry(F2FS_I_SB(dir), dir->i_ino, TRANS_DIR_INO);
894 if (f2fs_has_inline_dentry(dir))
895 return f2fs_delete_inline_entry(dentry, folio, dir, inode);
912 !f2fs_truncate_hole(dir, index, index + 1)) {
918 inode_dec_dirty_pages(dir);
919 f2fs_remove_dirty_inode(dir);
923 inode_set_mtime_to_ts(dir, inode_set_ctime_current(dir));
924 f2fs_mark_inode_dirty_sync(dir, false);
927 f2fs_drop_nlink(dir, inode);
930 bool f2fs_empty_dir(struct inode *dir)
935 unsigned long nblock = dir_blocks(dir);
937 if (f2fs_has_inline_dentry(dir))
938 return f2fs_empty_inline_dir(dir);
944 dentry_folio = f2fs_find_data_folio(dir, bidx, &next_pgofs);
1095 /* readahead for multi pages of dir */