}
 EXPORT_SYMBOL_GPL(iio_push_to_buffer);
 
+static void iio_buffer_demux_free(struct iio_buffer *buffer)
+{
+       struct iio_demux_table *p, *q;
+       list_for_each_entry_safe(p, q, &buffer->demux_list, l) {
+               list_del(&p->l);
+               kfree(p);
+       }
+}
+
 int iio_update_demux(struct iio_dev *indio_dev)
 {
        const struct iio_chan_spec *ch;
        struct iio_buffer *buffer = indio_dev->buffer;
        int ret, in_ind = -1, out_ind, length;
        unsigned in_loc = 0, out_loc = 0;
-       struct iio_demux_table *p, *q;
+       struct iio_demux_table *p;
 
        /* Clear out any old demux */
-       list_for_each_entry_safe(p, q, &buffer->demux_list, l) {
-               list_del(&p->l);
-               kfree(p);
-       }
+       iio_buffer_demux_free(buffer);
        kfree(buffer->demux_bounce);
        buffer->demux_bounce = NULL;
 
        return 0;
 
 error_clear_mux_table:
-       list_for_each_entry_safe(p, q, &buffer->demux_list, l) {
-               list_del(&p->l);
-               kfree(p);
-       }
+       iio_buffer_demux_free(buffer);
+
        return ret;
 }
 EXPORT_SYMBOL_GPL(iio_update_demux);