]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/blob - releases/5.0.19/dm-cache-metadata-fix-loading-discard-bitset.patch
4.9-stable patches
[thirdparty/kernel/stable-queue.git] / releases / 5.0.19 / dm-cache-metadata-fix-loading-discard-bitset.patch
1 From e28adc3bf34e434b30e8d063df4823ba0f3e0529 Mon Sep 17 00:00:00 2001
2 From: Nikos Tsironis <ntsironis@arrikto.com>
3 Date: Wed, 17 Apr 2019 17:19:18 +0300
4 Subject: dm cache metadata: Fix loading discard bitset
5
6 From: Nikos Tsironis <ntsironis@arrikto.com>
7
8 commit e28adc3bf34e434b30e8d063df4823ba0f3e0529 upstream.
9
10 Add missing dm_bitset_cursor_next() to properly advance the bitset
11 cursor.
12
13 Otherwise, the discarded state of all blocks is set according to the
14 discarded state of the first block.
15
16 Fixes: ae4a46a1f6 ("dm cache metadata: use bitset cursor api to load discard bitset")
17 Cc: stable@vger.kernel.org
18 Signed-off-by: Nikos Tsironis <ntsironis@arrikto.com>
19 Signed-off-by: Mike Snitzer <snitzer@redhat.com>
20 Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
21
22 ---
23 drivers/md/dm-cache-metadata.c | 9 ++++++++-
24 1 file changed, 8 insertions(+), 1 deletion(-)
25
26 --- a/drivers/md/dm-cache-metadata.c
27 +++ b/drivers/md/dm-cache-metadata.c
28 @@ -1167,11 +1167,18 @@ static int __load_discards(struct dm_cac
29 if (r)
30 return r;
31
32 - for (b = 0; b < from_dblock(cmd->discard_nr_blocks); b++) {
33 + for (b = 0; ; b++) {
34 r = fn(context, cmd->discard_block_size, to_dblock(b),
35 dm_bitset_cursor_get_value(&c));
36 if (r)
37 break;
38 +
39 + if (b >= (from_dblock(cmd->discard_nr_blocks) - 1))
40 + break;
41 +
42 + r = dm_bitset_cursor_next(&c);
43 + if (r)
44 + break;
45 }
46
47 dm_bitset_cursor_end(&c);