On 09/22/2012 09:56 AM, Lars-Peter Clausen wrote: > 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@xxxxxxxxxx> Added all 8 to togreg branch of iio.git. Eariler in the cycle I'd have pushed these as fixes, but as they've been there a long time, lets just leave it to the next cycle. Good catch on these btw. > --- > drivers/staging/iio/gyro/adis16260_core.c | 10 ++-------- > 1 file changed, 2 insertions(+), 8 deletions(-) > > diff --git a/drivers/staging/iio/gyro/adis16260_core.c b/drivers/staging/iio/gyro/adis16260_core.c > index 1d58d0e..9571c03 100644 > --- a/drivers/staging/iio/gyro/adis16260_core.c > +++ b/drivers/staging/iio/gyro/adis16260_core.c > @@ -702,22 +702,16 @@ error_ret: > > static int __devexit adis16260_remove(struct spi_device *spi) > { > - int ret; > struct iio_dev *indio_dev = spi_get_drvdata(spi); > > iio_device_unregister(indio_dev); > - > - ret = adis16260_stop_device(indio_dev); > - if (ret) > - goto err_ret; > - > + adis16260_stop_device(indio_dev); > adis16260_remove_trigger(indio_dev); > iio_buffer_unregister(indio_dev); > adis16260_unconfigure_ring(indio_dev); > iio_device_free(indio_dev); > > -err_ret: > - return ret; > + return 0; > } > > /* > -- To unsubscribe from this list: send the line "unsubscribe linux-iio" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html