diff --git a/mars_trans_logger.c b/mars_trans_logger.c index 0a5e36f6..77e79757 100644 --- a/mars_trans_logger.c +++ b/mars_trans_logger.c @@ -405,6 +405,10 @@ void hash_extend(struct trans_logger_brick *brick, loff_t *_pos, int *_len, stru if (test_a->is_collected) goto collision; + // no writeback of non-persistent data + if (!test_a->is_persistent) + goto collision; + // extend the search region when necessary diff = pos - test->ref_pos; if (diff > 0) { @@ -1446,6 +1450,7 @@ void phase0_endio(void *private, int error) orig_mref = orig_mref_a->object; CHECK_PTR(orig_mref, err); + orig_mref_a->is_persistent = true; qq_dec_flying(&brick->q_phase[0]); /* Pin mref->ref_count so it can't go away diff --git a/mars_trans_logger.h b/mars_trans_logger.h index 0cf36302..f4cd2545 100644 --- a/mars_trans_logger.h +++ b/mars_trans_logger.h @@ -128,6 +128,7 @@ struct trans_logger_mref_aspect { bool is_collected; bool is_fired; bool is_completed; + bool is_persistent; struct timespec stamp; loff_t log_pos; struct generic_callback cb;