return ret;
 }
 
-static void __iio_buffer_free_sysfs_and_mask(struct iio_buffer *buffer)
+static void __iio_buffer_free_sysfs_and_mask(struct iio_buffer *buffer,
+                                            struct iio_dev *indio_dev,
+                                            int index)
 {
+       if (index == 0)
+               iio_buffer_unregister_legacy_sysfs_groups(indio_dev);
        bitmap_free(buffer->scan_mask);
        kfree(buffer->buffer_group.name);
        kfree(buffer->buffer_group.attrs);
 error_unwind_sysfs_and_mask:
        for (; unwind_idx >= 0; unwind_idx--) {
                buffer = iio_dev_opaque->attached_buffers[unwind_idx];
-               __iio_buffer_free_sysfs_and_mask(buffer);
+               __iio_buffer_free_sysfs_and_mask(buffer, indio_dev, unwind_idx);
        }
        return ret;
 }
        iio_device_ioctl_handler_unregister(iio_dev_opaque->buffer_ioctl_handler);
        kfree(iio_dev_opaque->buffer_ioctl_handler);
 
-       iio_buffer_unregister_legacy_sysfs_groups(indio_dev);
-
        for (i = iio_dev_opaque->attached_buffers_cnt - 1; i >= 0; i--) {
                buffer = iio_dev_opaque->attached_buffers[i];
-               __iio_buffer_free_sysfs_and_mask(buffer);
+               __iio_buffer_free_sysfs_and_mask(buffer, indio_dev, i);
        }
 }