Lines Matching refs:dentry

478 	dget(path->dentry);  in path_get()
490 dput(path->dentry); in path_put()
578 return is_subdir(path->dentry, mnt->mnt_root); in path_connected()
632 path->dentry = NULL; in legitimize_path()
635 if (unlikely(!lockref_get_not_dead(&path->dentry->d_lockref))) { in legitimize_path()
636 path->dentry = NULL; in legitimize_path()
639 return !read_seqcount_retry(&path->dentry->d_seq, seq); in legitimize_path()
680 static int unlazy_walk(struct nameidata *nd, struct dentry *dentry, unsigned seq) in unlazy_walk() argument
682 struct dentry *parent = nd->path.dentry; in unlazy_walk()
705 if (!dentry) { in unlazy_walk()
710 if (!lockref_get_not_dead(&dentry->d_lockref)) in unlazy_walk()
712 if (read_seqcount_retry(&dentry->d_seq, seq)) in unlazy_walk()
723 dput(dentry); in unlazy_walk()
733 dput(dentry); in unlazy_walk()
738 nd->path.dentry = NULL; in unlazy_walk()
754 nd->path.dentry = NULL; in unlazy_link()
765 static inline int d_revalidate(struct dentry *dentry, unsigned int flags) in d_revalidate() argument
767 return dentry->d_op->d_revalidate(dentry, flags); in d_revalidate()
782 struct dentry *dentry = nd->path.dentry; in complete_walk() local
795 if (likely(!(dentry->d_flags & DCACHE_OP_WEAK_REVALIDATE))) in complete_walk()
798 status = dentry->d_op->d_weak_revalidate(dentry, nd->flags); in complete_walk()
821 nd->root_seq = __read_seqcount_begin(&nd->root.dentry->d_seq); in set_root_rcu()
827 dput(path->dentry); in path_put_conditional()
836 dput(nd->path.dentry); in path_to_nameidata()
841 nd->path.dentry = path->dentry; in path_to_nameidata()
854 nd->inode = nd->path.dentry->d_inode; in nd_jump_link()
969 inode = link->dentry->d_inode; in may_linkat()
985 struct dentry *dentry = last->link.dentry; in get_link() local
999 error = security_inode_follow_link(dentry, inode, in get_link()
1011 res = inode->i_op->follow_link(dentry, &last->cookie); in get_link()
1019 struct dentry *d; in get_link()
1023 d = nd->path.dentry; in get_link()
1034 nd->inode = nd->path.dentry->d_inode; in get_link()
1059 struct dentry *mountpoint; in follow_up()
1070 dput(path->dentry); in follow_up()
1071 path->dentry = mountpoint; in follow_up()
1089 if (!path->dentry->d_op || !path->dentry->d_op->d_automount) in follow_automount()
1105 path->dentry->d_inode) in follow_automount()
1112 mnt = path->dentry->d_op->d_automount(path); in follow_automount()
1145 path->dentry = dget(mnt->mnt_root); in follow_automount()
1173 while (managed = ACCESS_ONCE(path->dentry->d_flags), in follow_managed()
1179 BUG_ON(!path->dentry->d_op); in follow_managed()
1180 BUG_ON(!path->dentry->d_op->d_manage); in follow_managed()
1181 ret = path->dentry->d_op->d_manage(path->dentry, false); in follow_managed()
1190 dput(path->dentry); in follow_managed()
1194 path->dentry = dget(mounted->mnt_root); in follow_managed()
1234 dput(path->dentry); in follow_down_one()
1237 path->dentry = dget(mounted->mnt_root); in follow_down_one()
1244 static inline int managed_dentry_rcu(struct dentry *dentry) in managed_dentry_rcu() argument
1246 return (dentry->d_flags & DCACHE_MANAGE_TRANSIT) ? in managed_dentry_rcu()
1247 dentry->d_op->d_manage(dentry, true) : 0; in managed_dentry_rcu()
1263 switch (managed_dentry_rcu(path->dentry)) { in __follow_mount_rcu()
1273 if (!d_mountpoint(path->dentry)) in __follow_mount_rcu()
1274 return !(path->dentry->d_flags & DCACHE_NEED_AUTOMOUNT); in __follow_mount_rcu()
1276 mounted = __lookup_mnt(path->mnt, path->dentry); in __follow_mount_rcu()
1280 path->dentry = mounted->mnt.mnt_root; in __follow_mount_rcu()
1282 *seqp = read_seqcount_begin(&path->dentry->d_seq); in __follow_mount_rcu()
1288 *inode = path->dentry->d_inode; in __follow_mount_rcu()
1291 !(path->dentry->d_flags & DCACHE_NEED_AUTOMOUNT); in __follow_mount_rcu()
1303 if (nd->path.dentry != nd->path.mnt->mnt_root) { in follow_dotdot_rcu()
1304 struct dentry *old = nd->path.dentry; in follow_dotdot_rcu()
1305 struct dentry *parent = old->d_parent; in follow_dotdot_rcu()
1312 nd->path.dentry = parent; in follow_dotdot_rcu()
1320 struct dentry *mountpoint = mnt->mnt_mountpoint; in follow_dotdot_rcu()
1328 nd->path.dentry = mountpoint; in follow_dotdot_rcu()
1334 while (unlikely(d_mountpoint(nd->path.dentry))) { in follow_dotdot_rcu()
1336 mounted = __lookup_mnt(nd->path.mnt, nd->path.dentry); in follow_dotdot_rcu()
1342 nd->path.dentry = mounted->mnt.mnt_root; in follow_dotdot_rcu()
1343 inode = nd->path.dentry->d_inode; in follow_dotdot_rcu()
1344 nd->seq = read_seqcount_begin(&nd->path.dentry->d_seq); in follow_dotdot_rcu()
1360 while (managed = ACCESS_ONCE(path->dentry->d_flags), in follow_down()
1373 BUG_ON(!path->dentry->d_op); in follow_down()
1374 BUG_ON(!path->dentry->d_op->d_manage); in follow_down()
1375 ret = path->dentry->d_op->d_manage( in follow_down()
1376 path->dentry, false); in follow_down()
1386 dput(path->dentry); in follow_down()
1389 path->dentry = dget(mounted->mnt_root); in follow_down()
1405 while (d_mountpoint(path->dentry)) { in follow_mount()
1409 dput(path->dentry); in follow_mount()
1412 path->dentry = dget(mounted->mnt_root); in follow_mount()
1422 struct dentry *old = nd->path.dentry; in follow_dotdot()
1424 if (nd->path.dentry == nd->root.dentry && in follow_dotdot()
1428 if (nd->path.dentry != nd->path.mnt->mnt_root) { in follow_dotdot()
1430 nd->path.dentry = dget_parent(nd->path.dentry); in follow_dotdot()
1440 nd->inode = nd->path.dentry->d_inode; in follow_dotdot()
1451 static struct dentry *lookup_dcache(struct qstr *name, struct dentry *dir, in lookup_dcache()
1454 struct dentry *dentry; in lookup_dcache() local
1458 dentry = d_lookup(dir, name); in lookup_dcache()
1459 if (dentry) { in lookup_dcache()
1460 if (dentry->d_flags & DCACHE_OP_REVALIDATE) { in lookup_dcache()
1461 error = d_revalidate(dentry, flags); in lookup_dcache()
1464 dput(dentry); in lookup_dcache()
1467 d_invalidate(dentry); in lookup_dcache()
1468 dput(dentry); in lookup_dcache()
1469 dentry = NULL; in lookup_dcache()
1475 if (!dentry) { in lookup_dcache()
1476 dentry = d_alloc(dir, name); in lookup_dcache()
1477 if (unlikely(!dentry)) in lookup_dcache()
1482 return dentry; in lookup_dcache()
1491 static struct dentry *lookup_real(struct inode *dir, struct dentry *dentry, in lookup_real() argument
1494 struct dentry *old; in lookup_real()
1498 dput(dentry); in lookup_real()
1502 old = dir->i_op->lookup(dir, dentry, flags); in lookup_real()
1504 dput(dentry); in lookup_real()
1505 dentry = old; in lookup_real()
1507 return dentry; in lookup_real()
1510 static struct dentry *__lookup_hash(struct qstr *name, in __lookup_hash()
1511 struct dentry *base, unsigned int flags) in __lookup_hash()
1514 struct dentry *dentry; in __lookup_hash() local
1516 dentry = lookup_dcache(name, base, flags, &need_lookup); in __lookup_hash()
1518 return dentry; in __lookup_hash()
1520 return lookup_real(base->d_inode, dentry, flags); in __lookup_hash()
1533 struct dentry *dentry, *parent = nd->path.dentry; in lookup_fast() local
1546 dentry = __d_lookup_rcu(parent, &nd->last, &seq); in lookup_fast()
1547 if (!dentry) in lookup_fast()
1554 *inode = d_backing_inode(dentry); in lookup_fast()
1555 negative = d_is_negative(dentry); in lookup_fast()
1556 if (read_seqcount_retry(&dentry->d_seq, seq)) in lookup_fast()
1570 if (unlikely(dentry->d_flags & DCACHE_OP_REVALIDATE)) { in lookup_fast()
1571 status = d_revalidate(dentry, nd->flags); in lookup_fast()
1585 path->dentry = dentry; in lookup_fast()
1589 if (unlazy_walk(nd, dentry, seq)) in lookup_fast()
1592 dentry = __d_lookup(parent, &nd->last); in lookup_fast()
1595 if (unlikely(!dentry)) in lookup_fast()
1598 if (unlikely(dentry->d_flags & DCACHE_OP_REVALIDATE) && need_reval) in lookup_fast()
1599 status = d_revalidate(dentry, nd->flags); in lookup_fast()
1602 dput(dentry); in lookup_fast()
1605 d_invalidate(dentry); in lookup_fast()
1606 dput(dentry); in lookup_fast()
1610 if (unlikely(d_is_negative(dentry))) { in lookup_fast()
1611 dput(dentry); in lookup_fast()
1615 path->dentry = dentry; in lookup_fast()
1618 *inode = d_backing_inode(path->dentry); in lookup_fast()
1628 struct dentry *dentry, *parent; in lookup_slow() local
1630 parent = nd->path.dentry; in lookup_slow()
1634 dentry = __lookup_hash(&nd->last, parent, nd->flags); in lookup_slow()
1636 if (IS_ERR(dentry)) in lookup_slow()
1637 return PTR_ERR(dentry); in lookup_slow()
1639 path->dentry = dentry; in lookup_slow()
1710 if (likely(!d_is_symlink(link->dentry))) in should_follow_link()
1716 if (read_seqcount_retry(&link->dentry->d_seq, seq)) in should_follow_link()
1752 if (d_is_negative(path.dentry)) in walk_component()
1754 inode = d_backing_inode(path.dentry); in walk_component()
1928 struct dentry *parent = nd->path.dentry; in link_path_walk()
1986 if (unlikely(!d_can_lookup(nd->path.dentry))) { in link_path_walk()
2005 struct dentry *root = nd->root.dentry; in path_init()
2018 nd->seq = __read_seqcount_begin(&nd->path.dentry->d_seq); in path_init()
2050 nd->seq = __read_seqcount_begin(&nd->path.dentry->d_seq); in path_init()
2058 struct dentry *dentry; in path_init() local
2063 dentry = f.file->f_path.dentry; in path_init()
2066 if (!d_can_lookup(dentry)) { in path_init()
2075 nd->inode = nd->path.dentry->d_inode; in path_init()
2076 nd->seq = read_seqcount_begin(&nd->path.dentry->d_seq); in path_init()
2079 nd->inode = nd->path.dentry->d_inode; in path_init()
2085 nd->inode = nd->path.dentry->d_inode; in path_init()
2088 if (likely(!read_seqcount_retry(&nd->path.dentry->d_seq, nd->seq))) in path_init()
2142 if (!d_can_lookup(nd->path.dentry)) in path_lookupat()
2147 nd->path.dentry = NULL; in path_lookupat()
2172 audit_inode(name, path->dentry, flags & LOOKUP_PARENT); in filename_lookup()
2192 nd->path.dentry = NULL; in path_parentat()
2216 audit_inode(name, parent->dentry, LOOKUP_PARENT); in filename_parentat()
2226 struct dentry *kern_path_locked(const char *name, struct path *path) in kern_path_locked()
2229 struct dentry *d; in kern_path_locked()
2242 mutex_lock_nested(&path->dentry->d_inode->i_mutex, I_MUTEX_PARENT); in kern_path_locked()
2243 d = __lookup_hash(&last, path->dentry, 0); in kern_path_locked()
2245 mutex_unlock(&path->dentry->d_inode->i_mutex); in kern_path_locked()
2267 int vfs_path_lookup(struct dentry *dentry, struct vfsmount *mnt, in vfs_path_lookup() argument
2271 struct path root = {.mnt = mnt, .dentry = dentry}; in vfs_path_lookup()
2287 struct dentry *lookup_one_len(const char *name, struct dentry *base, int len) in lookup_one_len()
2386 struct dentry *dentry; in mountpoint_last() local
2387 struct dentry *dir = nd->path.dentry; in mountpoint_last()
2401 dentry = dget(nd->path.dentry); in mountpoint_last()
2406 dentry = d_lookup(dir, &nd->last); in mountpoint_last()
2407 if (!dentry) { in mountpoint_last()
2413 dentry = d_alloc(dir, &nd->last); in mountpoint_last()
2414 if (!dentry) { in mountpoint_last()
2418 dentry = lookup_real(dir->d_inode, dentry, nd->flags); in mountpoint_last()
2419 if (IS_ERR(dentry)) { in mountpoint_last()
2421 return PTR_ERR(dentry); in mountpoint_last()
2427 if (d_is_negative(dentry)) { in mountpoint_last()
2428 dput(dentry); in mountpoint_last()
2433 path->dentry = dentry; in mountpoint_last()
2436 d_backing_inode(dentry), 0); in mountpoint_last()
2487 audit_inode(name, path->dentry, 0); in filename_mountpoint()
2553 static int may_delete(struct inode *dir, struct dentry *victim, bool isdir) in may_delete()
2596 static inline int may_create(struct inode *dir, struct dentry *child) in may_create()
2609 struct dentry *lock_rename(struct dentry *p1, struct dentry *p2) in lock_rename()
2611 struct dentry *p; in lock_rename()
2640 void unlock_rename(struct dentry *p1, struct dentry *p2) in unlock_rename()
2650 int vfs_create(struct inode *dir, struct dentry *dentry, umode_t mode, in vfs_create() argument
2653 int error = may_create(dir, dentry); in vfs_create()
2661 error = security_inode_create(dir, dentry, mode); in vfs_create()
2664 error = dir->i_op->create(dir, dentry, mode, want_excl); in vfs_create()
2666 fsnotify_create(dir, dentry); in vfs_create()
2673 struct dentry *dentry = path->dentry; in may_open() local
2674 struct inode *inode = dentry->d_inode; in may_open()
2726 struct inode *inode = path->dentry->d_inode; in handle_truncate()
2737 error = do_truncate(path->dentry, 0, in handle_truncate()
2752 static int may_o_create(struct path *dir, struct dentry *dentry, umode_t mode) in may_o_create() argument
2754 int error = security_path_mknod(dir, dentry, mode, 0); in may_o_create()
2758 error = inode_permission(dir->dentry->d_inode, MAY_WRITE | MAY_EXEC); in may_o_create()
2762 return security_inode_create(dir->dentry->d_inode, dentry, mode); in may_o_create()
2778 static int atomic_open(struct nameidata *nd, struct dentry *dentry, in atomic_open() argument
2784 struct inode *dir = nd->path.dentry->d_inode; in atomic_open()
2790 struct dentry *const DENTRY_NOT_SET = (void *) -1UL; in atomic_open()
2793 BUG_ON(dentry->d_inode); in atomic_open()
2838 error = may_o_create(&nd->path, dentry, mode); in atomic_open()
2850 file->f_path.dentry = DENTRY_NOT_SET; in atomic_open()
2852 error = dir->i_op->atomic_open(dir, dentry, file, open_flag, mode, in atomic_open()
2861 if (WARN_ON(file->f_path.dentry == DENTRY_NOT_SET)) { in atomic_open()
2865 if (file->f_path.dentry) { in atomic_open()
2866 dput(dentry); in atomic_open()
2867 dentry = file->f_path.dentry; in atomic_open()
2870 fsnotify_create(dir, dentry); in atomic_open()
2871 if (!dentry->d_inode) { in atomic_open()
2893 fsnotify_create(dir, dentry); in atomic_open()
2901 dput(dentry); in atomic_open()
2906 dentry = lookup_real(dir, dentry, nd->flags); in atomic_open()
2907 if (IS_ERR(dentry)) in atomic_open()
2908 return PTR_ERR(dentry); in atomic_open()
2910 if (create_error && !dentry->d_inode) { in atomic_open()
2915 path->dentry = dentry; in atomic_open()
2943 struct dentry *dir = nd->path.dentry; in lookup_open()
2945 struct dentry *dentry; in lookup_open() local
2950 dentry = lookup_dcache(&nd->last, dir, nd->flags, &need_lookup); in lookup_open()
2951 if (IS_ERR(dentry)) in lookup_open()
2952 return PTR_ERR(dentry); in lookup_open()
2955 if (!need_lookup && dentry->d_inode) in lookup_open()
2959 return atomic_open(nd, dentry, path, file, op, got_write, in lookup_open()
2964 BUG_ON(dentry->d_inode); in lookup_open()
2966 dentry = lookup_real(dir_inode, dentry, nd->flags); in lookup_open()
2967 if (IS_ERR(dentry)) in lookup_open()
2968 return PTR_ERR(dentry); in lookup_open()
2972 if (!dentry->d_inode && (op->open_flag & O_CREAT)) { in lookup_open()
2988 error = security_path_mknod(&nd->path, dentry, mode, 0); in lookup_open()
2991 error = vfs_create(dir->d_inode, dentry, mode, in lookup_open()
2997 path->dentry = dentry; in lookup_open()
3002 dput(dentry); in lookup_open()
3013 struct dentry *dir = nd->path.dentry; in do_last()
3020 struct path save_parent = { .dentry = NULL, .mnt = NULL }; in do_last()
3087 audit_inode(nd->name, file->f_path.dentry, 0); in do_last()
3103 if (d_is_positive(path.dentry)) in do_last()
3104 audit_inode(nd->name, path.dentry, 0); in do_last()
3127 if (unlikely(d_is_negative(path.dentry))) { in do_last()
3131 inode = d_backing_inode(path.dentry); in do_last()
3143 save_parent.dentry = nd->path.dentry; in do_last()
3145 nd->path.dentry = path.dentry; in do_last()
3157 audit_inode(nd->name, nd->path.dentry, 0); in do_last()
3158 if (unlikely(d_is_symlink(nd->path.dentry)) && !(open_flag & O_PATH)) { in do_last()
3163 if ((open_flag & O_CREAT) && d_is_dir(nd->path.dentry)) in do_last()
3166 if ((nd->flags & LOOKUP_DIRECTORY) && !d_can_lookup(nd->path.dentry)) in do_last()
3168 if (!d_is_reg(nd->path.dentry)) in do_last()
3220 if (!save_parent.dentry || retried) in do_last()
3223 BUG_ON(save_parent.dentry != dir); in do_last()
3228 save_parent.dentry = NULL; in do_last()
3242 struct dentry *child; in do_tmpfile()
3251 dir = path.dentry->d_inode; in do_tmpfile()
3260 child = d_alloc(path.dentry, &name); in do_tmpfile()
3265 dput(path.dentry); in do_tmpfile()
3266 path.dentry = child; in do_tmpfile()
3363 struct file *do_file_open_root(struct dentry *dentry, struct vfsmount *mnt, in do_file_open_root() argument
3372 nd.root.dentry = dentry; in do_file_open_root()
3374 if (d_is_symlink(dentry) && op->intent & LOOKUP_OPEN) in do_file_open_root()
3392 static struct dentry *filename_create(int dfd, struct filename *name, in filename_create()
3395 struct dentry *dentry = ERR_PTR(-EEXIST); in filename_create() local
3425 mutex_lock_nested(&path->dentry->d_inode->i_mutex, I_MUTEX_PARENT); in filename_create()
3426 dentry = __lookup_hash(&last, path->dentry, lookup_flags); in filename_create()
3427 if (IS_ERR(dentry)) in filename_create()
3431 if (d_is_positive(dentry)) in filename_create()
3449 return dentry; in filename_create()
3451 dput(dentry); in filename_create()
3452 dentry = ERR_PTR(error); in filename_create()
3454 mutex_unlock(&path->dentry->d_inode->i_mutex); in filename_create()
3460 return dentry; in filename_create()
3463 struct dentry *kern_path_create(int dfd, const char *pathname, in kern_path_create()
3471 void done_path_create(struct path *path, struct dentry *dentry) in done_path_create() argument
3473 dput(dentry); in done_path_create()
3474 mutex_unlock(&path->dentry->d_inode->i_mutex); in done_path_create()
3480 inline struct dentry *user_path_create(int dfd, const char __user *pathname, in user_path_create()
3487 int vfs_mknod(struct inode *dir, struct dentry *dentry, umode_t mode, dev_t dev) in vfs_mknod() argument
3489 int error = may_create(dir, dentry); in vfs_mknod()
3504 error = security_inode_mknod(dir, dentry, mode, dev); in vfs_mknod()
3508 error = dir->i_op->mknod(dir, dentry, mode, dev); in vfs_mknod()
3510 fsnotify_create(dir, dentry); in vfs_mknod()
3535 struct dentry *dentry; in SYSCALL_DEFINE4() local
3544 dentry = user_path_create(dfd, filename, &path, lookup_flags); in SYSCALL_DEFINE4()
3545 if (IS_ERR(dentry)) in SYSCALL_DEFINE4()
3546 return PTR_ERR(dentry); in SYSCALL_DEFINE4()
3548 if (!IS_POSIXACL(path.dentry->d_inode)) in SYSCALL_DEFINE4()
3550 error = security_path_mknod(&path, dentry, mode, dev); in SYSCALL_DEFINE4()
3555 error = vfs_create(path.dentry->d_inode,dentry,mode,true); in SYSCALL_DEFINE4()
3558 error = vfs_mknod(path.dentry->d_inode,dentry,mode, in SYSCALL_DEFINE4()
3562 error = vfs_mknod(path.dentry->d_inode,dentry,mode,0); in SYSCALL_DEFINE4()
3566 done_path_create(&path, dentry); in SYSCALL_DEFINE4()
3579 int vfs_mkdir(struct inode *dir, struct dentry *dentry, umode_t mode) in vfs_mkdir() argument
3581 int error = may_create(dir, dentry); in vfs_mkdir()
3591 error = security_inode_mkdir(dir, dentry, mode); in vfs_mkdir()
3598 error = dir->i_op->mkdir(dir, dentry, mode); in vfs_mkdir()
3600 fsnotify_mkdir(dir, dentry); in vfs_mkdir()
3607 struct dentry *dentry; in SYSCALL_DEFINE3() local
3613 dentry = user_path_create(dfd, pathname, &path, lookup_flags); in SYSCALL_DEFINE3()
3614 if (IS_ERR(dentry)) in SYSCALL_DEFINE3()
3615 return PTR_ERR(dentry); in SYSCALL_DEFINE3()
3617 if (!IS_POSIXACL(path.dentry->d_inode)) in SYSCALL_DEFINE3()
3619 error = security_path_mkdir(&path, dentry, mode); in SYSCALL_DEFINE3()
3621 error = vfs_mkdir(path.dentry->d_inode, dentry, mode); in SYSCALL_DEFINE3()
3622 done_path_create(&path, dentry); in SYSCALL_DEFINE3()
3650 void dentry_unhash(struct dentry *dentry) in dentry_unhash() argument
3652 shrink_dcache_parent(dentry); in dentry_unhash()
3653 spin_lock(&dentry->d_lock); in dentry_unhash()
3654 if (dentry->d_lockref.count == 1) in dentry_unhash()
3655 __d_drop(dentry); in dentry_unhash()
3656 spin_unlock(&dentry->d_lock); in dentry_unhash()
3660 int vfs_rmdir(struct inode *dir, struct dentry *dentry) in vfs_rmdir() argument
3662 int error = may_delete(dir, dentry, 1); in vfs_rmdir()
3670 dget(dentry); in vfs_rmdir()
3671 mutex_lock(&dentry->d_inode->i_mutex); in vfs_rmdir()
3674 if (is_local_mountpoint(dentry)) in vfs_rmdir()
3677 error = security_inode_rmdir(dir, dentry); in vfs_rmdir()
3681 shrink_dcache_parent(dentry); in vfs_rmdir()
3682 error = dir->i_op->rmdir(dir, dentry); in vfs_rmdir()
3686 dentry->d_inode->i_flags |= S_DEAD; in vfs_rmdir()
3687 dont_mount(dentry); in vfs_rmdir()
3688 detach_mounts(dentry); in vfs_rmdir()
3691 mutex_unlock(&dentry->d_inode->i_mutex); in vfs_rmdir()
3692 dput(dentry); in vfs_rmdir()
3694 d_delete(dentry); in vfs_rmdir()
3703 struct dentry *dentry; in do_rmdir() local
3730 mutex_lock_nested(&path.dentry->d_inode->i_mutex, I_MUTEX_PARENT); in do_rmdir()
3731 dentry = __lookup_hash(&last, path.dentry, lookup_flags); in do_rmdir()
3732 error = PTR_ERR(dentry); in do_rmdir()
3733 if (IS_ERR(dentry)) in do_rmdir()
3735 if (!dentry->d_inode) { in do_rmdir()
3739 error = security_path_rmdir(&path, dentry); in do_rmdir()
3742 error = vfs_rmdir(path.dentry->d_inode, dentry); in do_rmdir()
3744 dput(dentry); in do_rmdir()
3746 mutex_unlock(&path.dentry->d_inode->i_mutex); in do_rmdir()
3781 int vfs_unlink(struct inode *dir, struct dentry *dentry, struct inode **delegated_inode) in vfs_unlink() argument
3783 struct inode *target = dentry->d_inode; in vfs_unlink()
3784 int error = may_delete(dir, dentry, 0); in vfs_unlink()
3793 if (is_local_mountpoint(dentry)) in vfs_unlink()
3796 error = security_inode_unlink(dir, dentry); in vfs_unlink()
3801 error = dir->i_op->unlink(dir, dentry); in vfs_unlink()
3803 dont_mount(dentry); in vfs_unlink()
3804 detach_mounts(dentry); in vfs_unlink()
3812 if (!error && !(dentry->d_flags & DCACHE_NFSFS_RENAMED)) { in vfs_unlink()
3814 d_delete(dentry); in vfs_unlink()
3831 struct dentry *dentry; in do_unlinkat() local
3852 mutex_lock_nested(&path.dentry->d_inode->i_mutex, I_MUTEX_PARENT); in do_unlinkat()
3853 dentry = __lookup_hash(&last, path.dentry, lookup_flags); in do_unlinkat()
3854 error = PTR_ERR(dentry); in do_unlinkat()
3855 if (!IS_ERR(dentry)) { in do_unlinkat()
3859 inode = dentry->d_inode; in do_unlinkat()
3860 if (d_is_negative(dentry)) in do_unlinkat()
3863 error = security_path_unlink(&path, dentry); in do_unlinkat()
3866 error = vfs_unlink(path.dentry->d_inode, dentry, &delegated_inode); in do_unlinkat()
3868 dput(dentry); in do_unlinkat()
3870 mutex_unlock(&path.dentry->d_inode->i_mutex); in do_unlinkat()
3891 if (d_is_negative(dentry)) in do_unlinkat()
3893 else if (d_is_dir(dentry)) in do_unlinkat()
3916 int vfs_symlink(struct inode *dir, struct dentry *dentry, const char *oldname) in vfs_symlink() argument
3918 int error = may_create(dir, dentry); in vfs_symlink()
3926 error = security_inode_symlink(dir, dentry, oldname); in vfs_symlink()
3930 error = dir->i_op->symlink(dir, dentry, oldname); in vfs_symlink()
3932 fsnotify_create(dir, dentry); in vfs_symlink()
3942 struct dentry *dentry; in SYSCALL_DEFINE3() local
3950 dentry = user_path_create(newdfd, newname, &path, lookup_flags); in SYSCALL_DEFINE3()
3951 error = PTR_ERR(dentry); in SYSCALL_DEFINE3()
3952 if (IS_ERR(dentry)) in SYSCALL_DEFINE3()
3955 error = security_path_symlink(&path, dentry, from->name); in SYSCALL_DEFINE3()
3957 error = vfs_symlink(path.dentry->d_inode, dentry, from->name); in SYSCALL_DEFINE3()
3958 done_path_create(&path, dentry); in SYSCALL_DEFINE3()
3992 int vfs_link(struct dentry *old_dentry, struct inode *dir, struct dentry *new_dentry, struct inode … in vfs_link()
4058 struct dentry *new_dentry; in SYSCALL_DEFINE5()
4096 error = security_path_link(old_path.dentry, &new_path, new_dentry); in SYSCALL_DEFINE5()
4099 error = vfs_link(old_path.dentry, new_path.dentry->d_inode, new_dentry, &delegated_inode); in SYSCALL_DEFINE5()
4174 int vfs_rename(struct inode *old_dir, struct dentry *old_dentry, in vfs_rename()
4175 struct inode *new_dir, struct dentry *new_dentry, in vfs_rename()
4315 struct dentry *old_dentry, *new_dentry; in SYSCALL_DEFINE5()
4316 struct dentry *trap; in SYSCALL_DEFINE5()
4373 trap = lock_rename(new_path.dentry, old_path.dentry); in SYSCALL_DEFINE5()
4375 old_dentry = __lookup_hash(&old_last, old_path.dentry, lookup_flags); in SYSCALL_DEFINE5()
4383 new_dentry = __lookup_hash(&new_last, new_path.dentry, lookup_flags | target_flags); in SYSCALL_DEFINE5()
4423 error = vfs_rename(old_path.dentry->d_inode, old_dentry, in SYSCALL_DEFINE5()
4424 new_path.dentry->d_inode, new_dentry, in SYSCALL_DEFINE5()
4431 unlock_rename(new_path.dentry, old_path.dentry); in SYSCALL_DEFINE5()
4466 int vfs_whiteout(struct inode *dir, struct dentry *dentry) in vfs_whiteout() argument
4468 int error = may_create(dir, dentry); in vfs_whiteout()
4475 return dir->i_op->mknod(dir, dentry, in vfs_whiteout()
4501 int generic_readlink(struct dentry *dentry, char __user *buffer, int buflen) in generic_readlink() argument
4504 struct inode *inode = d_inode(dentry); in generic_readlink()
4509 link = inode->i_op->follow_link(dentry, &cookie); in generic_readlink()
4521 static char *page_getlink(struct dentry * dentry, struct page **ppage) in page_getlink() argument
4525 struct address_space *mapping = dentry->d_inode->i_mapping; in page_getlink()
4531 nd_terminate_link(kaddr, dentry->d_inode->i_size, PAGE_SIZE - 1); in page_getlink()
4535 int page_readlink(struct dentry *dentry, char __user *buffer, int buflen) in page_readlink() argument
4538 int res = readlink_copy(buffer, buflen, page_getlink(dentry, &page)); in page_readlink()
4547 const char *page_follow_link_light(struct dentry *dentry, void **cookie) in page_follow_link_light() argument
4550 char *res = page_getlink(dentry, &page); in page_follow_link_light()