Linux: Check for multiple silly renames
authorSimon Wilkinson <sxw@inf.ed.ac.uk>
Sun, 27 Dec 2009 11:28:43 +0000 (11:28 +0000)
committerDerrick Brashear <shadow|account-1000005@unknown>
Thu, 31 Dec 2009 13:06:11 +0000 (05:06 -0800)
We don't want to do multiple silly renames of the same dcache entry,
so add a check for that occuring, and just return EBUSY if we're
trying to do so.

Change-Id: Ic1cb4061d89bf87926995162f1ac410375bddcb5
Reviewed-on: http://gerrit.openafs.org/1035
Reviewed-by: Derrick Brashear <shadow@dementia.org>
Tested-by: Derrick Brashear <shadow@dementia.org>

src/afs/LINUX/osi_compat.h
src/afs/LINUX/osi_vnodeops.c

index b973186..866d3fc 100644 (file)
@@ -65,6 +65,12 @@ afs_linux_set_nfsfs_renamed(struct dentry *dp) {
     dp->d_flags |= DCACHE_NFSFS_RENAMED;
     spin_unlock(&dp->d_lock);
 }
+
+static inline int
+afs_linux_nfsfs_renamed(struct dentry *dp) {
+    return dp->d_flags & DCACHE_NFSFS_RENAMED;
+}
+
 #else
 static inline void afs_linux_clear_nfsfs_renamed(void) { return; }
 static inline void afs_linux_set_nfsfs_renamed(void) { return; }
index 6543efd..83a5ab0 100644 (file)
@@ -1130,6 +1130,9 @@ afs_linux_sillyrename(struct inode *dir, struct dentry *dentry,
     char *__name = NULL;
     int code;
 
+    if (afs_linux_nfsfs_renamed(dentry))
+       return EBUSY;
+
     do {
        dput(__dp);