[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