diff options
Diffstat (limited to 'fs/omfs/dir.c')
-rw-r--r-- | fs/omfs/dir.c | 11 |
1 files changed, 9 insertions, 2 deletions
diff --git a/fs/omfs/dir.c b/fs/omfs/dir.c index de4ff29f1e05..c368360c35a1 100644 --- a/fs/omfs/dir.c +++ b/fs/omfs/dir.c | |||
@@ -240,8 +240,12 @@ static int omfs_remove(struct inode *dir, struct dentry *dentry) | |||
240 | struct inode *inode = dentry->d_inode; | 240 | struct inode *inode = dentry->d_inode; |
241 | int ret; | 241 | int ret; |
242 | 242 | ||
243 | if (S_ISDIR(inode->i_mode) && !omfs_dir_is_empty(inode)) | 243 | |
244 | return -ENOTEMPTY; | 244 | if (S_ISDIR(inode->i_mode)) { |
245 | dentry_unhash(dentry); | ||
246 | if (!omfs_dir_is_empty(inode)) | ||
247 | return -ENOTEMPTY; | ||
248 | } | ||
245 | 249 | ||
246 | ret = omfs_delete_entry(dentry); | 250 | ret = omfs_delete_entry(dentry); |
247 | if (ret) | 251 | if (ret) |
@@ -378,6 +382,9 @@ static int omfs_rename(struct inode *old_dir, struct dentry *old_dentry, | |||
378 | int err; | 382 | int err; |
379 | 383 | ||
380 | if (new_inode) { | 384 | if (new_inode) { |
385 | if (S_ISDIR(new_inode->i_mode)) | ||
386 | dentry_unhash(new_dentry); | ||
387 | |||
381 | /* overwriting existing file/dir */ | 388 | /* overwriting existing file/dir */ |
382 | err = omfs_remove(new_dir, new_dentry); | 389 | err = omfs_remove(new_dir, new_dentry); |
383 | if (err) | 390 | if (err) |