jffs2: fix unbalanced locking
[firefly-linux-kernel-4.4.55.git] / fs / jffs2 / fs.c
index 601afd1afddf5bca94fb35f993e61919b6bbdcd4..4cff0d54110bb449ad52b2babb08d4649688de62 100644 (file)
@@ -190,7 +190,7 @@ int jffs2_do_setattr (struct inode *inode, struct iattr *iattr)
 
 int jffs2_setattr(struct dentry *dentry, struct iattr *iattr)
 {
-       struct inode *inode = dentry->d_inode;
+       struct inode *inode = d_inode(dentry);
        int rc;
 
        rc = inode_change_ok(inode, iattr);
@@ -272,12 +272,9 @@ struct inode *jffs2_iget(struct super_block *sb, unsigned long ino)
        mutex_lock(&f->sem);
 
        ret = jffs2_do_read_inode(c, f, inode->i_ino, &latest_node);
+       if (ret)
+               goto error;
 
-       if (ret) {
-               mutex_unlock(&f->sem);
-               iget_failed(inode);
-               return ERR_PTR(ret);
-       }
        inode->i_mode = jemode_to_cpu(latest_node.mode);
        i_uid_write(inode, je16_to_cpu(latest_node.uid));
        i_gid_write(inode, je16_to_cpu(latest_node.gid));