[dm-devel] [PATCH 2/2] dm-integrity: clear the journal on suspend

Mikulas Patocka mpatocka at redhat.com
Tue Nov 15 17:51:50 UTC 2022


There was a problem that the user burned dm-integrity image on CDROM and
could not activate it becaues it had non-empty journal.

We fix this problem by flusing the journal (it is done by the previous 
patch) and clearing the journal (it is done by this patch). When we clear 
the journal, dm-integrity won't attempt to replay it on the next 
activation.

Signed-off-by: Mikulas Patocka <mpatocka at redhat.com>

---
 drivers/md/dm-integrity.c |   10 ++++++++++
 1 file changed, 10 insertions(+)

Index: linux-2.6/drivers/md/dm-integrity.c
===================================================================
--- linux-2.6.orig/drivers/md/dm-integrity.c
+++ linux-2.6/drivers/md/dm-integrity.c
@@ -263,6 +263,7 @@ struct dm_integrity_c {
 
 	struct completion crypto_backoff;
 
+	bool wrote_to_journal;
 	bool journal_uptodate;
 	bool just_formatted;
 	bool recalculate_flag;
@@ -2375,6 +2376,8 @@ static void integrity_commit(struct work
 	if (!commit_sections)
 		goto release_flush_bios;
 
+	ic->wrote_to_journal = true;
+
 	i = commit_start;
 	for (n = 0; n < commit_sections; n++) {
 		for (j = 0; j < ic->journal_section_entries; j++) {
@@ -3100,6 +3103,11 @@ static void dm_integrity_postsuspend(str
 		queue_work(ic->writer_wq, &ic->writer_work);
 		drain_workqueue(ic->writer_wq);
 		dm_integrity_flush_buffers(ic, true);
+		if (ic->wrote_to_journal) {
+			init_journal(ic, ic->free_section, ic->journal_sections - ic->free_section, ic->commit_seq);
+			if (ic->free_section)
+				init_journal(ic, 0, ic->free_section, next_commit_seq(ic->commit_seq));
+		}
 	}
 
 	if (ic->mode == 'B') {
@@ -3127,6 +3135,8 @@ static void dm_integrity_resume(struct d
 
 	DEBUG_print("resume\n");
 
+	ic->wrote_to_journal = false;
+
 	if (ic->provided_data_sectors != old_provided_data_sectors) {
 		if (ic->provided_data_sectors > old_provided_data_sectors &&
 		    ic->mode == 'B' &&



More information about the dm-devel mailing list