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:20:30 -0400
commit67ad4e08dcc772153fda90cc747cfc9e03ab44f6 (patch)
tree5229c55d6776782203db0753b2f0a02d2269a415
parente71a837c810587e12620c957f1464c0674220d51 (diff)
staging:iio:sca3000: 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 errors which the driver tries to handle in the remove function are non-critical, so we can just ignore them 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/accel/sca3000_core.c6
1 files changed, 2 insertions, 4 deletions
diff --git a/drivers/staging/iio/accel/sca3000_core.c b/drivers/staging/iio/accel/sca3000_core.c
index 6d72d97fb9e5..ffd1697a9db0 100644
--- a/drivers/staging/iio/accel/sca3000_core.c
+++ b/drivers/staging/iio/accel/sca3000_core.c
@@ -1237,11 +1237,9 @@ static int __devexit sca3000_remove(struct spi_device *spi)
1237{ 1237{
1238 struct iio_dev *indio_dev = spi_get_drvdata(spi); 1238 struct iio_dev *indio_dev = spi_get_drvdata(spi);
1239 struct sca3000_state *st = iio_priv(indio_dev); 1239 struct sca3000_state *st = iio_priv(indio_dev);
1240 int ret; 1240
1241 /* Must ensure no interrupts can be generated after this!*/ 1241 /* Must ensure no interrupts can be generated after this!*/
1242 ret = sca3000_stop_all_interrupts(st); 1242 sca3000_stop_all_interrupts(st);
1243 if (ret)
1244 return ret;
1245 if (spi->irq) 1243 if (spi->irq)
1246 free_irq(spi->irq, indio_dev); 1244 free_irq(spi->irq, indio_dev);
1247 iio_device_unregister(indio_dev); 1245 iio_device_unregister(indio_dev);