iio:buffer: Ignore noop requests for iio_update_buffers()
authorLars-Peter Clausen <lars@metafoo.de>
Fri, 4 Oct 2013 11:07:00 +0000 (12:07 +0100)
committerJonathan Cameron <jic23@kernel.org>
Sat, 12 Oct 2013 12:06:31 +0000 (13:06 +0100)
Since the kernel now disables all buffers when a device is unregistered it might
happen that a in-kernel consumer tries to disable that buffer again. So ignore
requests where the buffer already is in the desired state.

Signed-off-by: Lars-Peter Clausen <lars@metafoo.de>
Signed-off-by: Jonathan Cameron <jic23@kernel.org>
drivers/iio/industrialio-buffer.c

index d12b384d94bfd37d08e9974407ee5b6782b0fb13..796376ac2475c1b1ce30719800b469b44502ca2e 100644 (file)
@@ -664,9 +664,23 @@ int iio_update_buffers(struct iio_dev *indio_dev,
 {
        int ret;
 
+       if (insert_buffer == remove_buffer)
+               return 0;
+
        mutex_lock(&indio_dev->info_exist_lock);
        mutex_lock(&indio_dev->mlock);
 
+       if (insert_buffer && iio_buffer_is_active(insert_buffer))
+               insert_buffer = NULL;
+
+       if (remove_buffer && !iio_buffer_is_active(remove_buffer))
+               remove_buffer = NULL;
+
+       if (!insert_buffer && !remove_buffer) {
+               ret = 0;
+               goto out_unlock;
+       }
+
        if (indio_dev->info == NULL) {
                ret = -ENODEV;
                goto out_unlock;