Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs-2.6
[firefly-linux-kernel-4.4.55.git] / fs / fuse / dir.c
index b32eb29a4e6ff4f8dd892b1af9ea74d712f148ee..0d0e3faddcfa0bbd9ddac898d9e7caa0fc2b57bf 100644 (file)
@@ -667,6 +667,8 @@ static int fuse_rmdir(struct inode *dir, struct dentry *entry)
        if (IS_ERR(req))
                return PTR_ERR(req);
 
+       dentry_unhash(entry);
+
        req->in.h.opcode = FUSE_RMDIR;
        req->in.h.nodeid = get_node_id(dir);
        req->in.numargs = 1;
@@ -691,6 +693,10 @@ static int fuse_rename(struct inode *olddir, struct dentry *oldent,
        struct fuse_rename_in inarg;
        struct fuse_conn *fc = get_fuse_conn(olddir);
        struct fuse_req *req = fuse_get_req(fc);
+
+       if (newent->d_inode && S_ISDIR(newent->d_inode->i_mode))
+               dentry_unhash(newent);
+
        if (IS_ERR(req))
                return PTR_ERR(req);