diff options
| author | Joe Thornber <[email protected]> | 2014-11-26 16:07:50 +0000 |
|---|---|---|
| committer | Mike Snitzer <[email protected]> | 2014-12-01 16:30:11 +0000 |
| commit | 2bb812df63bbd246bd39d10f2e810b2a0a59e99e (patch) | |
| tree | 071abce53825307314e1531fb81a3b58619600af /drivers/md/dm-cache-target.c | |
| parent | dm cache: fix a harmless race when working out if a block is discarded (diff) | |
| download | kernel-2bb812df63bbd246bd39d10f2e810b2a0a59e99e.tar.gz kernel-2bb812df63bbd246bd39d10f2e810b2a0a59e99e.zip | |
dm cache: discard block size must be a multiple of cache block size
Otherwise the cache blocks may span two discard blocks, which we don't
handle when doing the discard lookup.
Signed-off-by: Joe Thornber <[email protected]>
Signed-off-by: Mike Snitzer <[email protected]>
Diffstat (limited to 'drivers/md/dm-cache-target.c')
| -rw-r--r-- | drivers/md/dm-cache-target.c | 9 |
1 files changed, 3 insertions, 6 deletions
diff --git a/drivers/md/dm-cache-target.c b/drivers/md/dm-cache-target.c index 161bbd6652f8..fd7f61387283 100644 --- a/drivers/md/dm-cache-target.c +++ b/drivers/md/dm-cache-target.c @@ -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)) |
