From: Julia Lawall Date: Wed, 4 Aug 2010 19:54:26 +0000 (+0200) Subject: drivers/staging/iio: call mutex_unlock in error handling code X-Git-Url: https://git.stricted.de/?a=commitdiff_plain;h=d1ae4da731a6e049a675097ebfd9a02b9b50530e;p=GitHub%2FLineageOS%2Fandroid_kernel_motorola_exynos9610.git drivers/staging/iio: call mutex_unlock in error handling code Adjust the error handling code so that it benefits from the call to mutex_unlock at the end of the function. The semantic match that finds this problem is as follows: (http://coccinelle.lip6.fr/) // @rcu exists@ position p1; expression E; @@ mutex_lock@p1(E); ... mutex_unlock(E); @exists@ position rcu.p1; expression E; @@ *mutex_lock@p1(E); ... when != mutex_unlock(E); ?*return ...; // Signed-off-by: Julia Lawall Acked-by: Jonathan Cameron Signed-off-by: Greg Kroah-Hartman --- diff --git a/drivers/staging/iio/magnetometer/hmc5843.c b/drivers/staging/iio/magnetometer/hmc5843.c index 92f6c6fb90fe..ea5f749c5fe7 100644 --- a/drivers/staging/iio/magnetometer/hmc5843.c +++ b/drivers/staging/iio/magnetometer/hmc5843.c @@ -220,11 +220,15 @@ static ssize_t hmc5843_set_operating_mode(struct device *dev, int error; mutex_lock(&data->lock); error = strict_strtoul(buf, 10, &operating_mode); - if (error) - return error; + if (error) { + count = error; + goto exit; + } dev_dbg(dev, "set Conversion mode to %lu\n", operating_mode); - if (operating_mode > MODE_SLEEP) - return -EINVAL; + if (operating_mode > MODE_SLEEP) { + count = -EINVAL; + goto exit; + } status = i2c_smbus_write_byte_data(client, this_attr->address, operating_mode); @@ -437,18 +441,23 @@ static ssize_t set_range(struct device *dev, int error; mutex_lock(&data->lock); error = strict_strtoul(buf, 10, &range); - if (error) - return error; + if (error) { + count = error; + goto exit; + } dev_dbg(dev, "set range to %lu\n", range); - if (range > RANGE_6_5) - return -EINVAL; + if (range > RANGE_6_5) { + count = -EINVAL; + goto exit; + } data->range = range; range = range << RANGE_GAIN_OFFSET; if (i2c_smbus_write_byte_data(client, this_attr->address, range)) count = -EINVAL; +exit: mutex_unlock(&data->lock); return count;