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: Jan Harkes <jaharkes@cs.cmu.edu> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
parent
d728900cd5
commit
8c6d215284
|
@ -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 */
|
||||
|
|
Loading…
Reference in New Issue