|
@@ -457,12 +457,14 @@ struct inode *jffs2_new_inode (struct inode *dir_i, umode_t mode, struct jffs2_r
|
|
The umask is only applied if there's no default ACL */
|
|
The umask is only applied if there's no default ACL */
|
|
ret = jffs2_init_acl_pre(dir_i, inode, &mode);
|
|
ret = jffs2_init_acl_pre(dir_i, inode, &mode);
|
|
if (ret) {
|
|
if (ret) {
|
|
- make_bad_inode(inode);
|
|
|
|
- iput(inode);
|
|
|
|
- return ERR_PTR(ret);
|
|
|
|
|
|
+ mutex_unlock(&f->sem);
|
|
|
|
+ make_bad_inode(inode);
|
|
|
|
+ iput(inode);
|
|
|
|
+ return ERR_PTR(ret);
|
|
}
|
|
}
|
|
ret = jffs2_do_new_inode (c, f, mode, ri);
|
|
ret = jffs2_do_new_inode (c, f, mode, ri);
|
|
if (ret) {
|
|
if (ret) {
|
|
|
|
+ mutex_unlock(&f->sem);
|
|
make_bad_inode(inode);
|
|
make_bad_inode(inode);
|
|
iput(inode);
|
|
iput(inode);
|
|
return ERR_PTR(ret);
|
|
return ERR_PTR(ret);
|
|
@@ -479,6 +481,7 @@ struct inode *jffs2_new_inode (struct inode *dir_i, umode_t mode, struct jffs2_r
|
|
inode->i_size = 0;
|
|
inode->i_size = 0;
|
|
|
|
|
|
if (insert_inode_locked(inode) < 0) {
|
|
if (insert_inode_locked(inode) < 0) {
|
|
|
|
+ mutex_unlock(&f->sem);
|
|
make_bad_inode(inode);
|
|
make_bad_inode(inode);
|
|
iput(inode);
|
|
iput(inode);
|
|
return ERR_PTR(-EINVAL);
|
|
return ERR_PTR(-EINVAL);
|