Patchwork [3.5.y.z,extended,stable] Patch "ncpfs: fix rmdir returns Device or resource busy" has been added to staging queue

mail settings
Submitter Luis Henriques
Date June 24, 2013, 8:18 a.m.
Message ID <>
Download mbox | patch
Permalink /patch/253710/
State New
Headers show


Luis Henriques - June 24, 2013, 8:18 a.m.
This is a note to let you know that I have just added a patch titled

    ncpfs: fix rmdir returns Device or resource busy

to the linux-3.5.y-queue branch of the 3.5.y.z extended stable tree 
which can be found at:;a=shortlog;h=refs/heads/linux-3.5.y-queue

If you, or anyone else, feels it should not be added to this tree, please 
reply to this email.

For more information about the 3.5.y.z tree, see



From ce80d41a5b72dd1730e9b24ca7955bb5f6fccd3d Mon Sep 17 00:00:00 2001
From: Dave Chiluk <>
Date: Tue, 28 May 2013 16:06:08 -0500
Subject: [PATCH] ncpfs: fix rmdir returns Device or resource busy

commit 698b8223631472bf982ed570b0812faa61955683 upstream.

1d2ef5901483004d74947bbf78d5146c24038fe7 caused a regression in ncpfs such that
directories could no longer be removed.  This was because ncp_rmdir checked
to see if a dentry could be unhashed before allowing it to be removed. Since
1d2ef5901483004d74947bbf78d5146c24038fe7 introduced a change that incremented
dentry->d_count causing it to always be greater than 1 unhash would always
fail.  Thus causing the error path in ncp_rmdir to always be taken.  Removing
this error path is safe as unhashing is still accomplished by calls to dput
from vfs_rmdir.

Signed-off-by: Dave Chiluk <>
Signed-off-by: Petr Vandrovec <>
Signed-off-by: Al Viro <>
Signed-off-by: Luis Henriques <>
 fs/ncpfs/dir.c | 9 ---------
 1 file changed, 9 deletions(-)



diff --git a/fs/ncpfs/dir.c b/fs/ncpfs/dir.c
index aeed93a..9560fd7 100644
--- a/fs/ncpfs/dir.c
+++ b/fs/ncpfs/dir.c
@@ -1033,15 +1033,6 @@  static int ncp_rmdir(struct inode *dir, struct dentry *dentry)
 	DPRINTK("ncp_rmdir: removing %s/%s\n",
 		dentry->d_parent->, dentry->;

-	/*
-	 * fail with EBUSY if there are still references to this
-	 * directory.
-	 */
-	dentry_unhash(dentry);
-	error = -EBUSY;
-	if (!d_unhashed(dentry))
-		goto out;
 	len = sizeof(__name);
 	error = ncp_io2vol(server, __name, &len, dentry->,
 			   dentry->d_name.len, !ncp_preserve_case(dir));