Loading fs/namei.c +4 −3 Original line number Diff line number Diff line Loading @@ -3617,6 +3617,7 @@ SYSCALL_DEFINE1(rmdir, const char __user *, pathname) int vfs_unlink(struct inode *dir, struct dentry *dentry) { struct inode *target = dentry->d_inode; int error = may_delete(dir, dentry, 0); if (error) Loading @@ -3625,7 +3626,7 @@ int vfs_unlink(struct inode *dir, struct dentry *dentry) if (!dir->i_op->unlink) return -EPERM; mutex_lock(&dentry->d_inode->i_mutex); mutex_lock(&target->i_mutex); if (d_mountpoint(dentry)) error = -EBUSY; else { Loading @@ -3636,11 +3637,11 @@ int vfs_unlink(struct inode *dir, struct dentry *dentry) dont_mount(dentry); } } mutex_unlock(&dentry->d_inode->i_mutex); mutex_unlock(&target->i_mutex); /* We don't d_delete() NFS sillyrenamed files--they still exist. */ if (!error && !(dentry->d_flags & DCACHE_NFSFS_RENAMED)) { fsnotify_link_count(dentry->d_inode); fsnotify_link_count(target); d_delete(dentry); } Loading Loading
fs/namei.c +4 −3 Original line number Diff line number Diff line Loading @@ -3617,6 +3617,7 @@ SYSCALL_DEFINE1(rmdir, const char __user *, pathname) int vfs_unlink(struct inode *dir, struct dentry *dentry) { struct inode *target = dentry->d_inode; int error = may_delete(dir, dentry, 0); if (error) Loading @@ -3625,7 +3626,7 @@ int vfs_unlink(struct inode *dir, struct dentry *dentry) if (!dir->i_op->unlink) return -EPERM; mutex_lock(&dentry->d_inode->i_mutex); mutex_lock(&target->i_mutex); if (d_mountpoint(dentry)) error = -EBUSY; else { Loading @@ -3636,11 +3637,11 @@ int vfs_unlink(struct inode *dir, struct dentry *dentry) dont_mount(dentry); } } mutex_unlock(&dentry->d_inode->i_mutex); mutex_unlock(&target->i_mutex); /* We don't d_delete() NFS sillyrenamed files--they still exist. */ if (!error && !(dentry->d_flags & DCACHE_NFSFS_RENAMED)) { fsnotify_link_count(dentry->d_inode); fsnotify_link_count(target); d_delete(dentry); } Loading