Commit 8c6d2152 authored by Jan Harkes's avatar Jan Harkes Committed by Linus Torvalds

coda: allow removal of busy directories

A directory without children may still be busy when it is the cwd for some
process.  We can safely remove such a directory because the VFS prevents
further operations.  Also we don't need to call d_delete as it is already
called in vfs_rmdir.
Signed-off-by: default avatarJan Harkes <jaharkes@cs.cmu.edu>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
parent d728900c
...@@ -391,28 +391,23 @@ int coda_rmdir(struct inode *dir, struct dentry *de) ...@@ -391,28 +391,23 @@ int coda_rmdir(struct inode *dir, struct dentry *de)
{ {
const char *name = de->d_name.name; const char *name = de->d_name.name;
int len = de->d_name.len; int len = de->d_name.len;
int error; int error;
lock_kernel(); lock_kernel();
coda_vfs_stat.rmdir++; coda_vfs_stat.rmdir++;
if (!d_unhashed(de)) {
unlock_kernel();
return -EBUSY;
}
error = venus_rmdir(dir->i_sb, coda_i2f(dir), name, len); 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 ) { /* fix the link count of the parent */
unlock_kernel(); coda_dir_drop_nlink(dir);
return error; 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(); unlock_kernel();
return 0; return error;
} }
/* rename */ /* rename */
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment