dm integrity: always set version on superblock update
authorMilan Broz <gmazyland@gmail.com>
Wed, 22 May 2019 11:29:44 +0000 (13:29 +0200)
committerMike Snitzer <snitzer@redhat.com>
Tue, 9 Jul 2019 17:46:01 +0000 (13:46 -0400)
The new integrity bitmap mode uses the dirty flag.  The dirty flag
should not be set in older superblock versions.

The current code sets it unconditionally, even if the superblock
was already formatted without bitmap in older system.

Fix this by moving the version check to one common place and check
version on every superblock write.

Signed-off-by: Milan Broz <gmazyland@gmail.com>
Signed-off-by: Mike Snitzer <snitzer@redhat.com>
drivers/md/dm-integrity.c

index 44e76cda087aa658fbb13195fa5d91f4117902b8..a2ab6a32b1740253c2a938f0201bdbb839d87a07 100644 (file)
@@ -476,6 +476,9 @@ static int sync_rw_sb(struct dm_integrity_c *ic, int op, int op_flags)
        io_loc.sector = ic->start;
        io_loc.count = SB_SECTORS;
 
+       if (op == REQ_OP_WRITE)
+               sb_set_version(ic);
+
        return dm_io(&io_req, 1, &io_loc, NULL);
 }
 
@@ -2317,7 +2320,6 @@ static void recalc_write_super(struct dm_integrity_c *ic)
        if (dm_integrity_failed(ic))
                return;
 
-       sb_set_version(ic);
        r = sync_rw_sb(ic, REQ_OP_WRITE, 0);
        if (unlikely(r))
                dm_integrity_io_error(ic, "writing superblock", r);