static void iio_buffer_cb_release(struct iio_buffer *buffer)
 {
        struct iio_cb_buffer *cb_buff = buffer_to_cb_buffer(buffer);
-       kfree(cb_buff->buffer.scan_mask);
+
+       bitmap_free(cb_buff->buffer.scan_mask);
        kfree(cb_buff);
 }
 
        }
 
        cb_buff->indio_dev = cb_buff->channels[0].indio_dev;
-       cb_buff->buffer.scan_mask
-               = kcalloc(BITS_TO_LONGS(cb_buff->indio_dev->masklength),
-                         sizeof(long), GFP_KERNEL);
+       cb_buff->buffer.scan_mask = bitmap_zalloc(cb_buff->indio_dev->masklength,
+                                                 GFP_KERNEL);
        if (cb_buff->buffer.scan_mask == NULL) {
                ret = -ENOMEM;
                goto error_release_channels;
        return cb_buff;
 
 error_free_scan_mask:
-       kfree(cb_buff->buffer.scan_mask);
+       bitmap_free(cb_buff->buffer.scan_mask);
 error_release_channels:
        iio_channel_release_all(cb_buff->channels);
 error_free_cb_buff:
 
        const unsigned long *mask;
        unsigned long *trialmask;
 
-       trialmask = kmalloc_array(BITS_TO_LONGS(indio_dev->masklength),
-                                 sizeof(*trialmask),
-                                 GFP_KERNEL);
+       trialmask = bitmap_alloc(indio_dev->masklength, GFP_KERNEL);
        if (trialmask == NULL)
                return -ENOMEM;
        if (!indio_dev->masklength) {
        }
        bitmap_copy(buffer->scan_mask, trialmask, indio_dev->masklength);
 
-       kfree(trialmask);
+       bitmap_free(trialmask);
 
        return 0;
 
 err_invalid_mask:
-       kfree(trialmask);
+       bitmap_free(trialmask);
        return -EINVAL;
 }
 
 {
        /* If the mask is dynamically allocated free it, otherwise do nothing */
        if (!indio_dev->available_scan_masks)
-               kfree(mask);
+               bitmap_free(mask);
 }
 
 struct iio_device_config {
        }
 
        /* What scan mask do we actually have? */
-       compound_mask = kcalloc(BITS_TO_LONGS(indio_dev->masklength),
-                               sizeof(long), GFP_KERNEL);
+       compound_mask = bitmap_zalloc(indio_dev->masklength, GFP_KERNEL);
        if (compound_mask == NULL)
                return -ENOMEM;
 
                                    indio_dev->masklength,
                                    compound_mask,
                                    strict_scanmask);
-               kfree(compound_mask);
+               bitmap_free(compound_mask);
                if (scan_mask == NULL)
                        return -EINVAL;
        } else {
                                        channels[i].scan_index;
                }
                if (indio_dev->masklength && buffer->scan_mask == NULL) {
-                       buffer->scan_mask = kcalloc(BITS_TO_LONGS(indio_dev->masklength),
-                                                   sizeof(*buffer->scan_mask),
-                                                   GFP_KERNEL);
+                       buffer->scan_mask = bitmap_zalloc(indio_dev->masklength,
+                                                         GFP_KERNEL);
                        if (buffer->scan_mask == NULL) {
                                ret = -ENOMEM;
                                goto error_cleanup_dynamic;
        return 0;
 
 error_free_scan_mask:
-       kfree(buffer->scan_mask);
+       bitmap_free(buffer->scan_mask);
 error_cleanup_dynamic:
        iio_free_chan_devattr_list(&buffer->scan_el_dev_attr_list);
        kfree(indio_dev->buffer->buffer_group.attrs);
        if (!indio_dev->buffer)
                return;
 
-       kfree(indio_dev->buffer->scan_mask);
+       bitmap_free(indio_dev->buffer->scan_mask);
        kfree(indio_dev->buffer->buffer_group.attrs);
        kfree(indio_dev->buffer->scan_el_group.attrs);
        iio_free_chan_devattr_list(&indio_dev->buffer->scan_el_dev_attr_list);