diff options
Diffstat (limited to 'drivers/md/dm-integrity.c')
| -rw-r--r-- | drivers/md/dm-integrity.c | 12 | 
1 files changed, 12 insertions, 0 deletions
| diff --git a/drivers/md/dm-integrity.c b/drivers/md/dm-integrity.c index 8c8d940e532e..3fc3757def55 100644 --- a/drivers/md/dm-integrity.c +++ b/drivers/md/dm-integrity.c @@ -2487,6 +2487,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);  		} @@ -2564,6 +2565,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(); |