Lines Matching refs: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,
50 struct super_block *sb = dir->i_sb;
52 if (IS_CASEFOLDED(dir) &&
74 static int __f2fs_setup_filename(const struct inode *dir,
91 err = f2fs_init_casefolded_name(dir, fname);
96 f2fs_hash_filename(dir, fname);
102 * Prepare to search for @iname in @dir. This is similar to
107 int f2fs_setup_filename(struct inode *dir, const struct qstr *iname,
113 err = fscrypt_setup_filename(dir, iname, lookup, &crypt_name);
117 return __f2fs_setup_filename(dir, &crypt_name, fname);
121 * Prepare to look up @dentry in @dir. This is similar to
126 int f2fs_prepare_lookup(struct inode *dir, struct dentry *dentry,
132 err = fscrypt_prepare_lookup(dir, dentry, &crypt_name);
136 return __f2fs_setup_filename(dir, &crypt_name, fname);
165 static struct f2fs_dir_entry *find_in_block(struct inode *dir,
175 make_dentry_ptr_block(dir, &d, dentry_blk);
186 static int f2fs_match_ci_name(const struct inode *dir, const struct qstr *name,
189 const struct super_block *sb = dir->i_sb;
195 if (IS_ENCRYPTED(dir)) {
199 if (WARN_ON_ONCE(!fscrypt_has_encryption_key(dir)))
205 res = fscrypt_fname_disk_to_usr(dir, 0, 0, &encrypted_name,
231 static inline int f2fs_match_name(const struct inode *dir,
241 return f2fs_match_ci_name(dir, &cf, de_name, de_name_len);
300 static struct f2fs_dir_entry *find_in_level(struct inode *dir,
314 nbucket = dir_buckets(level, F2FS_I(dir)->i_dir_level);
317 bidx = dir_block_index(level, F2FS_I(dir)->i_dir_level,
323 dentry_page = f2fs_find_data_page(dir, bidx, &next_pgofs);
335 de = find_in_block(dir, dentry_page, fname, &max_slots);
352 if (!de && room && F2FS_I(dir)->chash != fname->hash) {
353 F2FS_I(dir)->chash = fname->hash;
354 F2FS_I(dir)->clevel = level;
360 struct f2fs_dir_entry *__f2fs_find_entry(struct inode *dir,
364 unsigned long npages = dir_blocks(dir);
371 if (f2fs_has_inline_dentry(dir)) {
372 de = f2fs_find_in_inline_dir(dir, fname, res_page);
379 max_depth = F2FS_I(dir)->i_current_depth;
381 f2fs_warn(F2FS_I_SB(dir), "Corrupted max_depth of %lu: %u",
382 dir->i_ino, max_depth);
384 f2fs_i_depth_write(dir, max_depth);
388 de = find_in_level(dir, level, fname, res_page);
395 F2FS_I(dir)->task = current;
405 struct f2fs_dir_entry *f2fs_find_entry(struct inode *dir,
412 err = f2fs_setup_filename(dir, child, 1, &fname);
421 de = __f2fs_find_entry(dir, &fname, res_page);
427 struct f2fs_dir_entry *f2fs_parent_dir(struct inode *dir, struct page **p)
429 return f2fs_find_entry(dir, &dotdot_name, p);
432 ino_t f2fs_inode_by_name(struct inode *dir, const struct qstr *qstr,
438 de = f2fs_find_entry(dir, qstr, page);
447 void f2fs_set_link(struct inode *dir, struct f2fs_dir_entry *de,
450 enum page_type type = f2fs_has_inline_dentry(dir) ? NODE : DATA;
458 dir->i_mtime = inode_set_ctime_current(dir);
459 f2fs_mark_inode_dirty_sync(dir, false);
463 static void init_dent_inode(struct inode *dir, struct inode *inode,
478 if (IS_ENCRYPTED(dir)) {
487 if (IS_CASEFOLDED(dir)) {
536 struct page *f2fs_init_inode_metadata(struct inode *inode, struct inode *dir,
550 err = make_empty_dir(inode, dir, page);
558 err = f2fs_init_acl(inode, dir, page, dpage);
562 err = f2fs_init_security(inode, dir,
573 page = f2fs_get_node_page(F2FS_I_SB(dir), inode->i_ino);
578 init_dent_inode(dir, inode, fname, page);
592 f2fs_remove_orphan_inode(F2FS_I_SB(dir), inode->i_ino);
604 void f2fs_update_parent_metadata(struct inode *dir, struct inode *inode,
609 f2fs_i_links_write(dir, true);
612 dir->i_mtime = inode_set_ctime_current(dir);
613 f2fs_mark_inode_dirty_sync(dir, false);
615 if (F2FS_I(dir)->i_current_depth != current_depth)
616 f2fs_i_depth_write(dir, current_depth);
642 bool f2fs_has_enough_room(struct inode *dir, struct page *ipage,
649 make_dentry_ptr_inline(dir, &d, inline_data_addr(dir, ipage));
678 int f2fs_add_regular_entry(struct inode *dir, const struct f2fs_filename *fname,
695 current_depth = F2FS_I(dir)->i_current_depth;
696 if (F2FS_I(dir)->chash == fname->hash) {
697 level = F2FS_I(dir)->clevel;
698 F2FS_I(dir)->chash = 0;
702 if (time_to_inject(F2FS_I_SB(dir), FAULT_DIR_DEPTH))
712 nbucket = dir_buckets(level, F2FS_I(dir)->i_dir_level);
715 bidx = dir_block_index(level, F2FS_I(dir)->i_dir_level,
719 dentry_page = f2fs_get_new_data_page(dir, NULL, block, true);
740 page = f2fs_init_inode_metadata(inode, dir, fname, NULL);
754 f2fs_i_pino_write(inode, dir->i_ino);
763 f2fs_update_parent_metadata(dir, inode, current_depth);
773 int f2fs_add_dentry(struct inode *dir, const struct f2fs_filename *fname,
778 if (f2fs_has_inline_dentry(dir)) {
783 f2fs_down_read(&F2FS_I(dir)->i_xattr_sem);
784 err = f2fs_add_inline_entry(dir, fname, inode, ino, mode);
785 f2fs_up_read(&F2FS_I(dir)->i_xattr_sem);
788 err = f2fs_add_regular_entry(dir, fname, inode, ino, mode);
790 f2fs_update_time(F2FS_I_SB(dir), REQ_TIME);
798 int f2fs_do_add_link(struct inode *dir, const struct qstr *name,
806 err = f2fs_setup_filename(dir, name, 0, &fname);
817 if (current != F2FS_I(dir)->task) {
818 de = __f2fs_find_entry(dir, &fname, &page);
819 F2FS_I(dir)->task = NULL;
827 err = f2fs_add_dentry(dir, &fname, inode, ino, mode);
833 int f2fs_do_tmpfile(struct inode *inode, struct inode *dir,
840 page = f2fs_init_inode_metadata(inode, dir, fname, NULL);
854 void f2fs_drop_nlink(struct inode *dir, struct inode *inode)
856 struct f2fs_sb_info *sbi = F2FS_I_SB(dir);
861 f2fs_i_links_write(dir, false);
882 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, page, dir, inode);
912 !f2fs_truncate_hole(dir, page->index, page->index + 1)) {
918 inode_dec_dirty_pages(dir);
919 f2fs_remove_dirty_inode(dir);
923 dir->i_mtime = 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)
936 unsigned long nblock = dir_blocks(dir);
938 if (f2fs_has_inline_dentry(dir))
939 return f2fs_empty_inline_dir(dir);
944 dentry_page = f2fs_find_data_page(dir, bidx, &next_pgofs);
1096 /* readahead for multi pages of dir */