Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

dm cache metadata: Fix loading discard bitset

Add missing dm_bitset_cursor_next() to properly advance the bitset
cursor.

Otherwise, the discarded state of all blocks is set according to the
discarded state of the first block.

Fixes: ae4a46a1f6 ("dm cache metadata: use bitset cursor api to load discard bitset")
Cc: stable@vger.kernel.org
Signed-off-by: Nikos Tsironis <ntsironis@arrikto.com>
Signed-off-by: Mike Snitzer <snitzer@redhat.com>

authored by

Nikos Tsironis and committed by
Mike Snitzer
e28adc3b 7aedf75f

+8 -1
+8 -1
drivers/md/dm-cache-metadata.c
··· 1167 1167 if (r) 1168 1168 return r; 1169 1169 1170 - for (b = 0; b < from_dblock(cmd->discard_nr_blocks); b++) { 1170 + for (b = 0; ; b++) { 1171 1171 r = fn(context, cmd->discard_block_size, to_dblock(b), 1172 1172 dm_bitset_cursor_get_value(&c)); 1173 + if (r) 1174 + break; 1175 + 1176 + if (b >= (from_dblock(cmd->discard_nr_blocks) - 1)) 1177 + break; 1178 + 1179 + r = dm_bitset_cursor_next(&c); 1173 1180 if (r) 1174 1181 break; 1175 1182 }