bitmap_update_sb(bitmap);
 }
 
-/*
- * free memory that was allocated
- */
-void md_bitmap_free(struct bitmap *bitmap)
+static void md_bitmap_free(struct bitmap *bitmap)
 {
        unsigned long k, pages;
        struct bitmap_page *bp;
        kfree(bp);
        kfree(bitmap);
 }
-EXPORT_SYMBOL(md_bitmap_free);
 
 void md_bitmap_wait_behind_writes(struct mddev *mddev)
 {
        .get_from_slot          = bitmap_get_from_slot,
        .copy_from_slot         = bitmap_copy_from_slot,
        .set_pages              = bitmap_set_pages,
+       .free                   = md_bitmap_free,
 };
 
 void mddev_set_bitmap_ops(struct mddev *mddev)
 
        int (*copy_from_slot)(struct mddev *mddev, int slot, sector_t *lo,
                              sector_t *hi, bool clear_bits);
        void (*set_pages)(struct bitmap *bitmap, unsigned long pages);
+       void (*free)(struct bitmap *bitmap);
 };
 
 /* the bitmap API */
 void mddev_set_bitmap_ops(struct mddev *mddev);
 
 /* these are exported */
-
-void md_bitmap_free(struct bitmap *bitmap);
 void md_bitmap_wait_behind_writes(struct mddev *mddev);
 
 static inline bool md_bitmap_enabled(struct bitmap *bitmap)
 
                         * can't resize bitmap
                         */
                        goto out;
-               md_bitmap_free(bitmap);
+               mddev->bitmap_ops->free(bitmap);
        }
 
        return 0;
 out:
-       md_bitmap_free(bitmap);
+       mddev->bitmap_ops->free(bitmap);
        update_bitmap_size(mddev, oldsize);
        return -1;
 }
                bm_lockres = lockres_init(mddev, str, NULL, 1);
                if (!bm_lockres) {
                        pr_err("md-cluster: Cannot initialize %s\n", str);
-                       md_bitmap_free(bitmap);
+                       mddev->bitmap_ops->free(bitmap);
                        return -1;
                }
                bm_lockres->flags |= DLM_LKF_NOQUEUE;
 
                rv = mddev->bitmap_ops->get_stats(bitmap, &stats);
                if (rv) {
-                       md_bitmap_free(bitmap);
+                       mddev->bitmap_ops->free(bitmap);
                        return rv;
                }
 
                if (sync_size == 0) {
                        sync_size = stats.sync_size;
                } else if (sync_size != stats.sync_size) {
-                       md_bitmap_free(bitmap);
+                       mddev->bitmap_ops->free(bitmap);
                        return -1;
                }
-               md_bitmap_free(bitmap);
+               mddev->bitmap_ops->free(bitmap);
        }
 
        return (my_sync_size == sync_size) ? 0 : -1;