@@ -1326,16 +1326,18 @@ static int fimc_m2m_open(struct file *file)
* is already opened.
*/
if (fimc->vid_cap.refcnt > 0) {
- mutex_unlock(&fimc->lock);
- return -EBUSY;
+ err = -EBUSY;
+ goto err_unlock;
}
fimc->m2m.refcnt++;
set_bit(ST_OUTDMA_RUN, &fimc->state);
ctx = kzalloc(sizeof *ctx, GFP_KERNEL);
- if (!ctx)
- return -ENOMEM;
+ if (!ctx) {
+ err = -ENOMEM;
+ goto err_unlock;
+ }
file->private_data = ctx;
ctx->fimc_dev = fimc;
@@ -1355,6 +1357,7 @@ static int fimc_m2m_open(struct file *file)
kfree(ctx);
}
+err_unlock:
mutex_unlock(&fimc->lock);
return err;
}