Lines Matching defs:dir

1449  * dir->d_inode->i_mutex must be held
1451 static struct dentry *lookup_dcache(struct qstr *name, struct dentry *dir,
1458 dentry = d_lookup(dir, name);
1476 dentry = d_alloc(dir, name);
1489 * dir->d_inode->i_mutex must be held
1491 static struct dentry *lookup_real(struct inode *dir, struct dentry *dentry,
1497 if (unlikely(IS_DEADDIR(dir))) {
1502 old = dir->i_op->lookup(dir, dentry, flags);
2387 struct dentry *dir = nd->path.dentry;
2405 mutex_lock(&dir->d_inode->i_mutex);
2406 dentry = d_lookup(dir, &nd->last);
2413 dentry = d_alloc(dir, &nd->last);
2415 mutex_unlock(&dir->d_inode->i_mutex);
2418 dentry = lookup_real(dir->d_inode, dentry, nd->flags);
2420 mutex_unlock(&dir->d_inode->i_mutex);
2424 mutex_unlock(&dir->d_inode->i_mutex);
2522 int __check_sticky(struct inode *dir, struct inode *inode)
2528 if (uid_eq(dir->i_uid, fsuid))
2535 * Check whether we can remove a link victim from directory dir, check
2537 * 1. We can't do it if dir is read-only (done in permission())
2538 * 2. We should have write and exec permissions on dir
2539 * 3. We can't remove anything from append-only dir
2540 * 4. We can't do anything with immutable dir (done in permission())
2541 * 5. If the sticky bit on dir is set we should either
2542 * a. be owner of dir, or
2553 static int may_delete(struct inode *dir, struct dentry *victim, bool isdir)
2562 BUG_ON(victim->d_parent->d_inode != dir);
2563 audit_inode_child(dir, victim, AUDIT_TYPE_CHILD_DELETE);
2565 error = inode_permission(dir, MAY_WRITE | MAY_EXEC);
2568 if (IS_APPEND(dir))
2571 if (check_sticky(dir, inode) || IS_APPEND(inode) ||
2581 if (IS_DEADDIR(dir))
2589 * dir.
2592 * 2. We can't do it if dir is read-only (done in permission())
2593 * 3. We should have write and exec permissions on dir
2594 * 4. We can't do it if dir is immutable (done in permission())
2596 static inline int may_create(struct inode *dir, struct dentry *child)
2598 audit_inode_child(dir, child, AUDIT_TYPE_CHILD_CREATE);
2601 if (IS_DEADDIR(dir))
2603 return inode_permission(dir, MAY_WRITE | MAY_EXEC);
2650 int vfs_create(struct inode *dir, struct dentry *dentry, umode_t mode,
2653 int error = may_create(dir, dentry);
2657 if (!dir->i_op->create)
2661 error = security_inode_create(dir, dentry, mode);
2664 error = dir->i_op->create(dir, dentry, mode, want_excl);
2666 fsnotify_create(dir, dentry);
2752 static int may_o_create(struct path *dir, struct dentry *dentry, umode_t mode)
2754 int error = security_path_mknod(dir, dentry, mode, 0);
2758 error = inode_permission(dir->dentry->d_inode, MAY_WRITE | MAY_EXEC);
2762 return security_inode_create(dir->dentry->d_inode, dentry, mode);
2784 struct inode *dir = nd->path.dentry->d_inode;
2796 if (unlikely(IS_DEADDIR(dir))) {
2802 if ((open_flag & O_CREAT) && !IS_POSIXACL(dir))
2852 error = dir->i_op->atomic_open(dir, dentry, file, open_flag, mode,
2870 fsnotify_create(dir, dentry);
2893 fsnotify_create(dir, dentry);
2906 dentry = lookup_real(dir, dentry, nd->flags);
2943 struct dentry *dir = nd->path.dentry;
2944 struct inode *dir_inode = dir->d_inode;
2950 dentry = lookup_dcache(&nd->last, dir, nd->flags, &need_lookup);
2974 if (!IS_POSIXACL(dir->d_inode))
2991 error = vfs_create(dir->d_inode, dentry, mode,
3013 struct dentry *dir = nd->path.dentry;
3046 BUG_ON(nd->inode != dir->d_inode);
3058 audit_inode(nd->name, dir, LOOKUP_PARENT);
3075 mutex_lock(&dir->d_inode->i_mutex);
3077 mutex_unlock(&dir->d_inode->i_mutex);
3223 BUG_ON(save_parent.dentry != dir);
3226 nd->inode = dir->d_inode;
3243 struct inode *dir;
3251 dir = path.dentry->d_inode;
3253 error = inode_permission(dir, MAY_WRITE | MAY_EXEC);
3256 if (!dir->i_op->tmpfile) {
3267 error = dir->i_op->tmpfile(dir, child, op->mode);
3487 int vfs_mknod(struct inode *dir, struct dentry *dentry, umode_t mode, dev_t dev)
3489 int error = may_create(dir, dentry);
3497 if (!dir->i_op->mknod)
3504 error = security_inode_mknod(dir, dentry, mode, dev);
3508 error = dir->i_op->mknod(dir, dentry, mode, dev);
3510 fsnotify_create(dir, dentry);
3579 int vfs_mkdir(struct inode *dir, struct dentry *dentry, umode_t mode)
3581 int error = may_create(dir, dentry);
3582 unsigned max_links = dir->i_sb->s_max_links;
3587 if (!dir->i_op->mkdir)
3591 error = security_inode_mkdir(dir, dentry, mode);
3595 if (max_links && dir->i_nlink >= max_links)
3598 error = dir->i_op->mkdir(dir, dentry, mode);
3600 fsnotify_mkdir(dir, dentry);
3660 int vfs_rmdir(struct inode *dir, struct dentry *dentry)
3662 int error = may_delete(dir, dentry, 1);
3667 if (!dir->i_op->rmdir)
3677 error = security_inode_rmdir(dir, dentry);
3682 error = dir->i_op->rmdir(dir, dentry);
3765 * @dir: parent directory
3769 * The caller must hold dir->i_mutex.
3775 * dir->i_mutex before doing so.
3781 int vfs_unlink(struct inode *dir, struct dentry *dentry, struct inode **delegated_inode)
3784 int error = may_delete(dir, dentry, 0);
3789 if (!dir->i_op->unlink)
3796 error = security_inode_unlink(dir, dentry);
3801 error = dir->i_op->unlink(dir, dentry);
3916 int vfs_symlink(struct inode *dir, struct dentry *dentry, const char *oldname)
3918 int error = may_create(dir, dentry);
3923 if (!dir->i_op->symlink)
3926 error = security_inode_symlink(dir, dentry, oldname);
3930 error = dir->i_op->symlink(dir, dentry, oldname);
3932 fsnotify_create(dir, dentry);
3976 * @dir: new parent
3980 * The caller must hold dir->i_mutex
3992 int vfs_link(struct dentry *old_dentry, struct inode *dir, struct dentry *new_dentry, struct inode **delegated_inode)
3995 unsigned max_links = dir->i_sb->s_max_links;
4001 error = may_create(dir, new_dentry);
4005 if (dir->i_sb != inode->i_sb)
4013 if (!dir->i_op->link)
4018 error = security_inode_link(old_dentry, dir, new_dentry);
4031 error = dir->i_op->link(old_dentry, dir, new_dentry);
4041 fsnotify_link(dir, inode, new_dentry);
4466 int vfs_whiteout(struct inode *dir, struct dentry *dentry)
4468 int error = may_create(dir, dentry);
4472 if (!dir->i_op->mknod)
4475 return dir->i_op->mknod(dir, dentry,