diff --git a/kernel/lib_log.c b/kernel/lib_log.c index 45568926..7c71addc 100644 --- a/kernel/lib_log.c +++ b/kernel/lib_log.c @@ -367,7 +367,7 @@ bool log_finalize(struct log_status *logst, int len, void (*endio)(void *private unsigned char checksum[MARS_DIGEST_SIZE]; check_flags |= - mars_digest(usable_digest_mask, + mars_digest(usable_digest_mask & ~disabled_log_digests, &used_log_digest, checksum, data + logst->payload_offset, len); diff --git a/kernel/mars_copy.c b/kernel/mars_copy.c index 4472543e..d55c9dd7 100644 --- a/kernel/mars_copy.c +++ b/kernel/mars_copy.c @@ -384,7 +384,7 @@ __u32 _make_flags(bool verify_mode, bool is_local) if (is_local) return available_digest_mask | MREF_NODATA; - return usable_digest_mask | MREF_NODATA; + return (usable_digest_mask & ~disabled_net_digests) | MREF_NODATA; } diff --git a/kernel/sy_old/mars_main.c b/kernel/sy_old/mars_main.c index b93362c7..9d8aeb75 100644 --- a/kernel/sy_old/mars_main.c +++ b/kernel/sy_old/mars_main.c @@ -81,6 +81,9 @@ int usable_features_version = 0; int usable_strategy_version = 0; +__u32 disabled_log_digests = 0; +__u32 disabled_net_digests = 0; + static int _tmp_features_version = OPTIONAL_FEATURES_VERSION; static int _tmp_strategy_version = OPTIONAL_STRATEGY_VERSION; @@ -5642,6 +5645,15 @@ int make_defaults(void *buf, struct mars_dent *dent) if (!strcmp(dent->d_name, "sync-limit")) { sscanf(dent->new_link, "%d", &global_sync_limit); + } else if (!strcmp(dent->d_name, "disabled-log-digests")) { + sscanf(dent->new_link, "0x%x", &disabled_log_digests); + } else if (!strcmp(dent->d_name, "disabled-net-digests")) { + __u32 tmp = 0; + + sscanf(dent->new_link, "0x%x", &tmp); + /* at least one digest must remain usable */ + tmp &= ~MREF_CHKSUM_MD5_OLD; + disabled_net_digests = tmp; } else { MARS_DBG("unimplemented default '%s'\n", dent->d_name); }