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:17:28 -0400
commit0b4ac3dce4093f426322be0eec0e38127a62bb7f (patch)
tree03fe7b03c551de0941a7cf94feb2d838253fee7c
parentbea3e8a31f42269318378461ee2663b17957b165 (diff)
staging:iio:adis16400: 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/imu/adis16400_core.c8
1 files changed, 1 insertions, 7 deletions
diff --git a/drivers/staging/iio/imu/adis16400_core.c b/drivers/staging/iio/imu/adis16400_core.c
index b8c280cb8865..b302c9ba2712 100644
--- a/drivers/staging/iio/imu/adis16400_core.c
+++ b/drivers/staging/iio/imu/adis16400_core.c
@@ -1208,13 +1208,10 @@ error_ret:
1208/* fixme, confirm ordering in this function */ 1208/* fixme, confirm ordering in this function */
1209static int __devexit adis16400_remove(struct spi_device *spi) 1209static int __devexit adis16400_remove(struct spi_device *spi)
1210{ 1210{
1211 int ret;
1212 struct iio_dev *indio_dev = spi_get_drvdata(spi); 1211 struct iio_dev *indio_dev = spi_get_drvdata(spi);
1213 1212
1214 iio_device_unregister(indio_dev); 1213 iio_device_unregister(indio_dev);
1215 ret = adis16400_stop_device(indio_dev); 1214 adis16400_stop_device(indio_dev);
1216 if (ret)
1217 goto err_ret;
1218 1215
1219 adis16400_remove_trigger(indio_dev); 1216 adis16400_remove_trigger(indio_dev);
1220 iio_buffer_unregister(indio_dev); 1217 iio_buffer_unregister(indio_dev);
@@ -1222,9 +1219,6 @@ static int __devexit adis16400_remove(struct spi_device *spi)
1222 iio_device_free(indio_dev); 1219 iio_device_free(indio_dev);
1223 1220
1224 return 0; 1221 return 0;
1225
1226err_ret:
1227 return ret;
1228} 1222}
1229 1223
1230static const struct spi_device_id adis16400_id[] = { 1224static const struct spi_device_id adis16400_id[] = {