dm integrity: fix error reporting in bitmap mode after creation
commit e27fec66f0a94e35a35548bd0b29ae616e62ec62 upstream. The dm-integrity target did not report errors in bitmap mode just after creation. The reason is that the function integrity_recalc didn't clean up ic->recalc_bitmap as it proceeded with recalculation. Fix this by updating the bitmap accordingly -- the double shift serves to rounddown. Signed-off-by: Mikulas Patocka <mpatocka@redhat.com> Fixes: 468dfca38b1a ("dm integrity: add a bitmap mode") Cc: stable@vger.kernel.org # v5.2+ Signed-off-by: Mike Snitzer <snitzer@redhat.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
b30f628bee
commit
e6ddb1d45c
@ -2365,6 +2365,7 @@ next_chunk:
|
||||
range.logical_sector = le64_to_cpu(ic->sb->recalc_sector);
|
||||
if (unlikely(range.logical_sector >= ic->provided_data_sectors)) {
|
||||
if (ic->mode == 'B') {
|
||||
block_bitmap_op(ic, ic->recalc_bitmap, 0, ic->provided_data_sectors, BITMAP_OP_CLEAR);
|
||||
DEBUG_print("queue_delayed_work: bitmap_flush_work\n");
|
||||
queue_delayed_work(ic->commit_wq, &ic->bitmap_flush_work, 0);
|
||||
}
|
||||
@ -2442,6 +2443,17 @@ next_chunk:
|
||||
goto err;
|
||||
}
|
||||
|
||||
if (ic->mode == 'B') {
|
||||
sector_t start, end;
|
||||
start = (range.logical_sector >>
|
||||
(ic->sb->log2_sectors_per_block + ic->log2_blocks_per_bitmap_bit)) <<
|
||||
(ic->sb->log2_sectors_per_block + ic->log2_blocks_per_bitmap_bit);
|
||||
end = ((range.logical_sector + range.n_sectors) >>
|
||||
(ic->sb->log2_sectors_per_block + ic->log2_blocks_per_bitmap_bit)) <<
|
||||
(ic->sb->log2_sectors_per_block + ic->log2_blocks_per_bitmap_bit);
|
||||
block_bitmap_op(ic, ic->recalc_bitmap, start, end - start, BITMAP_OP_CLEAR);
|
||||
}
|
||||
|
||||
advance_and_next:
|
||||
cond_resched();
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user