aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLars-Peter Clausen <lars@metafoo.de>2012-09-22 04:56:00 -0400
committerJonathan Cameron <jic23@kernel.org>2012-09-22 05:18:25 -0400
commitdb314a1aaa2c0aa262f24e14c81b91b09e72e470 (patch)
tree3bcefbdde9b2e7c7382f307816eecf11eeda9da5
parentd576c7558616e3c096fca1f21531e1e50d2f27ca (diff)
staging:iio:ade7754: Do not return a error in remove function
In the Linux device driver model the remove callback is not allowed to fail and the device will be removed regardless of the return value of the remove callback. So if we abort in the remove function and do not free all resources we will create a resource leak. Also all kinds of undefined behaviour are expected to happen since the IIO device is still there while its parent is already gone. The error which the driver tries to handle in the remove function is non-critical, so we can just ignore it and continue to free all resources and remove the IIO device. Signed-off-by: Lars-Peter Clausen <lars@metafoo.de> Signed-off-by: Jonathan Cameron <jic23@kernel.org>
-rw-r--r--drivers/staging/iio/meter/ade7754.c10
1 files changed, 2 insertions, 8 deletions
diff --git a/drivers/staging/iio/meter/ade7754.c b/drivers/staging/iio/meter/ade7754.c
index 7dea7fdb9a61..76e0adee96ea 100644
--- a/drivers/staging/iio/meter/ade7754.c
+++ b/drivers/staging/iio/meter/ade7754.c
@@ -579,19 +579,13 @@ error_ret:
579/* fixme, confirm ordering in this function */ 579/* fixme, confirm ordering in this function */
580static int __devexit ade7754_remove(struct spi_device *spi) 580static int __devexit ade7754_remove(struct spi_device *spi)
581{ 581{
582 int ret;
583 struct iio_dev *indio_dev = spi_get_drvdata(spi); 582 struct iio_dev *indio_dev = spi_get_drvdata(spi);
584 583
585 iio_device_unregister(indio_dev); 584 iio_device_unregister(indio_dev);
586 ret = ade7754_stop_device(&(indio_dev->dev)); 585 ade7754_stop_device(&indio_dev->dev);
587 if (ret)
588 goto err_ret;
589
590 iio_device_free(indio_dev); 586 iio_device_free(indio_dev);
591 587
592err_ret: 588 return 0;
593 return ret;
594
595} 589}
596 590
597static struct spi_driver ade7754_driver = { 591static struct spi_driver ade7754_driver = {