[media] lirc_dev: avoid double mutex unlock
authorMauro Carvalho Chehab <mchehab@osg.samsung.com>
Sat, 27 Feb 2016 10:51:13 +0000 (07:51 -0300)
committerMauro Carvalho Chehab <mchehab@osg.samsung.com>
Tue, 1 Mar 2016 15:04:48 +0000 (12:04 -0300)
We can only unlock if mutex_lock() succeeds.

Fixes the following warning:
drivers/media/rc/lirc_dev.c:535 lirc_dev_fop_close() error: double unlock 'mutex:&lirc_dev_lock'

Signed-off-by: Mauro Carvalho Chehab <mchehab@osg.samsung.com>
drivers/media/rc/lirc_dev.c

index 4de0e85af805b8b2086aa6191cfce4b9e4c12aab..92ae1903c01045cd173561078c25cec1697f14c5 100644 (file)
@@ -506,6 +506,7 @@ int lirc_dev_fop_close(struct inode *inode, struct file *file)
 {
        struct irctl *ir = irctls[iminor(inode)];
        struct cdev *cdev;
+       int ret;
 
        if (!ir) {
                printk(KERN_ERR "%s: called with invalid irctl\n", __func__);
@@ -516,7 +517,8 @@ int lirc_dev_fop_close(struct inode *inode, struct file *file)
 
        dev_dbg(ir->d.dev, LOGHEAD "close called\n", ir->d.name, ir->d.minor);
 
-       WARN_ON(mutex_lock_killable(&lirc_dev_lock));
+       ret = mutex_lock_killable(&lirc_dev_lock);
+       WARN_ON(ret);
 
        rc_close(ir->d.rdev);
 
@@ -532,7 +534,8 @@ int lirc_dev_fop_close(struct inode *inode, struct file *file)
                kfree(ir);
        }
 
-       mutex_unlock(&lirc_dev_lock);
+       if (!ret)
+               mutex_unlock(&lirc_dev_lock);
 
        return 0;
 }