Lines Matching refs:dentry

470 	dget(path->dentry);  in path_get()
482 dput(path->dentry); in path_put()
569 return is_subdir(path->dentry, mnt->mnt_root); in path_connected()
618 path->dentry = NULL; in legitimize_path()
621 if (unlikely(!lockref_get_not_dead(&path->dentry->d_lockref))) { in legitimize_path()
622 path->dentry = NULL; in legitimize_path()
625 return !read_seqcount_retry(&path->dentry->d_seq, seq); in legitimize_path()
674 struct dentry *parent = nd->path.dentry; in unlazy_walk()
691 nd->path.dentry = NULL; in unlazy_walk()
710 static int unlazy_child(struct nameidata *nd, struct dentry *dentry, unsigned seq) in unlazy_child() argument
719 if (unlikely(!lockref_get_not_dead(&nd->path.dentry->d_lockref))) in unlazy_child()
729 if (unlikely(!lockref_get_not_dead(&dentry->d_lockref))) in unlazy_child()
731 if (unlikely(read_seqcount_retry(&dentry->d_seq, seq))) in unlazy_child()
745 nd->path.dentry = NULL; in unlazy_child()
751 dput(dentry); in unlazy_child()
755 static inline int d_revalidate(struct dentry *dentry, unsigned int flags) in d_revalidate() argument
757 if (unlikely(dentry->d_flags & DCACHE_OP_REVALIDATE)) in d_revalidate()
758 return dentry->d_op->d_revalidate(dentry, flags); in d_revalidate()
775 struct dentry *dentry = nd->path.dentry; in complete_walk() local
788 if (likely(!(dentry->d_flags & DCACHE_OP_WEAK_REVALIDATE))) in complete_walk()
791 status = dentry->d_op->d_weak_revalidate(dentry, nd->flags); in complete_walk()
811 nd->root_seq = __read_seqcount_begin(&nd->root.dentry->d_seq); in set_root()
821 dput(path->dentry); in path_put_conditional()
830 dput(nd->path.dentry); in path_to_nameidata()
835 nd->path.dentry = path->dentry; in path_to_nameidata()
841 struct dentry *d; in nd_jump_root()
843 d = nd->path.dentry; in nd_jump_root()
852 nd->inode = nd->path.dentry->d_inode; in nd_jump_root()
868 nd->inode = nd->path.dentry->d_inode; in nd_jump_link()
927 audit_inode(nd->name, nd->stack[0].link.dentry, 0); in may_follow_link()
981 struct inode *inode = link->dentry->d_inode; in may_linkat()
1020 static int may_create_in_sticky(struct dentry * const dir, in may_create_in_sticky()
1043 struct dentry *dentry = last->link.dentry; in get_link() local
1057 error = security_inode_follow_link(dentry, inode, in get_link()
1065 const char * (*get)(struct dentry *, struct inode *, in get_link()
1073 res = get(dentry, inode, &last->done); in get_link()
1076 res = get(dentry, inode, &last->done); in get_link()
1108 struct dentry *mountpoint; in follow_up()
1119 dput(path->dentry); in follow_up()
1120 path->dentry = mountpoint; in follow_up()
1138 if (!path->dentry->d_op || !path->dentry->d_op->d_automount) in follow_automount()
1154 path->dentry->d_inode) in follow_automount()
1161 mnt = path->dentry->d_op->d_automount(path); in follow_automount()
1194 path->dentry = dget(mnt->mnt_root); in follow_automount()
1222 while (managed = READ_ONCE(path->dentry->d_flags), in follow_managed()
1228 BUG_ON(!path->dentry->d_op); in follow_managed()
1229 BUG_ON(!path->dentry->d_op->d_manage); in follow_managed()
1230 ret = path->dentry->d_op->d_manage(path, false); in follow_managed()
1239 dput(path->dentry); in follow_managed()
1243 path->dentry = dget(mounted->mnt_root); in follow_managed()
1283 dput(path->dentry); in follow_down_one()
1286 path->dentry = dget(mounted->mnt_root); in follow_down_one()
1295 return (path->dentry->d_flags & DCACHE_MANAGE_TRANSIT) ? in managed_dentry_rcu()
1296 path->dentry->d_op->d_manage(path, true) : 0; in managed_dentry_rcu()
1322 if (!d_mountpoint(path->dentry)) in __follow_mount_rcu()
1323 return !(path->dentry->d_flags & DCACHE_NEED_AUTOMOUNT); in __follow_mount_rcu()
1325 mounted = __lookup_mnt(path->mnt, path->dentry); in __follow_mount_rcu()
1329 path->dentry = mounted->mnt.mnt_root; in __follow_mount_rcu()
1331 *seqp = read_seqcount_begin(&path->dentry->d_seq); in __follow_mount_rcu()
1337 *inode = path->dentry->d_inode; in __follow_mount_rcu()
1340 !(path->dentry->d_flags & DCACHE_NEED_AUTOMOUNT); in __follow_mount_rcu()
1350 if (nd->path.dentry != nd->path.mnt->mnt_root) { in follow_dotdot_rcu()
1351 struct dentry *old = nd->path.dentry; in follow_dotdot_rcu()
1352 struct dentry *parent = old->d_parent; in follow_dotdot_rcu()
1359 nd->path.dentry = parent; in follow_dotdot_rcu()
1367 struct dentry *mountpoint = mnt->mnt_mountpoint; in follow_dotdot_rcu()
1375 nd->path.dentry = mountpoint; in follow_dotdot_rcu()
1381 while (unlikely(d_mountpoint(nd->path.dentry))) { in follow_dotdot_rcu()
1383 mounted = __lookup_mnt(nd->path.mnt, nd->path.dentry); in follow_dotdot_rcu()
1389 nd->path.dentry = mounted->mnt.mnt_root; in follow_dotdot_rcu()
1390 inode = nd->path.dentry->d_inode; in follow_dotdot_rcu()
1391 nd->seq = read_seqcount_begin(&nd->path.dentry->d_seq); in follow_dotdot_rcu()
1407 while (managed = READ_ONCE(path->dentry->d_flags), in follow_down()
1420 BUG_ON(!path->dentry->d_op); in follow_down()
1421 BUG_ON(!path->dentry->d_op->d_manage); in follow_down()
1422 ret = path->dentry->d_op->d_manage(path, false); in follow_down()
1432 dput(path->dentry); in follow_down()
1435 path->dentry = dget(mounted->mnt_root); in follow_down()
1451 while (d_mountpoint(path->dentry)) { in follow_mount()
1455 dput(path->dentry); in follow_mount()
1458 path->dentry = dget(mounted->mnt_root); in follow_mount()
1464 struct dentry *old = path->dentry; in path_parent_directory()
1466 path->dentry = dget_parent(path->dentry); in path_parent_directory()
1478 if (nd->path.dentry != nd->path.mnt->mnt_root) { in follow_dotdot()
1488 nd->inode = nd->path.dentry->d_inode; in follow_dotdot()
1496 static struct dentry *lookup_dcache(const struct qstr *name, in lookup_dcache()
1497 struct dentry *dir, in lookup_dcache()
1500 struct dentry *dentry = d_lookup(dir, name); in lookup_dcache() local
1501 if (dentry) { in lookup_dcache()
1502 int error = d_revalidate(dentry, flags); in lookup_dcache()
1505 d_invalidate(dentry); in lookup_dcache()
1506 dput(dentry); in lookup_dcache()
1510 return dentry; in lookup_dcache()
1520 static struct dentry *__lookup_hash(const struct qstr *name, in __lookup_hash()
1521 struct dentry *base, unsigned int flags) in __lookup_hash()
1523 struct dentry *dentry = lookup_dcache(name, base, flags); in __lookup_hash() local
1524 struct dentry *old; in __lookup_hash()
1527 if (dentry) in __lookup_hash()
1528 return dentry; in __lookup_hash()
1534 dentry = d_alloc(base, name); in __lookup_hash()
1535 if (unlikely(!dentry)) in __lookup_hash()
1538 old = dir->i_op->lookup(dir, dentry, flags); in __lookup_hash()
1540 dput(dentry); in __lookup_hash()
1541 dentry = old; in __lookup_hash()
1543 return dentry; in __lookup_hash()
1551 struct dentry *dentry, *parent = nd->path.dentry; in lookup_fast() local
1563 dentry = __d_lookup_rcu(parent, &nd->last, &seq); in lookup_fast()
1564 if (unlikely(!dentry)) { in lookup_fast()
1574 *inode = d_backing_inode(dentry); in lookup_fast()
1575 negative = d_is_negative(dentry); in lookup_fast()
1576 if (unlikely(read_seqcount_retry(&dentry->d_seq, seq))) in lookup_fast()
1590 status = d_revalidate(dentry, nd->flags); in lookup_fast()
1599 path->dentry = dentry; in lookup_fast()
1603 if (unlazy_child(nd, dentry, seq)) in lookup_fast()
1607 status = d_revalidate(dentry, nd->flags); in lookup_fast()
1609 dentry = __d_lookup(parent, &nd->last); in lookup_fast()
1610 if (unlikely(!dentry)) in lookup_fast()
1612 status = d_revalidate(dentry, nd->flags); in lookup_fast()
1616 d_invalidate(dentry); in lookup_fast()
1617 dput(dentry); in lookup_fast()
1620 if (unlikely(d_is_negative(dentry))) { in lookup_fast()
1621 dput(dentry); in lookup_fast()
1626 path->dentry = dentry; in lookup_fast()
1629 *inode = d_backing_inode(path->dentry); in lookup_fast()
1634 static struct dentry *__lookup_slow(const struct qstr *name, in __lookup_slow()
1635 struct dentry *dir, in __lookup_slow()
1638 struct dentry *dentry, *old; in __lookup_slow() local
1646 dentry = d_alloc_parallel(dir, name, &wq); in __lookup_slow()
1647 if (IS_ERR(dentry)) in __lookup_slow()
1648 return dentry; in __lookup_slow()
1649 if (unlikely(!d_in_lookup(dentry))) { in __lookup_slow()
1651 int error = d_revalidate(dentry, flags); in __lookup_slow()
1654 d_invalidate(dentry); in __lookup_slow()
1655 dput(dentry); in __lookup_slow()
1658 dput(dentry); in __lookup_slow()
1659 dentry = ERR_PTR(error); in __lookup_slow()
1663 old = inode->i_op->lookup(inode, dentry, flags); in __lookup_slow()
1664 d_lookup_done(dentry); in __lookup_slow()
1666 dput(dentry); in __lookup_slow()
1667 dentry = old; in __lookup_slow()
1670 return dentry; in __lookup_slow()
1673 static struct dentry *lookup_slow(const struct qstr *name, in lookup_slow()
1674 struct dentry *dir, in lookup_slow()
1678 struct dentry *res; in lookup_slow()
1731 nd->path.dentry = NULL; in pick_link()
1763 if (likely(!d_is_symlink(path->dentry)) || in step_into()
1773 if (read_seqcount_retry(&path->dentry->d_seq, seq)) in step_into()
1800 path.dentry = lookup_slow(&nd->last, nd->path.dentry, in walk_component()
1802 if (IS_ERR(path.dentry)) in walk_component()
1803 return PTR_ERR(path.dentry); in walk_component()
1810 if (unlikely(d_is_negative(path.dentry))) { in walk_component()
1816 inode = d_backing_inode(path.dentry); in walk_component()
2078 hash_len = hash_name(nd->path.dentry, name); in link_path_walk()
2092 struct dentry *parent = nd->path.dentry; in link_path_walk()
2151 if (unlikely(!d_can_lookup(nd->path.dentry))) { in link_path_walk()
2175 struct dentry *root = nd->root.dentry; in path_init()
2182 nd->seq = __read_seqcount_begin(&nd->path.dentry->d_seq); in path_init()
2193 nd->path.dentry = NULL; in path_init()
2209 nd->inode = nd->path.dentry->d_inode; in path_init()
2210 nd->seq = __read_seqcount_begin(&nd->path.dentry->d_seq); in path_init()
2214 nd->inode = nd->path.dentry->d_inode; in path_init()
2220 struct dentry *dentry; in path_init() local
2225 dentry = f.file->f_path.dentry; in path_init()
2227 if (*s && unlikely(!d_can_lookup(dentry))) { in path_init()
2234 nd->inode = nd->path.dentry->d_inode; in path_init()
2235 nd->seq = read_seqcount_begin(&nd->path.dentry->d_seq); in path_init()
2238 nd->inode = nd->path.dentry->d_inode; in path_init()
2282 dget(path.dentry); in handle_lookup_down()
2286 inode = d_backing_inode(path.dentry); in handle_lookup_down()
2315 if (!d_can_lookup(nd->path.dentry)) in path_lookupat()
2320 nd->path.dentry = NULL; in path_lookupat()
2345 audit_inode(name, path->dentry, 0); in filename_lookup()
2362 nd->path.dentry = NULL; in path_parentat()
2386 audit_inode(name, parent->dentry, AUDIT_INODE_PARENT); in filename_parentat()
2396 struct dentry *kern_path_locked(const char *name, struct path *path) in kern_path_locked()
2399 struct dentry *d; in kern_path_locked()
2412 inode_lock_nested(path->dentry->d_inode, I_MUTEX_PARENT); in kern_path_locked()
2413 d = __lookup_hash(&last, path->dentry, 0); in kern_path_locked()
2415 inode_unlock(path->dentry->d_inode); in kern_path_locked()
2437 int vfs_path_lookup(struct dentry *dentry, struct vfsmount *mnt, in vfs_path_lookup() argument
2441 struct path root = {.mnt = mnt, .dentry = dentry}; in vfs_path_lookup()
2448 static int lookup_one_len_common(const char *name, struct dentry *base, in lookup_one_len_common()
2494 struct dentry *try_lookup_one_len(const char *name, struct dentry *base, int len) in try_lookup_one_len()
2520 struct dentry *lookup_one_len(const char *name, struct dentry *base, int len) in lookup_one_len()
2522 struct dentry *dentry; in lookup_one_len() local
2532 dentry = lookup_dcache(&this, base, 0); in lookup_one_len()
2533 return dentry ? dentry : __lookup_slow(&this, base, 0); in lookup_one_len()
2549 struct dentry *lookup_one_len_unlocked(const char *name, in lookup_one_len_unlocked()
2550 struct dentry *base, int len) in lookup_one_len_unlocked()
2554 struct dentry *ret; in lookup_one_len_unlocked()
2573 struct dentry *child, *parent; in path_pts()
2581 parent = path->dentry; in path_pts()
2588 path->dentry = child; in path_pts()
2630 struct dentry *dir = nd->path.dentry; in mountpoint_last()
2645 path.dentry = dget(nd->path.dentry); in mountpoint_last()
2647 path.dentry = d_lookup(dir, &nd->last); in mountpoint_last()
2648 if (!path.dentry) { in mountpoint_last()
2655 path.dentry = lookup_slow(&nd->last, dir, in mountpoint_last()
2657 if (IS_ERR(path.dentry)) in mountpoint_last()
2658 return PTR_ERR(path.dentry); in mountpoint_last()
2661 if (d_is_negative(path.dentry)) { in mountpoint_last()
2662 dput(path.dentry); in mountpoint_last()
2666 return step_into(nd, &path, 0, d_backing_inode(path.dentry), 0); in mountpoint_last()
2691 nd->path.dentry = NULL; in path_mountpoint()
2713 audit_inode(name, path->dentry, AUDIT_INODE_NOEVAL); in filename_mountpoint()
2780 static int may_delete(struct inode *dir, struct dentry *victim, bool isdir) in may_delete()
2829 static inline int may_create(struct inode *dir, struct dentry *child) in may_create()
2847 struct dentry *lock_rename(struct dentry *p1, struct dentry *p2) in lock_rename()
2849 struct dentry *p; in lock_rename()
2878 void unlock_rename(struct dentry *p1, struct dentry *p2) in unlock_rename()
2888 int vfs_create(struct inode *dir, struct dentry *dentry, umode_t mode, in vfs_create() argument
2891 int error = may_create(dir, dentry); in vfs_create()
2899 error = security_inode_create(dir, dentry, mode); in vfs_create()
2902 error = dir->i_op->create(dir, dentry, mode, want_excl); in vfs_create()
2904 fsnotify_create(dir, dentry); in vfs_create()
2909 int vfs_mkobj(struct dentry *dentry, umode_t mode, in vfs_mkobj() argument
2910 int (*f)(struct dentry *, umode_t, void *), in vfs_mkobj() argument
2913 struct inode *dir = dentry->d_parent->d_inode; in vfs_mkobj()
2914 int error = may_create(dir, dentry); in vfs_mkobj()
2920 error = security_inode_create(dir, dentry, mode); in vfs_mkobj()
2923 error = f(dentry, mode, arg); in vfs_mkobj()
2925 fsnotify_create(dir, dentry); in vfs_mkobj()
2938 struct dentry *dentry = path->dentry; in may_open() local
2939 struct inode *inode = dentry->d_inode; in may_open()
2987 struct inode *inode = path->dentry->d_inode; in handle_truncate()
2998 error = do_truncate(path->dentry, 0, in handle_truncate()
3013 static int may_o_create(const struct path *dir, struct dentry *dentry, umode_t mode) in may_o_create() argument
3016 int error = security_path_mknod(dir, dentry, mode, 0); in may_o_create()
3020 s_user_ns = dir->dentry->d_sb->s_user_ns; in may_o_create()
3025 error = inode_permission(dir->dentry->d_inode, MAY_WRITE | MAY_EXEC); in may_o_create()
3029 return security_inode_create(dir->dentry->d_inode, dentry, mode); in may_o_create()
3045 static int atomic_open(struct nameidata *nd, struct dentry *dentry, in atomic_open() argument
3050 struct dentry *const DENTRY_NOT_SET = (void *) -1UL; in atomic_open()
3051 struct inode *dir = nd->path.dentry->d_inode; in atomic_open()
3060 file->f_path.dentry = DENTRY_NOT_SET; in atomic_open()
3062 error = dir->i_op->atomic_open(dir, dentry, file, in atomic_open()
3064 d_lookup_done(dentry); in atomic_open()
3074 fsnotify_create(dir, dentry); in atomic_open()
3080 } else if (WARN_ON(file->f_path.dentry == DENTRY_NOT_SET)) { in atomic_open()
3083 if (file->f_path.dentry) { in atomic_open()
3084 dput(dentry); in atomic_open()
3085 dentry = file->f_path.dentry; in atomic_open()
3088 fsnotify_create(dir, dentry); in atomic_open()
3089 if (unlikely(d_is_negative(dentry))) { in atomic_open()
3092 path->dentry = dentry; in atomic_open()
3098 dput(dentry); in atomic_open()
3122 struct dentry *dir = nd->path.dentry; in lookup_open()
3125 struct dentry *dentry; in lookup_open() local
3134 dentry = d_lookup(dir, &nd->last); in lookup_open()
3136 if (!dentry) { in lookup_open()
3137 dentry = d_alloc_parallel(dir, &nd->last, &wq); in lookup_open()
3138 if (IS_ERR(dentry)) in lookup_open()
3139 return PTR_ERR(dentry); in lookup_open()
3141 if (d_in_lookup(dentry)) in lookup_open()
3144 error = d_revalidate(dentry, nd->flags); in lookup_open()
3149 d_invalidate(dentry); in lookup_open()
3150 dput(dentry); in lookup_open()
3151 dentry = NULL; in lookup_open()
3153 if (dentry->d_inode) { in lookup_open()
3177 create_error = may_o_create(&nd->path, dentry, mode); in lookup_open()
3194 error = atomic_open(nd, dentry, path, file, op, open_flag, in lookup_open()
3202 if (d_in_lookup(dentry)) { in lookup_open()
3203 struct dentry *res = dir_inode->i_op->lookup(dir_inode, dentry, in lookup_open()
3205 d_lookup_done(dentry); in lookup_open()
3211 dput(dentry); in lookup_open()
3212 dentry = res; in lookup_open()
3217 if (!dentry->d_inode && (open_flag & O_CREAT)) { in lookup_open()
3219 audit_inode_child(dir_inode, dentry, AUDIT_TYPE_CHILD_CREATE); in lookup_open()
3224 error = dir_inode->i_op->create(dir_inode, dentry, mode, in lookup_open()
3228 fsnotify_create(dir_inode, dentry); in lookup_open()
3230 if (unlikely(create_error) && !dentry->d_inode) { in lookup_open()
3235 path->dentry = dentry; in lookup_open()
3240 dput(dentry); in lookup_open()
3250 struct dentry *dir = nd->path.dentry; in do_last()
3328 audit_inode(nd->name, file->f_path.dentry, 0); in do_last()
3355 if (unlikely(d_is_negative(path.dentry))) { in do_last()
3363 audit_inode(nd->name, path.dentry, 0); in do_last()
3371 inode = d_backing_inode(path.dentry); in do_last()
3381 audit_inode(nd->name, nd->path.dentry, 0); in do_last()
3384 if (d_is_dir(nd->path.dentry)) in do_last()
3387 d_backing_inode(nd->path.dentry)); in do_last()
3392 if ((nd->flags & LOOKUP_DIRECTORY) && !d_can_lookup(nd->path.dentry)) in do_last()
3394 if (!d_is_reg(nd->path.dentry)) in do_last()
3425 struct dentry *vfs_tmpfile(struct dentry *dentry, umode_t mode, int open_flag) in vfs_tmpfile() argument
3427 struct dentry *child = NULL; in vfs_tmpfile()
3428 struct inode *dir = dentry->d_inode; in vfs_tmpfile()
3440 child = d_alloc(dentry, &slash_name); in vfs_tmpfile()
3468 struct dentry *child; in do_tmpfile()
3476 child = vfs_tmpfile(path.dentry, op->mode, op->open_flag); in do_tmpfile()
3480 dput(path.dentry); in do_tmpfile()
3481 path.dentry = child; in do_tmpfile()
3501 audit_inode(nd->name, path.dentry, 0); in do_o_path()
3564 struct file *do_file_open_root(struct dentry *dentry, struct vfsmount *mnt, in do_file_open_root() argument
3573 nd.root.dentry = dentry; in do_file_open_root()
3575 if (d_is_symlink(dentry) && op->intent & LOOKUP_OPEN) in do_file_open_root()
3593 static struct dentry *filename_create(int dfd, struct filename *name, in filename_create()
3596 struct dentry *dentry = ERR_PTR(-EEXIST); in filename_create() local
3626 inode_lock_nested(path->dentry->d_inode, I_MUTEX_PARENT); in filename_create()
3627 dentry = __lookup_hash(&last, path->dentry, lookup_flags); in filename_create()
3628 if (IS_ERR(dentry)) in filename_create()
3632 if (d_is_positive(dentry)) in filename_create()
3650 return dentry; in filename_create()
3652 dput(dentry); in filename_create()
3653 dentry = ERR_PTR(error); in filename_create()
3655 inode_unlock(path->dentry->d_inode); in filename_create()
3661 return dentry; in filename_create()
3664 struct dentry *kern_path_create(int dfd, const char *pathname, in kern_path_create()
3672 void done_path_create(struct path *path, struct dentry *dentry) in done_path_create() argument
3674 dput(dentry); in done_path_create()
3675 inode_unlock(path->dentry->d_inode); in done_path_create()
3681 inline struct dentry *user_path_create(int dfd, const char __user *pathname, in user_path_create()
3688 int vfs_mknod(struct inode *dir, struct dentry *dentry, umode_t mode, dev_t dev) in vfs_mknod() argument
3690 int error = may_create(dir, dentry); in vfs_mknod()
3705 error = security_inode_mknod(dir, dentry, mode, dev); in vfs_mknod()
3709 error = dir->i_op->mknod(dir, dentry, mode, dev); in vfs_mknod()
3711 fsnotify_create(dir, dentry); in vfs_mknod()
3736 struct dentry *dentry; in do_mknodat() local
3745 dentry = user_path_create(dfd, filename, &path, lookup_flags); in do_mknodat()
3746 if (IS_ERR(dentry)) in do_mknodat()
3747 return PTR_ERR(dentry); in do_mknodat()
3749 if (!IS_POSIXACL(path.dentry->d_inode)) in do_mknodat()
3751 error = security_path_mknod(&path, dentry, mode, dev); in do_mknodat()
3756 error = vfs_create(path.dentry->d_inode,dentry,mode,true); in do_mknodat()
3758 ima_post_path_mknod(dentry); in do_mknodat()
3761 error = vfs_mknod(path.dentry->d_inode,dentry,mode, in do_mknodat()
3765 error = vfs_mknod(path.dentry->d_inode,dentry,mode,0); in do_mknodat()
3769 done_path_create(&path, dentry); in do_mknodat()
3788 int vfs_mkdir(struct inode *dir, struct dentry *dentry, umode_t mode) in vfs_mkdir() argument
3790 int error = may_create(dir, dentry); in vfs_mkdir()
3800 error = security_inode_mkdir(dir, dentry, mode); in vfs_mkdir()
3807 error = dir->i_op->mkdir(dir, dentry, mode); in vfs_mkdir()
3809 fsnotify_mkdir(dir, dentry); in vfs_mkdir()
3816 struct dentry *dentry; in do_mkdirat() local
3822 dentry = user_path_create(dfd, pathname, &path, lookup_flags); in do_mkdirat()
3823 if (IS_ERR(dentry)) in do_mkdirat()
3824 return PTR_ERR(dentry); in do_mkdirat()
3826 if (!IS_POSIXACL(path.dentry->d_inode)) in do_mkdirat()
3828 error = security_path_mkdir(&path, dentry, mode); in do_mkdirat()
3830 error = vfs_mkdir(path.dentry->d_inode, dentry, mode); in do_mkdirat()
3831 done_path_create(&path, dentry); in do_mkdirat()
3849 int vfs_rmdir(struct inode *dir, struct dentry *dentry) in vfs_rmdir() argument
3851 int error = may_delete(dir, dentry, 1); in vfs_rmdir()
3859 dget(dentry); in vfs_rmdir()
3860 inode_lock(dentry->d_inode); in vfs_rmdir()
3863 if (is_local_mountpoint(dentry)) in vfs_rmdir()
3866 error = security_inode_rmdir(dir, dentry); in vfs_rmdir()
3870 error = dir->i_op->rmdir(dir, dentry); in vfs_rmdir()
3874 shrink_dcache_parent(dentry); in vfs_rmdir()
3875 dentry->d_inode->i_flags |= S_DEAD; in vfs_rmdir()
3876 dont_mount(dentry); in vfs_rmdir()
3877 detach_mounts(dentry); in vfs_rmdir()
3878 fsnotify_rmdir(dir, dentry); in vfs_rmdir()
3881 inode_unlock(dentry->d_inode); in vfs_rmdir()
3882 dput(dentry); in vfs_rmdir()
3884 d_delete(dentry); in vfs_rmdir()
3893 struct dentry *dentry; in do_rmdir() local
3920 inode_lock_nested(path.dentry->d_inode, I_MUTEX_PARENT); in do_rmdir()
3921 dentry = __lookup_hash(&last, path.dentry, lookup_flags); in do_rmdir()
3922 error = PTR_ERR(dentry); in do_rmdir()
3923 if (IS_ERR(dentry)) in do_rmdir()
3925 if (!dentry->d_inode) { in do_rmdir()
3929 error = security_path_rmdir(&path, dentry); in do_rmdir()
3932 error = vfs_rmdir(path.dentry->d_inode, dentry); in do_rmdir()
3934 dput(dentry); in do_rmdir()
3936 inode_unlock(path.dentry->d_inode); in do_rmdir()
3971 int vfs_unlink(struct inode *dir, struct dentry *dentry, struct inode **delegated_inode) in vfs_unlink() argument
3973 struct inode *target = dentry->d_inode; in vfs_unlink()
3974 int error = may_delete(dir, dentry, 0); in vfs_unlink()
3983 if (is_local_mountpoint(dentry)) in vfs_unlink()
3986 error = security_inode_unlink(dir, dentry); in vfs_unlink()
3991 error = dir->i_op->unlink(dir, dentry); in vfs_unlink()
3993 dont_mount(dentry); in vfs_unlink()
3994 detach_mounts(dentry); in vfs_unlink()
3995 fsnotify_unlink(dir, dentry); in vfs_unlink()
4003 if (!error && !(dentry->d_flags & DCACHE_NFSFS_RENAMED)) { in vfs_unlink()
4005 d_delete(dentry); in vfs_unlink()
4021 struct dentry *dentry; in do_unlinkat() local
4041 inode_lock_nested(path.dentry->d_inode, I_MUTEX_PARENT); in do_unlinkat()
4042 dentry = __lookup_hash(&last, path.dentry, lookup_flags); in do_unlinkat()
4043 error = PTR_ERR(dentry); in do_unlinkat()
4044 if (!IS_ERR(dentry)) { in do_unlinkat()
4048 inode = dentry->d_inode; in do_unlinkat()
4049 if (d_is_negative(dentry)) in do_unlinkat()
4052 error = security_path_unlink(&path, dentry); in do_unlinkat()
4055 error = vfs_unlink(path.dentry->d_inode, dentry, &delegated_inode); in do_unlinkat()
4057 dput(dentry); in do_unlinkat()
4059 inode_unlock(path.dentry->d_inode); in do_unlinkat()
4080 if (d_is_negative(dentry)) in do_unlinkat()
4082 else if (d_is_dir(dentry)) in do_unlinkat()
4105 int vfs_symlink(struct inode *dir, struct dentry *dentry, const char *oldname) in vfs_symlink() argument
4107 int error = may_create(dir, dentry); in vfs_symlink()
4115 error = security_inode_symlink(dir, dentry, oldname); in vfs_symlink()
4119 error = dir->i_op->symlink(dir, dentry, oldname); in vfs_symlink()
4121 fsnotify_create(dir, dentry); in vfs_symlink()
4131 struct dentry *dentry; in do_symlinkat() local
4139 dentry = user_path_create(newdfd, newname, &path, lookup_flags); in do_symlinkat()
4140 error = PTR_ERR(dentry); in do_symlinkat()
4141 if (IS_ERR(dentry)) in do_symlinkat()
4144 error = security_path_symlink(&path, dentry, from->name); in do_symlinkat()
4146 error = vfs_symlink(path.dentry->d_inode, dentry, from->name); in do_symlinkat()
4147 done_path_create(&path, dentry); in do_symlinkat()
4187 int vfs_link(struct dentry *old_dentry, struct inode *dir, struct dentry *new_dentry, struct inode … in vfs_link()
4260 struct dentry *new_dentry; in do_linkat()
4298 error = security_path_link(old_path.dentry, &new_path, new_dentry); in do_linkat()
4301 error = vfs_link(old_path.dentry, new_path.dentry->d_inode, new_dentry, &delegated_inode); in do_linkat()
4383 int vfs_rename(struct inode *old_dir, struct dentry *old_dentry, in vfs_rename()
4384 struct inode *new_dir, struct dentry *new_dentry, in vfs_rename()
4511 struct dentry *old_dentry, *new_dentry; in do_renameat2()
4512 struct dentry *trap; in do_renameat2()
4569 trap = lock_rename(new_path.dentry, old_path.dentry); in do_renameat2()
4571 old_dentry = __lookup_hash(&old_last, old_path.dentry, lookup_flags); in do_renameat2()
4579 new_dentry = __lookup_hash(&new_last, new_path.dentry, lookup_flags | target_flags); in do_renameat2()
4619 error = vfs_rename(old_path.dentry->d_inode, old_dentry, in do_renameat2()
4620 new_path.dentry->d_inode, new_dentry, in do_renameat2()
4627 unlock_rename(new_path.dentry, old_path.dentry); in do_renameat2()
4668 int vfs_whiteout(struct inode *dir, struct dentry *dentry) in vfs_whiteout() argument
4670 int error = may_create(dir, dentry); in vfs_whiteout()
4677 return dir->i_op->mknod(dir, dentry, in vfs_whiteout()
4707 int vfs_readlink(struct dentry *dentry, char __user *buffer, int buflen) in vfs_readlink() argument
4709 struct inode *inode = d_inode(dentry); in vfs_readlink()
4716 return inode->i_op->readlink(dentry, buffer, buflen); in vfs_readlink()
4718 if (!d_is_symlink(dentry)) in vfs_readlink()
4728 link = inode->i_op->get_link(dentry, inode, &done); in vfs_readlink()
4749 const char *vfs_get_link(struct dentry *dentry, struct delayed_call *done) in vfs_get_link() argument
4752 struct inode *inode = d_inode(dentry); in vfs_get_link()
4754 if (d_is_symlink(dentry)) { in vfs_get_link()
4755 res = ERR_PTR(security_inode_readlink(dentry)); in vfs_get_link()
4757 res = inode->i_op->get_link(dentry, inode, done); in vfs_get_link()
4764 const char *page_get_link(struct dentry *dentry, struct inode *inode, in page_get_link() argument
4771 if (!dentry) { in page_get_link()
4799 int page_readlink(struct dentry *dentry, char __user *buffer, int buflen) in page_readlink() argument
4803 page_get_link(dentry, d_inode(dentry), in page_readlink()