Lines Matching refs:dir
1350 static struct dentry *lookup_dcache(struct qstr *name, struct dentry *dir, in lookup_dcache() argument
1357 dentry = d_lookup(dir, name); in lookup_dcache()
1375 dentry = d_alloc(dir, name); in lookup_dcache()
1390 static struct dentry *lookup_real(struct inode *dir, struct dentry *dentry, in lookup_real() argument
1396 if (unlikely(IS_DEADDIR(dir))) { in lookup_real()
1401 old = dir->i_op->lookup(dir, dentry, flags); in lookup_real()
2307 struct dentry *dir = nd->path.dentry; in mountpoint_last() local
2327 mutex_lock(&dir->d_inode->i_mutex); in mountpoint_last()
2328 dentry = d_lookup(dir, &nd->last); in mountpoint_last()
2335 dentry = d_alloc(dir, &nd->last); in mountpoint_last()
2338 mutex_unlock(&dir->d_inode->i_mutex); in mountpoint_last()
2341 dentry = lookup_real(dir->d_inode, dentry, nd->flags); in mountpoint_last()
2344 mutex_unlock(&dir->d_inode->i_mutex); in mountpoint_last()
2348 mutex_unlock(&dir->d_inode->i_mutex); in mountpoint_last()
2455 int __check_sticky(struct inode *dir, struct inode *inode) in __check_sticky() argument
2461 if (uid_eq(dir->i_uid, fsuid)) in __check_sticky()
2486 static int may_delete(struct inode *dir, struct dentry *victim, bool isdir) in may_delete() argument
2495 BUG_ON(victim->d_parent->d_inode != dir); in may_delete()
2496 audit_inode_child(dir, victim, AUDIT_TYPE_CHILD_DELETE); in may_delete()
2498 error = inode_permission(dir, MAY_WRITE | MAY_EXEC); in may_delete()
2501 if (IS_APPEND(dir)) in may_delete()
2504 if (check_sticky(dir, inode) || IS_APPEND(inode) || in may_delete()
2514 if (IS_DEADDIR(dir)) in may_delete()
2529 static inline int may_create(struct inode *dir, struct dentry *child) in may_create() argument
2531 audit_inode_child(dir, child, AUDIT_TYPE_CHILD_CREATE); in may_create()
2534 if (IS_DEADDIR(dir)) in may_create()
2536 return inode_permission(dir, MAY_WRITE | MAY_EXEC); in may_create()
2583 int vfs_create(struct inode *dir, struct dentry *dentry, umode_t mode, in vfs_create() argument
2586 int error = may_create(dir, dentry); in vfs_create()
2590 if (!dir->i_op->create) in vfs_create()
2594 error = security_inode_create(dir, dentry, mode); in vfs_create()
2597 error = dir->i_op->create(dir, dentry, mode, want_excl); in vfs_create()
2599 fsnotify_create(dir, dentry); in vfs_create()
2685 static int may_o_create(struct path *dir, struct dentry *dentry, umode_t mode) in may_o_create() argument
2687 int error = security_path_mknod(dir, dentry, mode, 0); in may_o_create()
2691 error = inode_permission(dir->dentry->d_inode, MAY_WRITE | MAY_EXEC); in may_o_create()
2695 return security_inode_create(dir->dentry->d_inode, dentry, mode); in may_o_create()
2717 struct inode *dir = nd->path.dentry->d_inode; in atomic_open() local
2729 if (unlikely(IS_DEADDIR(dir))) { in atomic_open()
2735 if ((open_flag & O_CREAT) && !IS_POSIXACL(dir)) in atomic_open()
2785 error = dir->i_op->atomic_open(dir, dentry, file, open_flag, mode, in atomic_open()
2803 fsnotify_create(dir, dentry); in atomic_open()
2826 fsnotify_create(dir, dentry); in atomic_open()
2839 dentry = lookup_real(dir, dentry, nd->flags); in atomic_open()
2876 struct dentry *dir = nd->path.dentry; in lookup_open() local
2877 struct inode *dir_inode = dir->d_inode; in lookup_open()
2883 dentry = lookup_dcache(&nd->last, dir, nd->flags, &need_lookup); in lookup_open()
2907 if (!IS_POSIXACL(dir->d_inode)) in lookup_open()
2924 error = vfs_create(dir->d_inode, dentry, mode, in lookup_open()
2946 struct dentry *dir = nd->path.dentry; in do_last() local
2980 BUG_ON(nd->inode != dir->d_inode); in do_last()
2992 audit_inode(name, dir, LOOKUP_PARENT); in do_last()
3010 mutex_lock(&dir->d_inode->i_mutex); in do_last()
3012 mutex_unlock(&dir->d_inode->i_mutex); in do_last()
3166 BUG_ON(save_parent.dentry != dir); in do_last()
3169 nd->inode = dir->d_inode; in do_last()
3187 struct inode *dir; in do_tmpfile() local
3200 dir = dentry->d_inode; in do_tmpfile()
3201 if (!dir->i_op->tmpfile) { in do_tmpfile()
3214 error = dir->i_op->tmpfile(dir, nd->path.dentry, op->mode); in do_tmpfile()
3453 int vfs_mknod(struct inode *dir, struct dentry *dentry, umode_t mode, dev_t dev) in vfs_mknod() argument
3455 int error = may_create(dir, dentry); in vfs_mknod()
3463 if (!dir->i_op->mknod) in vfs_mknod()
3470 error = security_inode_mknod(dir, dentry, mode, dev); in vfs_mknod()
3474 error = dir->i_op->mknod(dir, dentry, mode, dev); in vfs_mknod()
3476 fsnotify_create(dir, dentry); in vfs_mknod()
3545 int vfs_mkdir(struct inode *dir, struct dentry *dentry, umode_t mode) in vfs_mkdir() argument
3547 int error = may_create(dir, dentry); in vfs_mkdir()
3548 unsigned max_links = dir->i_sb->s_max_links; in vfs_mkdir()
3553 if (!dir->i_op->mkdir) in vfs_mkdir()
3557 error = security_inode_mkdir(dir, dentry, mode); in vfs_mkdir()
3561 if (max_links && dir->i_nlink >= max_links) in vfs_mkdir()
3564 error = dir->i_op->mkdir(dir, dentry, mode); in vfs_mkdir()
3566 fsnotify_mkdir(dir, dentry); in vfs_mkdir()
3626 int vfs_rmdir(struct inode *dir, struct dentry *dentry) in vfs_rmdir() argument
3628 int error = may_delete(dir, dentry, 1); in vfs_rmdir()
3633 if (!dir->i_op->rmdir) in vfs_rmdir()
3643 error = security_inode_rmdir(dir, dentry); in vfs_rmdir()
3648 error = dir->i_op->rmdir(dir, dentry); in vfs_rmdir()
3745 int vfs_unlink(struct inode *dir, struct dentry *dentry, struct inode **delegated_inode) in vfs_unlink() argument
3748 int error = may_delete(dir, dentry, 0); in vfs_unlink()
3753 if (!dir->i_op->unlink) in vfs_unlink()
3760 error = security_inode_unlink(dir, dentry); in vfs_unlink()
3765 error = dir->i_op->unlink(dir, dentry); in vfs_unlink()
3878 int vfs_symlink(struct inode *dir, struct dentry *dentry, const char *oldname) in vfs_symlink() argument
3880 int error = may_create(dir, dentry); in vfs_symlink()
3885 if (!dir->i_op->symlink) in vfs_symlink()
3888 error = security_inode_symlink(dir, dentry, oldname); in vfs_symlink()
3892 error = dir->i_op->symlink(dir, dentry, oldname); in vfs_symlink()
3894 fsnotify_create(dir, dentry); in vfs_symlink()
3954 int vfs_link(struct dentry *old_dentry, struct inode *dir, struct dentry *new_dentry, struct inode … in vfs_link() argument
3957 unsigned max_links = dir->i_sb->s_max_links; in vfs_link()
3963 error = may_create(dir, new_dentry); in vfs_link()
3967 if (dir->i_sb != inode->i_sb) in vfs_link()
3975 if (!dir->i_op->link) in vfs_link()
3980 error = security_inode_link(old_dentry, dir, new_dentry); in vfs_link()
3993 error = dir->i_op->link(old_dentry, dir, new_dentry); in vfs_link()
4003 fsnotify_link(dir, inode, new_dentry); in vfs_link()
4425 int vfs_whiteout(struct inode *dir, struct dentry *dentry) in vfs_whiteout() argument
4427 int error = may_create(dir, dentry); in vfs_whiteout()
4431 if (!dir->i_op->mknod) in vfs_whiteout()
4434 return dir->i_op->mknod(dir, dentry, in vfs_whiteout()