summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--WHATS_NEW1
-rw-r--r--lib/format_text/format-text.c13
2 files changed, 7 insertions, 7 deletions
diff --git a/WHATS_NEW b/WHATS_NEW
index e9a5de820..6106edbfd 100644
--- a/WHATS_NEW
+++ b/WHATS_NEW
@@ -1,5 +1,6 @@
Version 2.03.14 -
==================================
+ Optimize computation of crc32 check sum with multiple PVs.
Enhance recover path on cache creation failure.
Filter out unsupported MQ/SMQ cache policy setting.
Fix memleak in mpath filter.
diff --git a/lib/format_text/format-text.c b/lib/format_text/format-text.c
index 44c77d027..29efa8ff6 100644
--- a/lib/format_text/format-text.c
+++ b/lib/format_text/format-text.c
@@ -42,6 +42,7 @@ struct text_fid_context {
char *write_buf; /* buffer containing metadata text to write to disk */
uint32_t write_buf_size; /* mem size of write_buf, increases in 64K multiples */
uint32_t new_metadata_size; /* size of text metadata in buf */
+ uint32_t checksum; /* crc32 checksum for new metadata */
unsigned preserve:1;
};
@@ -542,6 +543,7 @@ static int _vg_write_raw(struct format_instance *fid, struct volume_group *vg,
uint64_t write2_start = 0, write2_last = 0, write2_size = 0;
uint32_t write1_over = 0, write2_over = 0;
uint32_t write_buf_size;
+ uint32_t checksum;
uint32_t extra_size;
uint32_t bad_fields = 0;
char *write_buf = NULL;
@@ -601,6 +603,7 @@ static int _vg_write_raw(struct format_instance *fid, struct volume_group *vg,
write_buf = fidtc->write_buf;
write_buf_size = fidtc->write_buf_size;
new_size = fidtc->new_metadata_size;
+ checksum = fidtc->checksum;
} else {
if (!vg->write_count++)
(void) dm_snprintf(desc, sizeof(desc), "Write from %s.", vg->cmd->cmd_line);
@@ -631,6 +634,8 @@ static int _vg_write_raw(struct format_instance *fid, struct volume_group *vg,
dm_config_destroy(cft);
if (!vg->vg_precommitted)
goto_out;
+
+ fidtc->checksum = checksum = calc_crc(INITIAL_CRC, (uint8_t *)write_buf, new_size);
}
log_debug_metadata("VG %s seqno %u metadata write to %s mda_start %llu mda_size %llu mda_last %llu",
@@ -954,13 +959,7 @@ static int _vg_write_raw(struct format_instance *fid, struct volume_group *vg,
dev_unset_last_byte(mdac->area.dev);
- rlocn_new->checksum = calc_crc(INITIAL_CRC,
- (uint8_t *)write_buf,
- (uint32_t)(new_size - new_wrap));
- if (new_wrap)
- rlocn_new->checksum = calc_crc(rlocn_new->checksum,
- (uint8_t *)write_buf + new_size - new_wrap,
- (uint32_t)new_wrap);
+ rlocn_new->checksum = checksum;
r = 1;