if (!bitmap) /* there was no bitmap */
                return;
 
+       if (bitmap->sysfs_can_clear)
+               sysfs_put(bitmap->sysfs_can_clear);
+
        if (mddev_is_clustered(bitmap->mddev) && bitmap->mddev->cluster_info &&
                bitmap->cluster_slot == md_cluster_ops->slot_number(bitmap->mddev))
                md_cluster_stop(bitmap->mddev);
        if (mddev->thread)
                mddev->thread->timeout = MAX_SCHEDULE_TIMEOUT;
 
-       if (bitmap->sysfs_can_clear)
-               sysfs_put(bitmap->sysfs_can_clear);
-
        bitmap_free(bitmap);
 }
 
 /*
  * initialize the bitmap structure
  * if this returns an error, bitmap_destroy must be called to do clean up
+ * once mddev->bitmap is set
  */
 struct bitmap *bitmap_create(struct mddev *mddev, int slot)
 {
        struct bitmap_counts *counts;
        struct bitmap *bitmap = bitmap_create(mddev, slot);
 
-       if (IS_ERR(bitmap))
+       if (IS_ERR(bitmap)) {
+               bitmap_free(bitmap);
                return PTR_ERR(bitmap);
+       }
 
        rv = bitmap_init_from_disk(bitmap, 0);
        if (rv)
                                else {
                                        mddev->bitmap = bitmap;
                                        rv = bitmap_load(mddev);
-                                       if (rv) {
-                                               bitmap_destroy(mddev);
+                                       if (rv)
                                                mddev->bitmap_info.offset = 0;
-                                       }
                                }
                                mddev->pers->quiesce(mddev, 0);
-                               if (rv)
+                               if (rv) {
+                                       bitmap_destroy(mddev);
                                        return rv;
+                               }
                        }
                }
        }