u64 bytes_per_bg = BITS_PER_BITMAP * ctl->unit;
        int max_bitmaps = div64_u64(size + bytes_per_bg - 1, bytes_per_bg);
 
+       max_bitmaps = max(max_bitmaps, 1);
+
        BUG_ON(ctl->total_bitmaps > max_bitmaps);
 
        /*
        }
 
        /*
-        * some block groups are so tiny they can't be enveloped by a bitmap, so
-        * don't even bother to create a bitmap for this
+        * The original block groups from mkfs can be really small, like 8
+        * megabytes, so don't bother with a bitmap for those entries.  However
+        * some block groups can be smaller than what a bitmap would cover but
+        * are still large enough that they could overflow the 32k memory limit,
+        * so allow those block groups to still be allowed to have a bitmap
+        * entry.
         */
-       if (BITS_PER_BITMAP * ctl->unit > block_group->key.offset)
+       if (((BITS_PER_BITMAP * ctl->unit) >> 1) > block_group->key.offset)
                return false;
 
        return true;