dm space map common: fix division bug in sm_ll_find_free_block()
authorJoe Thornber <ejt@redhat.com>
Tue, 13 Apr 2021 08:11:53 +0000 (09:11 +0100)
committerMike Snitzer <snitzer@redhat.com>
Mon, 19 Apr 2021 16:48:13 +0000 (12:48 -0400)
This division bug meant the search for free metadata space could skip
the final allocation bitmap's worth of entries. Fix affects DM thinp,
cache and era targets.

Cc: stable@vger.kernel.org
Signed-off-by: Joe Thornber <ejt@redhat.com>
Tested-by: Ming-Hung Tsai <mtsai@redhat.com>
Signed-off-by: Mike Snitzer <snitzer@redhat.com>
drivers/md/persistent-data/dm-space-map-common.c

index d8b4125..a213bf1 100644 (file)
@@ -339,6 +339,8 @@ int sm_ll_find_free_block(struct ll_disk *ll, dm_block_t begin,
         */
        begin = do_div(index_begin, ll->entries_per_block);
        end = do_div(end, ll->entries_per_block);
+       if (end == 0)
+               end = ll->entries_per_block;
 
        for (i = index_begin; i < index_end; i++, begin = 0) {
                struct dm_block *blk;