]> git.kernelconcepts.de Git - karo-tx-linux.git/commitdiff
dm cache: discard block size must be a multiple of cache block size
authorJoe Thornber <ejt@redhat.com>
Wed, 26 Nov 2014 16:07:50 +0000 (16:07 +0000)
committerMike Snitzer <snitzer@redhat.com>
Mon, 1 Dec 2014 16:30:11 +0000 (11:30 -0500)
Otherwise the cache blocks may span two discard blocks, which we don't
handle when doing the discard lookup.

Signed-off-by: Joe Thornber <ejt@redhat.com>
Signed-off-by: Mike Snitzer <snitzer@redhat.com>
drivers/md/dm-cache-target.c

index 161bbd6652f8e3b24b2345b83b5a458225ba86cb..fd7f613872833afba7eb56033580333b2236af00 100644 (file)
@@ -2275,9 +2275,8 @@ static int create_cache_policy(struct cache *cache, struct cache_args *ca,
 }
 
 /*
- * We want the discard block size to be a power of two, at least the size
- * of the cache block size, and have no more than 2^14 discard blocks
- * across the origin.
+ * We want the discard block size to be at least the size of the cache
+ * block size and have no more than 2^14 discard blocks across the origin.
  */
 #define MAX_DISCARD_BLOCKS (1 << 14)
 
@@ -2292,9 +2291,7 @@ static bool too_many_discard_blocks(sector_t discard_block_size,
 static sector_t calculate_discard_block_size(sector_t cache_block_size,
                                             sector_t origin_size)
 {
-       sector_t discard_block_size;
-
-       discard_block_size = roundup_pow_of_two(cache_block_size);
+       sector_t discard_block_size = cache_block_size;
 
        if (origin_size)
                while (too_many_discard_blocks(discard_block_size, origin_size))