From 42113f2be5d9d3c6f1f2bcedcea3518efe2bdcf2 Mon Sep 17 00:00:00 2001 From: Michael Vrable Date: Wed, 10 Sep 2014 14:36:18 -0700 Subject: [PATCH] Always perform checksum comparison (for disk corruption) when possible. If the statcache indicates that a file should be unchanged, but we have read the file contents anyway (generally, because this was needed for segment cleaning), then comparing the old and new checksums is basically free. Do so, and report any discrepancies as they may indicate on-disk corruption. --- main.cc | 29 +++++++++++++---------------- 1 file changed, 13 insertions(+), 16 deletions(-) diff --git a/main.cc b/main.cc index daad058..0d02727 100644 --- a/main.cc +++ b/main.cc @@ -332,22 +332,19 @@ int64_t dumpfile(int fd, dictionary &file_info, const string &path, file_info["checksum"] = file_hash->digest_str(); } - // Sanity check: if we are rebuilding the statcache, but the file looks - // like it hasn't changed, then the newly-computed checksum should match - // the checksum in the statcache. If not, we have possible disk corruption - // and report a warning. - if (flag_rebuild_statcache) { - if (found - && metawriter->is_unchanged(&stat_buf) - && file_info["checksum"] != metawriter->get_checksum()) { - fprintf(stderr, - "Warning: Checksum for %s does not match expected value\n" - " expected: %s\n" - " actual: %s\n", - path.c_str(), - metawriter->get_checksum().c_str(), - file_info["checksum"].c_str()); - } + // Sanity check: if the file looks like it hasn't changed, then the + // newly-computed checksum should match the checksum in the statcache. If + // not, we have possible disk corruption and report a warning. + if (found + && metawriter->is_unchanged(&stat_buf) + && file_info["checksum"] != metawriter->get_checksum()) { + fprintf(stderr, + "Warning: Checksum for %s does not match expected value\n" + " expected: %s\n" + " actual: %s\n", + path.c_str(), + metawriter->get_checksum().c_str(), + file_info["checksum"].c_str()); } if (verbose && status != NULL) -- 2.20.1