Lines Matching refs:dir
59 static int inherit_flags(const struct inode *dir, umode_t mode) in inherit_flags() argument
62 const struct ubifs_inode *ui = ubifs_inode(dir); in inherit_flags()
64 if (!S_ISDIR(dir->i_mode)) in inherit_flags()
88 struct inode *ubifs_new_inode(struct ubifs_info *c, struct inode *dir, in ubifs_new_inode() argument
96 if (ubifs_crypt_is_encrypted(dir)) { in ubifs_new_inode()
97 err = fscrypt_get_encryption_info(dir); in ubifs_new_inode()
103 if (!fscrypt_has_encryption_key(dir)) in ubifs_new_inode()
122 inode_init_owner(inode, dir, mode); in ubifs_new_inode()
152 ui->flags = inherit_flags(dir, mode); in ubifs_new_inode()
186 err = fscrypt_inherit_context(dir, inode, &encrypted, true); in ubifs_new_inode()
211 static struct dentry *ubifs_lookup(struct inode *dir, struct dentry *dentry, in ubifs_lookup() argument
218 struct ubifs_info *c = dir->i_sb->s_fs_info; in ubifs_lookup()
221 dbg_gen("'%pd' in dir ino %lu", dentry, dir->i_ino); in ubifs_lookup()
223 err = fscrypt_prepare_lookup(dir, dentry, flags); in ubifs_lookup()
227 err = fscrypt_setup_filename(dir, &dentry->d_name, 1, &nm); in ubifs_lookup()
245 dent_key_init_hash(c, &key, dir->i_ino, nm.hash); in ubifs_lookup()
248 dent_key_init(c, &key, dir->i_ino, &nm); in ubifs_lookup()
265 inode = ubifs_iget(dir->i_sb, le64_to_cpu(dent->inum)); in ubifs_lookup()
278 if (ubifs_crypt_is_encrypted(dir) && in ubifs_lookup()
280 !fscrypt_has_permitted_context(dir, inode)) { in ubifs_lookup()
282 dir->i_ino, inode->i_ino); in ubifs_lookup()
293 static int ubifs_create(struct inode *dir, struct dentry *dentry, umode_t mode, in ubifs_create() argument
297 struct ubifs_info *c = dir->i_sb->s_fs_info; in ubifs_create()
300 struct ubifs_inode *dir_ui = ubifs_inode(dir); in ubifs_create()
310 dentry, mode, dir->i_ino); in ubifs_create()
316 err = fscrypt_setup_filename(dir, &dentry->d_name, 0, &nm); in ubifs_create()
322 inode = ubifs_new_inode(c, dir, mode); in ubifs_create()
328 err = ubifs_init_security(dir, inode, &dentry->d_name); in ubifs_create()
333 dir->i_size += sz_change; in ubifs_create()
334 dir_ui->ui_size = dir->i_size; in ubifs_create()
335 dir->i_mtime = dir->i_ctime = inode->i_ctime; in ubifs_create()
336 err = ubifs_jnl_update(c, dir, &nm, inode, 0, 0); in ubifs_create()
348 dir->i_size -= sz_change; in ubifs_create()
349 dir_ui->ui_size = dir->i_size; in ubifs_create()
362 static int do_tmpfile(struct inode *dir, struct dentry *dentry, in do_tmpfile() argument
366 struct ubifs_info *c = dir->i_sb->s_fs_info; in do_tmpfile()
369 struct ubifs_inode *ui, *dir_ui = ubifs_inode(dir); in do_tmpfile()
379 dentry, mode, dir->i_ino); in do_tmpfile()
381 err = fscrypt_setup_filename(dir, &dentry->d_name, 0, &nm); in do_tmpfile()
398 inode = ubifs_new_inode(c, dir, mode); in do_tmpfile()
410 err = ubifs_init_security(dir, inode, &dentry->d_name); in do_tmpfile()
430 err = ubifs_jnl_update(c, dir, &nm, inode, 1, 0); in do_tmpfile()
454 static int ubifs_tmpfile(struct inode *dir, struct dentry *dentry, in ubifs_tmpfile() argument
457 return do_tmpfile(dir, dentry, mode, NULL); in ubifs_tmpfile()
514 struct inode *dir = file_inode(file); in ubifs_readdir() local
515 struct ubifs_info *c = dir->i_sb->s_fs_info; in ubifs_readdir()
516 bool encrypted = ubifs_crypt_is_encrypted(dir); in ubifs_readdir()
518 dbg_gen("dir ino %lu, f_pos %#llx", dir->i_ino, ctx->pos); in ubifs_readdir()
528 err = fscrypt_get_encryption_info(dir); in ubifs_readdir()
532 err = fscrypt_fname_alloc_buffer(dir, UBIFS_MAX_NLEN, &fstr); in ubifs_readdir()
567 lowest_dent_key(c, &key, dir->i_ino); in ubifs_readdir()
585 dent_key_init_hash(c, &key, dir->i_ino, ctx->pos); in ubifs_readdir()
601 ubifs_inode(dir)->creat_sqnum); in ubifs_readdir()
609 err = fscrypt_fname_disk_to_usr(dir, key_hash_flash(c, in ubifs_readdir()
666 static int ubifs_dir_release(struct inode *dir, struct file *file) in ubifs_dir_release() argument
699 static int ubifs_link(struct dentry *old_dentry, struct inode *dir, in ubifs_link() argument
702 struct ubifs_info *c = dir->i_sb->s_fs_info; in ubifs_link()
705 struct ubifs_inode *dir_ui = ubifs_inode(dir); in ubifs_link()
718 inode->i_nlink, dir->i_ino); in ubifs_link()
719 ubifs_assert(c, inode_is_locked(dir)); in ubifs_link()
722 err = fscrypt_prepare_link(old_dentry, dir, dentry); in ubifs_link()
726 err = fscrypt_setup_filename(dir, &dentry->d_name, 0, &nm); in ubifs_link()
738 lock_2_inodes(dir, inode); in ubifs_link()
747 dir->i_size += sz_change; in ubifs_link()
748 dir_ui->ui_size = dir->i_size; in ubifs_link()
749 dir->i_mtime = dir->i_ctime = inode->i_ctime; in ubifs_link()
750 err = ubifs_jnl_update(c, dir, &nm, inode, 0, 0); in ubifs_link()
753 unlock_2_inodes(dir, inode); in ubifs_link()
761 dir->i_size -= sz_change; in ubifs_link()
762 dir_ui->ui_size = dir->i_size; in ubifs_link()
766 unlock_2_inodes(dir, inode); in ubifs_link()
774 static int ubifs_unlink(struct inode *dir, struct dentry *dentry) in ubifs_unlink() argument
776 struct ubifs_info *c = dir->i_sb->s_fs_info; in ubifs_unlink()
778 struct ubifs_inode *dir_ui = ubifs_inode(dir); in ubifs_unlink()
793 inode->i_nlink, dir->i_ino); in ubifs_unlink()
795 if (ubifs_crypt_is_encrypted(dir)) { in ubifs_unlink()
796 err = fscrypt_get_encryption_info(dir); in ubifs_unlink()
801 err = fscrypt_setup_filename(dir, &dentry->d_name, 1, &nm); in ubifs_unlink()
807 ubifs_assert(c, inode_is_locked(dir)); in ubifs_unlink()
820 lock_2_inodes(dir, inode); in ubifs_unlink()
821 inode->i_ctime = current_time(dir); in ubifs_unlink()
823 dir->i_size -= sz_change; in ubifs_unlink()
824 dir_ui->ui_size = dir->i_size; in ubifs_unlink()
825 dir->i_mtime = dir->i_ctime = inode->i_ctime; in ubifs_unlink()
826 err = ubifs_jnl_update(c, dir, &nm, inode, 1, 0); in ubifs_unlink()
829 unlock_2_inodes(dir, inode); in ubifs_unlink()
842 dir->i_size += sz_change; in ubifs_unlink()
843 dir_ui->ui_size = dir->i_size; in ubifs_unlink()
845 unlock_2_inodes(dir, inode); in ubifs_unlink()
861 int ubifs_check_dir_empty(struct inode *dir) in ubifs_check_dir_empty() argument
863 struct ubifs_info *c = dir->i_sb->s_fs_info; in ubifs_check_dir_empty()
869 lowest_dent_key(c, &key, dir->i_ino); in ubifs_check_dir_empty()
882 static int ubifs_rmdir(struct inode *dir, struct dentry *dentry) in ubifs_rmdir() argument
884 struct ubifs_info *c = dir->i_sb->s_fs_info; in ubifs_rmdir()
887 struct ubifs_inode *dir_ui = ubifs_inode(dir); in ubifs_rmdir()
898 inode->i_ino, dir->i_ino); in ubifs_rmdir()
899 ubifs_assert(c, inode_is_locked(dir)); in ubifs_rmdir()
905 if (ubifs_crypt_is_encrypted(dir)) { in ubifs_rmdir()
906 err = fscrypt_get_encryption_info(dir); in ubifs_rmdir()
911 err = fscrypt_setup_filename(dir, &dentry->d_name, 1, &nm); in ubifs_rmdir()
924 lock_2_inodes(dir, inode); in ubifs_rmdir()
925 inode->i_ctime = current_time(dir); in ubifs_rmdir()
927 drop_nlink(dir); in ubifs_rmdir()
928 dir->i_size -= sz_change; in ubifs_rmdir()
929 dir_ui->ui_size = dir->i_size; in ubifs_rmdir()
930 dir->i_mtime = dir->i_ctime = inode->i_ctime; in ubifs_rmdir()
931 err = ubifs_jnl_update(c, dir, &nm, inode, 1, 0); in ubifs_rmdir()
934 unlock_2_inodes(dir, inode); in ubifs_rmdir()
947 dir->i_size += sz_change; in ubifs_rmdir()
948 dir_ui->ui_size = dir->i_size; in ubifs_rmdir()
949 inc_nlink(dir); in ubifs_rmdir()
951 unlock_2_inodes(dir, inode); in ubifs_rmdir()
959 static int ubifs_mkdir(struct inode *dir, struct dentry *dentry, umode_t mode) in ubifs_mkdir() argument
962 struct ubifs_inode *dir_ui = ubifs_inode(dir); in ubifs_mkdir()
963 struct ubifs_info *c = dir->i_sb->s_fs_info; in ubifs_mkdir()
974 dentry, mode, dir->i_ino); in ubifs_mkdir()
980 err = fscrypt_setup_filename(dir, &dentry->d_name, 0, &nm); in ubifs_mkdir()
986 inode = ubifs_new_inode(c, dir, S_IFDIR | mode); in ubifs_mkdir()
992 err = ubifs_init_security(dir, inode, &dentry->d_name); in ubifs_mkdir()
999 inc_nlink(dir); in ubifs_mkdir()
1000 dir->i_size += sz_change; in ubifs_mkdir()
1001 dir_ui->ui_size = dir->i_size; in ubifs_mkdir()
1002 dir->i_mtime = dir->i_ctime = inode->i_ctime; in ubifs_mkdir()
1003 err = ubifs_jnl_update(c, dir, &nm, inode, 0, 0); in ubifs_mkdir()
1016 dir->i_size -= sz_change; in ubifs_mkdir()
1017 dir_ui->ui_size = dir->i_size; in ubifs_mkdir()
1018 drop_nlink(dir); in ubifs_mkdir()
1030 static int ubifs_mknod(struct inode *dir, struct dentry *dentry, in ubifs_mknod() argument
1035 struct ubifs_inode *dir_ui = ubifs_inode(dir); in ubifs_mknod()
1036 struct ubifs_info *c = dir->i_sb->s_fs_info; in ubifs_mknod()
1049 dbg_gen("dent '%pd' in dir ino %lu", dentry, dir->i_ino); in ubifs_mknod()
1065 err = fscrypt_setup_filename(dir, &dentry->d_name, 0, &nm); in ubifs_mknod()
1073 inode = ubifs_new_inode(c, dir, mode); in ubifs_mknod()
1086 err = ubifs_init_security(dir, inode, &dentry->d_name); in ubifs_mknod()
1091 dir->i_size += sz_change; in ubifs_mknod()
1092 dir_ui->ui_size = dir->i_size; in ubifs_mknod()
1093 dir->i_mtime = dir->i_ctime = inode->i_ctime; in ubifs_mknod()
1094 err = ubifs_jnl_update(c, dir, &nm, inode, 0, 0); in ubifs_mknod()
1106 dir->i_size -= sz_change; in ubifs_mknod()
1107 dir_ui->ui_size = dir->i_size; in ubifs_mknod()
1119 static int ubifs_symlink(struct inode *dir, struct dentry *dentry, in ubifs_symlink() argument
1124 struct ubifs_inode *dir_ui = ubifs_inode(dir); in ubifs_symlink()
1125 struct ubifs_info *c = dir->i_sb->s_fs_info; in ubifs_symlink()
1134 symname, dir->i_ino); in ubifs_symlink()
1136 err = fscrypt_prepare_symlink(dir, symname, len, UBIFS_MAX_INO_DATA, in ubifs_symlink()
1149 err = fscrypt_setup_filename(dir, &dentry->d_name, 0, &nm); in ubifs_symlink()
1155 inode = ubifs_new_inode(c, dir, S_IFLNK | S_IRWXUGO); in ubifs_symlink()
1186 err = ubifs_init_security(dir, inode, &dentry->d_name); in ubifs_symlink()
1191 dir->i_size += sz_change; in ubifs_symlink()
1192 dir_ui->ui_size = dir->i_size; in ubifs_symlink()
1193 dir->i_mtime = dir->i_ctime = inode->i_ctime; in ubifs_symlink()
1194 err = ubifs_jnl_update(c, dir, &nm, inode, 0, 0); in ubifs_symlink()
1205 dir->i_size -= sz_change; in ubifs_symlink()
1206 dir_ui->ui_size = dir->i_size; in ubifs_symlink()
1632 static int ubifs_dir_open(struct inode *dir, struct file *file) in ubifs_dir_open() argument
1634 if (ubifs_crypt_is_encrypted(dir)) in ubifs_dir_open()
1635 return fscrypt_get_encryption_info(dir) ? -EACCES : 0; in ubifs_dir_open()