Lines Matching full:dir

3  * fs/f2fs/dir.c
45 /* If @dir is casefolded, initialize @fname->cf_name from @fname->usr_fname. */
46 int f2fs_init_casefolded_name(const struct inode *dir, in f2fs_init_casefolded_name() argument
50 struct super_block *sb = dir->i_sb; in f2fs_init_casefolded_name()
52 if (IS_CASEFOLDED(dir) && in f2fs_init_casefolded_name()
74 static int __f2fs_setup_filename(const struct inode *dir, in __f2fs_setup_filename() argument
91 err = f2fs_init_casefolded_name(dir, fname); in __f2fs_setup_filename()
96 f2fs_hash_filename(dir, fname); in __f2fs_setup_filename()
102 * Prepare to search for @iname in @dir. This is similar to
107 int f2fs_setup_filename(struct inode *dir, const struct qstr *iname, in f2fs_setup_filename() argument
113 err = fscrypt_setup_filename(dir, iname, lookup, &crypt_name); in f2fs_setup_filename()
117 return __f2fs_setup_filename(dir, &crypt_name, fname); in f2fs_setup_filename()
121 * Prepare to look up @dentry in @dir. This is similar to
126 int f2fs_prepare_lookup(struct inode *dir, struct dentry *dentry, in f2fs_prepare_lookup() argument
132 err = fscrypt_prepare_lookup(dir, dentry, &crypt_name); in f2fs_prepare_lookup()
136 return __f2fs_setup_filename(dir, &crypt_name, fname); in f2fs_prepare_lookup()
166 static struct f2fs_dir_entry *find_in_block(struct inode *dir, in find_in_block() argument
177 make_dentry_ptr_block(dir, &d, dentry_blk); in find_in_block()
188 static int f2fs_match_ci_name(const struct inode *dir, const struct qstr *name, in f2fs_match_ci_name() argument
191 const struct super_block *sb = dir->i_sb; in f2fs_match_ci_name()
197 if (IS_ENCRYPTED(dir)) { in f2fs_match_ci_name()
201 if (WARN_ON_ONCE(!fscrypt_has_encryption_key(dir))) in f2fs_match_ci_name()
207 res = fscrypt_fname_disk_to_usr(dir, 0, 0, &encrypted_name, in f2fs_match_ci_name()
233 static inline int f2fs_match_name(const struct inode *dir, in f2fs_match_name() argument
243 return f2fs_match_ci_name(dir, &cf, de_name, de_name_len); in f2fs_match_name()
303 static struct f2fs_dir_entry *find_in_level(struct inode *dir, in find_in_level() argument
318 nbucket = dir_buckets(level, F2FS_I(dir)->i_dir_level); in find_in_level()
324 bidx = dir_block_index(level, F2FS_I(dir)->i_dir_level, in find_in_level()
330 dentry_page = f2fs_find_data_page(dir, bidx, &next_pgofs); in find_in_level()
342 de = find_in_block(dir, dentry_page, fname, &max_slots, use_hash); in find_in_level()
363 if (room && F2FS_I(dir)->chash != fname->hash) { in find_in_level()
364 F2FS_I(dir)->chash = fname->hash; in find_in_level()
365 F2FS_I(dir)->clevel = level; in find_in_level()
373 struct f2fs_dir_entry *__f2fs_find_entry(struct inode *dir, in __f2fs_find_entry() argument
377 unsigned long npages = dir_blocks(dir); in __f2fs_find_entry()
388 if (f2fs_has_inline_dentry(dir)) { in __f2fs_find_entry()
389 de = f2fs_find_in_inline_dir(dir, fname, res_page, use_hash); in __f2fs_find_entry()
396 max_depth = F2FS_I(dir)->i_current_depth; in __f2fs_find_entry()
398 f2fs_warn(F2FS_I_SB(dir), "Corrupted max_depth of %lu: %u", in __f2fs_find_entry()
399 dir->i_ino, max_depth); in __f2fs_find_entry()
401 f2fs_i_depth_write(dir, max_depth); in __f2fs_find_entry()
405 de = find_in_level(dir, level, fname, res_page, use_hash); in __f2fs_find_entry()
412 if (IS_CASEFOLDED(dir) && !de && use_hash) { in __f2fs_find_entry()
419 F2FS_I(dir)->task = current; in __f2fs_find_entry()
429 struct f2fs_dir_entry *f2fs_find_entry(struct inode *dir, in f2fs_find_entry() argument
436 err = f2fs_setup_filename(dir, child, 1, &fname); in f2fs_find_entry()
445 de = __f2fs_find_entry(dir, &fname, res_page); in f2fs_find_entry()
451 struct f2fs_dir_entry *f2fs_parent_dir(struct inode *dir, struct page **p) in f2fs_parent_dir() argument
453 return f2fs_find_entry(dir, &dotdot_name, p); in f2fs_parent_dir()
456 ino_t f2fs_inode_by_name(struct inode *dir, const struct qstr *qstr, in f2fs_inode_by_name() argument
462 de = f2fs_find_entry(dir, qstr, page); in f2fs_inode_by_name()
471 void f2fs_set_link(struct inode *dir, struct f2fs_dir_entry *de, in f2fs_set_link() argument
474 enum page_type type = f2fs_has_inline_dentry(dir) ? NODE : DATA; in f2fs_set_link()
482 dir->i_mtime = inode_set_ctime_current(dir); in f2fs_set_link()
483 f2fs_mark_inode_dirty_sync(dir, false); in f2fs_set_link()
487 static void init_dent_inode(struct inode *dir, struct inode *inode, in init_dent_inode() argument
502 if (IS_ENCRYPTED(dir)) { in init_dent_inode()
511 if (IS_CASEFOLDED(dir)) { in init_dent_inode()
560 struct page *f2fs_init_inode_metadata(struct inode *inode, struct inode *dir, in f2fs_init_inode_metadata() argument
574 err = make_empty_dir(inode, dir, page); in f2fs_init_inode_metadata()
582 err = f2fs_init_acl(inode, dir, page, dpage); in f2fs_init_inode_metadata()
586 err = f2fs_init_security(inode, dir, in f2fs_init_inode_metadata()
597 page = f2fs_get_node_page(F2FS_I_SB(dir), inode->i_ino); in f2fs_init_inode_metadata()
602 init_dent_inode(dir, inode, fname, page); in f2fs_init_inode_metadata()
616 f2fs_remove_orphan_inode(F2FS_I_SB(dir), inode->i_ino); in f2fs_init_inode_metadata()
628 void f2fs_update_parent_metadata(struct inode *dir, struct inode *inode, in f2fs_update_parent_metadata() argument
633 f2fs_i_links_write(dir, true); in f2fs_update_parent_metadata()
636 dir->i_mtime = inode_set_ctime_current(dir); in f2fs_update_parent_metadata()
637 f2fs_mark_inode_dirty_sync(dir, false); in f2fs_update_parent_metadata()
639 if (F2FS_I(dir)->i_current_depth != current_depth) in f2fs_update_parent_metadata()
640 f2fs_i_depth_write(dir, current_depth); in f2fs_update_parent_metadata()
666 bool f2fs_has_enough_room(struct inode *dir, struct page *ipage, in f2fs_has_enough_room() argument
673 make_dentry_ptr_inline(dir, &d, inline_data_addr(dir, ipage)); in f2fs_has_enough_room()
702 int f2fs_add_regular_entry(struct inode *dir, const struct f2fs_filename *fname, in f2fs_add_regular_entry() argument
719 current_depth = F2FS_I(dir)->i_current_depth; in f2fs_add_regular_entry()
720 if (F2FS_I(dir)->chash == fname->hash) { in f2fs_add_regular_entry()
721 level = F2FS_I(dir)->clevel; in f2fs_add_regular_entry()
722 F2FS_I(dir)->chash = 0; in f2fs_add_regular_entry()
726 if (time_to_inject(F2FS_I_SB(dir), FAULT_DIR_DEPTH)) in f2fs_add_regular_entry()
736 nbucket = dir_buckets(level, F2FS_I(dir)->i_dir_level); in f2fs_add_regular_entry()
739 bidx = dir_block_index(level, F2FS_I(dir)->i_dir_level, in f2fs_add_regular_entry()
743 dentry_page = f2fs_get_new_data_page(dir, NULL, block, true); in f2fs_add_regular_entry()
764 page = f2fs_init_inode_metadata(inode, dir, fname, NULL); in f2fs_add_regular_entry()
778 f2fs_i_pino_write(inode, dir->i_ino); in f2fs_add_regular_entry()
787 f2fs_update_parent_metadata(dir, inode, current_depth); in f2fs_add_regular_entry()
797 int f2fs_add_dentry(struct inode *dir, const struct f2fs_filename *fname, in f2fs_add_dentry() argument
802 if (f2fs_has_inline_dentry(dir)) { in f2fs_add_dentry()
807 f2fs_down_read(&F2FS_I(dir)->i_xattr_sem); in f2fs_add_dentry()
808 err = f2fs_add_inline_entry(dir, fname, inode, ino, mode); in f2fs_add_dentry()
809 f2fs_up_read(&F2FS_I(dir)->i_xattr_sem); in f2fs_add_dentry()
812 err = f2fs_add_regular_entry(dir, fname, inode, ino, mode); in f2fs_add_dentry()
814 f2fs_update_time(F2FS_I_SB(dir), REQ_TIME); in f2fs_add_dentry()
822 int f2fs_do_add_link(struct inode *dir, const struct qstr *name, in f2fs_do_add_link() argument
830 err = f2fs_setup_filename(dir, name, 0, &fname); in f2fs_do_add_link()
841 if (current != F2FS_I(dir)->task) { in f2fs_do_add_link()
842 de = __f2fs_find_entry(dir, &fname, &page); in f2fs_do_add_link()
843 F2FS_I(dir)->task = NULL; in f2fs_do_add_link()
851 err = f2fs_add_dentry(dir, &fname, inode, ino, mode); in f2fs_do_add_link()
857 int f2fs_do_tmpfile(struct inode *inode, struct inode *dir, in f2fs_do_tmpfile() argument
864 page = f2fs_init_inode_metadata(inode, dir, fname, NULL); in f2fs_do_tmpfile()
878 void f2fs_drop_nlink(struct inode *dir, struct inode *inode) in f2fs_drop_nlink() argument
880 struct f2fs_sb_info *sbi = F2FS_I_SB(dir); in f2fs_drop_nlink()
885 f2fs_i_links_write(dir, false); in f2fs_drop_nlink()
906 struct inode *dir, struct inode *inode) in f2fs_delete_entry() argument
913 f2fs_update_time(F2FS_I_SB(dir), REQ_TIME); in f2fs_delete_entry()
915 if (F2FS_OPTION(F2FS_I_SB(dir)).fsync_mode == FSYNC_MODE_STRICT) in f2fs_delete_entry()
916 f2fs_add_ino_entry(F2FS_I_SB(dir), dir->i_ino, TRANS_DIR_INO); in f2fs_delete_entry()
918 if (f2fs_has_inline_dentry(dir)) in f2fs_delete_entry()
919 return f2fs_delete_inline_entry(dentry, page, dir, inode); in f2fs_delete_entry()
936 !f2fs_truncate_hole(dir, page->index, page->index + 1)) { in f2fs_delete_entry()
942 inode_dec_dirty_pages(dir); in f2fs_delete_entry()
943 f2fs_remove_dirty_inode(dir); in f2fs_delete_entry()
947 dir->i_mtime = inode_set_ctime_current(dir); in f2fs_delete_entry()
948 f2fs_mark_inode_dirty_sync(dir, false); in f2fs_delete_entry()
951 f2fs_drop_nlink(dir, inode); in f2fs_delete_entry()
954 bool f2fs_empty_dir(struct inode *dir) in f2fs_empty_dir() argument
960 unsigned long nblock = dir_blocks(dir); in f2fs_empty_dir()
962 if (f2fs_has_inline_dentry(dir)) in f2fs_empty_dir()
963 return f2fs_empty_inline_dir(dir); in f2fs_empty_dir()
968 dentry_page = f2fs_find_data_page(dir, bidx, &next_pgofs); in f2fs_empty_dir()
1119 /* readahead for multi pages of dir */ in f2fs_readdir()