Re: [PATCH 5/7] iio: adis_buffer: check return value on page change

Alexandru Ardelean
2021-04-14T07:34:18Z

On Tue, Apr 13, 2021 at 5:45 PM Nuno Sa <nuno.sa@analog.com> wrote:
>
> On the trigger handler, we might need to change the device page. Hence,
> we should check the return value from 'spi_write()' and act accordingly.
>
> Signed-off-by: Nuno Sa <nuno.sa@analog.com>
> ---
> drivers/iio/imu/adis_buffer.c | 6 +++++-
> 1 file changed, 5 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/iio/imu/adis_buffer.c b/drivers/iio/imu/adis_buffer.c
> index f89bce10090a..7ab15c08889f 100644
> --- a/drivers/iio/imu/adis_buffer.c
> +++ b/drivers/iio/imu/adis_buffer.c
> @@ -137,7 +137,11 @@ static irqreturn_t adis_trigger_handler(int irq, void *p)
> if (adis->current_page != 0) {
> adis->tx[0] = ADIS_WRITE_REG(ADIS_REG_PAGE_ID);
> adis->tx[1] = 0;
> - spi_write(adis->spi, adis->tx, 2);
> + ret = spi_write(adis->spi, adis->tx, 2);
> + if (ret) {
> + dev_err(&adis->spi->dev, "Failed to change device page: %d\n", ret);
> + goto irq_done;
> + }

The &adis->state_lock is not being unlocked on this error path.
This probably needs a bit of re-organization of this block:
if (adis->data->has_paging) {
adis->current_page = 0;
mutex_unlock(&adis->state_lock);
}

> }
> }
>
> --
> 2.31.1
>