From e3feaa0f93f099d2975a1587e072793e9caebb76 Mon Sep 17 00:00:00 2001 From: Heinz Mauelshagen Date: Tue, 15 Oct 2013 14:28:52 +0200 Subject: [PATCH 9/9] dm-cache-policy-era+.c: fix return check of __find_invalidate_block and types therin --- drivers/md/dm-cache-policy-era+.c | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) Index: linux/drivers/md/dm-cache-policy-era+.c =================================================================== --- linux.orig/drivers/md/dm-cache-policy-era+.c +++ linux/drivers/md/dm-cache-policy-era+.c @@ -49,7 +49,7 @@ struct era_policy { struct { unsigned long *bitset; dm_oblock_t *oblocks; - dm_cblock_t last_cblock; + unsigned long last_cblock; } invalidate; }; @@ -111,7 +111,7 @@ static int alloc_invalidate(struct era_p goto err; } - era->invalidate.last_cblock = to_cblock(0); + era->invalidate.last_cblock = 0; return 0; err: @@ -378,10 +378,12 @@ static void era_force_mapping(struct dm_ /* Find next block to invalidate. */ static int __find_invalidate_block(struct era_policy *era, dm_cblock_t *cblock) { - *cblock = to_cblock(find_next_bit(era->invalidate.bitset, from_cblock(era->cache_size), - from_cblock(era->invalidate.last_cblock))); - era->invalidate.last_cblock = *cblock; - return from_cblock(*cblock) < from_cblock(era->cache_size) ? 0 : -ENODATA; + int bit = find_next_bit(era->invalidate.bitset, from_cblock(era->cache_size), + era->invalidate.last_cblock); + + *cblock = to_cblock(bit); + era->invalidate.last_cblock = bit; + return bit < from_cblock(era->cache_size) ? 0 : -ENODATA; } static int era_invalidate_mapping(struct dm_cache_policy *p, @@ -394,7 +396,7 @@ static int era_invalidate_mapping(struct return -ENODATA; r = __find_invalidate_block(era, cblock); - if (r) + if (r < 0) free_invalidate(era); else {