dm integrity: flush journal on suspend when using separate metadata device
authorMikulas Patocka <mpatocka@redhat.com>
Tue, 3 Jul 2018 18:13:32 +0000 (20:13 +0200)
committerMike Snitzer <snitzer@redhat.com>
Fri, 27 Jul 2018 19:24:26 +0000 (15:24 -0400)
Flush the journal on suspend when using separate data and metadata devices,
so that the metadata device can be discarded and the table can be reloaded
with a linear target pointing to the data device.

NOTE: the journal is deliberately not flushed when using the same device
for metadata and data, so that the journal replay code is tested.

Signed-off-by: Mikulas Patocka <mpatocka@redhat.com>
Signed-off-by: Mike Snitzer <snitzer@redhat.com>
drivers/md/dm-integrity.c

index 1097d8c..2d47519 100644 (file)
@@ -2052,7 +2052,7 @@ static void integrity_writer(struct work_struct *w)
        unsigned prev_free_sectors;
 
        /* the following test is not needed, but it tests the replay code */
-       if (READ_ONCE(ic->suspending))
+       if (READ_ONCE(ic->suspending) && !ic->meta_dev)
                return;
 
        spin_lock_irq(&ic->endio_wait.lock);
@@ -2287,6 +2287,8 @@ static void dm_integrity_postsuspend(struct dm_target *ti)
        drain_workqueue(ic->commit_wq);
 
        if (ic->mode == 'J') {
+               if (ic->meta_dev)
+                       queue_work(ic->writer_wq, &ic->writer_work);
                drain_workqueue(ic->writer_wq);
                dm_integrity_flush_buffers(ic);
        }