diff options
author | Mauro Carvalho Chehab <mchehab@osg.samsung.com> | 2016-02-27 10:51:13 (GMT) |
---|---|---|
committer | Mauro Carvalho Chehab <mchehab@osg.samsung.com> | 2016-03-01 15:04:48 (GMT) |
commit | b64e10f3dfbfb2fdc21013b6b265a5e48cbb0071 (patch) | |
tree | c02a1e7a2806a28dda7a33cfefe70998da04b2ff | |
parent | fe28f5de11da417056fc1df872e9e26ceb7eb2fe (diff) | |
download | linux-b64e10f3dfbfb2fdc21013b6b265a5e48cbb0071.tar.xz |
[media] lirc_dev: avoid double mutex unlock
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>
-rw-r--r-- | drivers/media/rc/lirc_dev.c | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/drivers/media/rc/lirc_dev.c b/drivers/media/rc/lirc_dev.c index 4de0e85..92ae190 100644 --- a/drivers/media/rc/lirc_dev.c +++ b/drivers/media/rc/lirc_dev.c @@ -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; } |