Home Home > GIT Browse
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJan Kara <jack@suse.cz>2014-03-13 23:09:43 +0100
committerJan Kara <jack@suse.cz>2014-03-13 23:09:43 +0100
commit14493f1cc7e9235966bf8d1c2f68b31abedcacd1 (patch)
tree4870889d26860084109431f200036a2c80bcd045
parentad5cf069e0f37907083dcf69e9b1028c8542b35e (diff)
ncpfs: fix rmdir returns Device or resource busy (bnc#864880).rpm-3.0.101-0.18
-rw-r--r--patches.fixes/ncpfs-fix-rmdir-returns-Device-or-resource-busy.patch49
-rw-r--r--series.conf1
2 files changed, 50 insertions, 0 deletions
diff --git a/patches.fixes/ncpfs-fix-rmdir-returns-Device-or-resource-busy.patch b/patches.fixes/ncpfs-fix-rmdir-returns-Device-or-resource-busy.patch
new file mode 100644
index 0000000000..e03dc41c88
--- /dev/null
+++ b/patches.fixes/ncpfs-fix-rmdir-returns-Device-or-resource-busy.patch
@@ -0,0 +1,49 @@
+From 698b8223631472bf982ed570b0812faa61955683 Mon Sep 17 00:00:00 2001
+From: Dave Chiluk <chiluk@canonical.com>
+Date: Tue, 28 May 2013 16:06:08 -0500
+Subject: [PATCH] ncpfs: fix rmdir returns Device or resource busy
+References: bnc#864880
+Git-commit: 698b8223631472bf982ed570b0812faa61955683
+Patch-mainline: v3.10-rc6
+
+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 <chiluk@canonical.com>
+Signed-off-by: Petr Vandrovec <petr@vandrovec.name>
+Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
+Acked-by: Jan Kara <jack@suse.cz>
+
+---
+ fs/ncpfs/dir.c | 9 ---------
+ 1 file changed, 9 deletions(-)
+
+diff --git a/fs/ncpfs/dir.c b/fs/ncpfs/dir.c
+index 816326093656..6792ce11f2bf 100644
+--- a/fs/ncpfs/dir.c
++++ b/fs/ncpfs/dir.c
+@@ -1029,15 +1029,6 @@ static int ncp_rmdir(struct inode *dir, struct dentry *dentry)
+ DPRINTK("ncp_rmdir: removing %s/%s\n",
+ dentry->d_parent->d_name.name, dentry->d_name.name);
+
+- /*
+- * 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->d_name.name,
+ dentry->d_name.len, !ncp_preserve_case(dir));
+--
+1.8.1.4
+
diff --git a/series.conf b/series.conf
index 92c020c220..d85f2aea61 100644
--- a/series.conf
+++ b/series.conf
@@ -4469,6 +4469,7 @@
patches.fixes/nfs-lock-recovery.fix
patches.fixes/SUNRPC-Fix-a-data-corruption-issue-when-retransmitti.patch
patches.fixes/fscache-crash-fix
+ patches.fixes/ncpfs-fix-rmdir-returns-Device-or-resource-busy.patch
########################################################
# Swap-over-NFS