diff options
Diffstat (limited to 'fs/jffs2')
-rw-r--r-- | fs/jffs2/fs.c | 9 |
1 files changed, 6 insertions, 3 deletions
diff --git a/fs/jffs2/fs.c b/fs/jffs2/fs.c index a69e426435dd..560821bff038 100644 --- a/fs/jffs2/fs.c +++ b/fs/jffs2/fs.c | |||
@@ -457,12 +457,14 @@ struct inode *jffs2_new_inode (struct inode *dir_i, umode_t mode, struct jffs2_r | |||
457 | The umask is only applied if there's no default ACL */ | 457 | The umask is only applied if there's no default ACL */ |
458 | ret = jffs2_init_acl_pre(dir_i, inode, &mode); | 458 | ret = jffs2_init_acl_pre(dir_i, inode, &mode); |
459 | if (ret) { | 459 | if (ret) { |
460 | make_bad_inode(inode); | 460 | mutex_unlock(&f->sem); |
461 | iput(inode); | 461 | make_bad_inode(inode); |
462 | return ERR_PTR(ret); | 462 | iput(inode); |
463 | return ERR_PTR(ret); | ||
463 | } | 464 | } |
464 | ret = jffs2_do_new_inode (c, f, mode, ri); | 465 | ret = jffs2_do_new_inode (c, f, mode, ri); |
465 | if (ret) { | 466 | if (ret) { |
467 | mutex_unlock(&f->sem); | ||
466 | make_bad_inode(inode); | 468 | make_bad_inode(inode); |
467 | iput(inode); | 469 | iput(inode); |
468 | return ERR_PTR(ret); | 470 | return ERR_PTR(ret); |
@@ -479,6 +481,7 @@ struct inode *jffs2_new_inode (struct inode *dir_i, umode_t mode, struct jffs2_r | |||
479 | inode->i_size = 0; | 481 | inode->i_size = 0; |
480 | 482 | ||
481 | if (insert_inode_locked(inode) < 0) { | 483 | if (insert_inode_locked(inode) < 0) { |
484 | mutex_unlock(&f->sem); | ||
482 | make_bad_inode(inode); | 485 | make_bad_inode(inode); |
483 | iput(inode); | 486 | iput(inode); |
484 | return ERR_PTR(-EINVAL); | 487 | return ERR_PTR(-EINVAL); |