coda: allow removal of busy directories
[GitHub/mt8127/android_kernel_alcatel_ttab.git] / fs / coda / dir.c
index 56a3b76b91cadd37ca32412d6ae6406591c0d09a..01f55f447d82c31a9eff3b47b530374445b5118a 100644 (file)
@@ -391,28 +391,23 @@ int coda_rmdir(struct inode *dir, struct dentry *de)
 {
        const char *name = de->d_name.name;
        int len = de->d_name.len;
-        int error;
+       int error;
 
        lock_kernel();
        coda_vfs_stat.rmdir++;
 
-       if (!d_unhashed(de)) {
-               unlock_kernel();
-               return -EBUSY;
-       }
        error = venus_rmdir(dir->i_sb, coda_i2f(dir), name, len);
+       if (!error) {
+               /* VFS may delete the child */
+               if (de->d_inode)
+                   de->d_inode->i_nlink = 0;
 
-       if ( error ) {
-               unlock_kernel();
-               return error;
+               /* fix the link count of the parent */
+               coda_dir_drop_nlink(dir);
+               coda_dir_update_mtime(dir);
        }
-
-       coda_dir_drop_nlink(dir);
-       coda_dir_update_mtime(dir);
-       drop_nlink(de->d_inode);
-       d_delete(de);
        unlock_kernel();
-       return 0;
+       return error;
 }
 
 /* rename */