unlock 12c_mutex before return
PATCH 1/1 unlock 12c_mutex before return
unlock 12c_mutex before return -EINVAL
Signed-off-by Roel Kluin <[email protected]>
---
drivers/media/dvb/dvb-usb/au6610.c +3 -1
@@ -82,8 +82,10 @@ static int au6610_i2c_xfer(struct i2c_adapter *adap, struct i2c_msg msg[],if (mutex_lock_interruptible (&d->i2c_mutex) <0 )return -EAGAIN ; -if (num >2 ) +if (num >2 ) { +mutex_unlock (&d->i2c_mutex);return -EINVAL ; + }for (i =0 ; i < num; i++) {/* write/read request */
And a similar one in drivers/media/dvb/dvb-usb/gl861.c --
unlock 12c_mutex before return -EINVAL
Signed-off-by Roel Kluin <[email protected]>
---
drivers/media/dvb/dvb-usb/gl861.c +3 -1
@@ -59,8 +59,10 @@ static int gl861_i2c_xfer(struct i2c_adapter *adap, struct i2c_msg msg[],if (mutex_lock_interruptible (&d->i2c_mutex) <0 )return -EAGAIN ; -if (num >2 ) +if (num >2 ) { +mutex_unlock (&d->i2c_mutex);return -EINVAL ; + }for (i =0 ; i < num; i++) {/* write/read request */
Quoted 9 lines · Roel Kluin
unlock 12c_mutex before return
-EINVALSigned-off-by Roel Kluin <[email protected]>---
drivers/media/dvb/dvb-usb/au6610.c +0
-0
drivers/media/dvb/dvb-usb/au6610.c static int au6610_i2c_xfer(struct i2c_adapter *adap, struct i2c_msg msg[], · line 87
Quoted 7 lines
drivers/media/dvb/dvb-usb/au6610.c +2
-1@@ -82,8 +82,10 @@ static int au6610_i2c_xfer(struct i2c_adapter *adap, struct i2c_msg msg[],if (mutex_lock_interruptible (&d->i2c_mutex) <0 )return -EAGAIN ; -if (num >2 ) +if (num >2 ) { +mutex_unlock (&d->i2c_mutex);return -EINVAL ;
How about moving the check before the lock?
Andreas.
Signature · 4 lines
Andreas Schwab, SuSE Labs, [email protected] SuSE Linux Products GmbH, Maxfeldstraße 5, 90409 Nürnberg, Germany PGP key fingerprint = 58CA 54C7 6D53 942B 1756 01D3 44D5 214B 8276 4ED5 "And now for something completely different."
Quoted 6 lines · Andreas Schwab
Review
Quoted 4 lines
(quoted diff) +2
-1- if (num > 2) + if (num > 2) { + mutex_unlock(&d->i2c_mutex); return -EINVAL;How about moving the check before the lock?
Good suggestion. Patch below covers both previous patches. --
Move check before lock
Signed-off-by Roel Kluin <[email protected]>
---
drivers/media/dvb/dvb-usb/au6610.c +3 -3
@@ -79,12 +79,12 @@ static int au6610_i2c_xfer(struct i2c_adapter *adap, struct i2c_msg msg[],struct dvb_usb_device *d =i2c_get_adapdata (adap);int i; -if (mutex_lock_interruptible (&d->i2c_mutex) <0 ) -return -EAGAIN ; -if (num >2 )return -EINVAL ; +if (mutex_lock_interruptible (&d->i2c_mutex) <0 ) +return -EAGAIN ; +for (i =0 ; i < num; i++) {/* write/read request */ if (i+1 < num && (msg[i+1 ].flags &I2C_M_RD )) {
drivers/media/dvb/dvb-usb/gl861.c +3 -3
@@ -56,12 +56,12 @@ static int gl861_i2c_xfer(struct i2c_adapter *adap, struct i2c_msg msg[],struct dvb_usb_device *d =i2c_get_adapdata (adap);int i; -if (mutex_lock_interruptible (&d->i2c_mutex) <0 ) -return -EAGAIN ; -if (num >2 )return -EINVAL ; +if (mutex_lock_interruptible (&d->i2c_mutex) <0 ) +return -EAGAIN ; +for (i =0 ; i < num; i++) {/* write/read request */ if (i+1 < num && (msg[i+1 ].flags &I2C_M_RD )) {