Loading drivers/md/dm-integrity.c +33 −24 Original line number Diff line number Diff line Loading @@ -2689,6 +2689,7 @@ static void integrity_recalc(struct work_struct *w) if (unlikely(dm_integrity_failed(ic))) goto err; if (!ic->discard) { io_req.bi_op = REQ_OP_READ; io_req.bi_op_flags = 0; io_req.mem.type = DM_IO_VMA; Loading @@ -2710,6 +2711,9 @@ static void integrity_recalc(struct work_struct *w) integrity_sector_checksum(ic, logical_sector + i, ic->recalc_buffer + (i << SECTOR_SHIFT), t); t += ic->tag_size; } } else { t = ic->recalc_tags + (n_sectors >> ic->sb->log2_sectors_per_block) * ic->tag_size; } metadata_block = get_metadata_sector_and_offset(ic, area, offset, &metadata_offset); Loading Loading @@ -4364,12 +4368,14 @@ static int dm_integrity_ctr(struct dm_target *ti, unsigned argc, char **argv) goto bad; } INIT_WORK(&ic->recalc_work, integrity_recalc); if (!ic->discard) { ic->recalc_buffer = vmalloc(RECALC_SECTORS << SECTOR_SHIFT); if (!ic->recalc_buffer) { ti->error = "Cannot allocate buffer for recalculating"; r = -ENOMEM; goto bad; } } ic->recalc_tags = kvmalloc_array(RECALC_SECTORS >> ic->sb->log2_sectors_per_block, ic->tag_size, GFP_KERNEL); if (!ic->recalc_tags) { Loading @@ -4377,6 +4383,9 @@ static int dm_integrity_ctr(struct dm_target *ti, unsigned argc, char **argv) r = -ENOMEM; goto bad; } if (ic->discard) memset(ic->recalc_tags, DISCARD_FILLER, (RECALC_SECTORS >> ic->sb->log2_sectors_per_block) * ic->tag_size); } else { if (ic->sb->flags & cpu_to_le32(SB_FLAG_RECALCULATING)) { ti->error = "Recalculate can only be specified with internal_hash"; Loading Loading @@ -4570,7 +4579,7 @@ static void dm_integrity_dtr(struct dm_target *ti) static struct target_type integrity_target = { .name = "integrity", .version = {1, 8, 0}, .version = {1, 9, 0}, .module = THIS_MODULE, .features = DM_TARGET_SINGLETON | DM_TARGET_INTEGRITY, .ctr = dm_integrity_ctr, Loading Loading
drivers/md/dm-integrity.c +33 −24 Original line number Diff line number Diff line Loading @@ -2689,6 +2689,7 @@ static void integrity_recalc(struct work_struct *w) if (unlikely(dm_integrity_failed(ic))) goto err; if (!ic->discard) { io_req.bi_op = REQ_OP_READ; io_req.bi_op_flags = 0; io_req.mem.type = DM_IO_VMA; Loading @@ -2710,6 +2711,9 @@ static void integrity_recalc(struct work_struct *w) integrity_sector_checksum(ic, logical_sector + i, ic->recalc_buffer + (i << SECTOR_SHIFT), t); t += ic->tag_size; } } else { t = ic->recalc_tags + (n_sectors >> ic->sb->log2_sectors_per_block) * ic->tag_size; } metadata_block = get_metadata_sector_and_offset(ic, area, offset, &metadata_offset); Loading Loading @@ -4364,12 +4368,14 @@ static int dm_integrity_ctr(struct dm_target *ti, unsigned argc, char **argv) goto bad; } INIT_WORK(&ic->recalc_work, integrity_recalc); if (!ic->discard) { ic->recalc_buffer = vmalloc(RECALC_SECTORS << SECTOR_SHIFT); if (!ic->recalc_buffer) { ti->error = "Cannot allocate buffer for recalculating"; r = -ENOMEM; goto bad; } } ic->recalc_tags = kvmalloc_array(RECALC_SECTORS >> ic->sb->log2_sectors_per_block, ic->tag_size, GFP_KERNEL); if (!ic->recalc_tags) { Loading @@ -4377,6 +4383,9 @@ static int dm_integrity_ctr(struct dm_target *ti, unsigned argc, char **argv) r = -ENOMEM; goto bad; } if (ic->discard) memset(ic->recalc_tags, DISCARD_FILLER, (RECALC_SECTORS >> ic->sb->log2_sectors_per_block) * ic->tag_size); } else { if (ic->sb->flags & cpu_to_le32(SB_FLAG_RECALCULATING)) { ti->error = "Recalculate can only be specified with internal_hash"; Loading Loading @@ -4570,7 +4579,7 @@ static void dm_integrity_dtr(struct dm_target *ti) static struct target_type integrity_target = { .name = "integrity", .version = {1, 8, 0}, .version = {1, 9, 0}, .module = THIS_MODULE, .features = DM_TARGET_SINGLETON | DM_TARGET_INTEGRITY, .ctr = dm_integrity_ctr, Loading