dm integrity: don't re-write metadata if discarding same blocks
authorMikulas Patocka <mpatocka@redhat.com>
Tue, 27 Apr 2021 15:57:06 +0000 (11:57 -0400)
committerMike Snitzer <snitzer@redhat.com>
Fri, 30 Apr 2021 18:01:39 +0000 (14:01 -0400)
If we discard already discarded blocks we do not need to write discard
pattern to the metadata, because it is already there.

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

index 6977422454a49d6b6054e9e5ccbea7eba9a0b460..3b54b7f8c9b9bed21542a32559d6e807cfb26b1e 100644 (file)
@@ -1429,8 +1429,10 @@ static int dm_integrity_rw_tag(struct dm_integrity_c *ic, unsigned char *tag, se
                if (op == TAG_READ) {
                        memcpy(tag, dp, to_copy);
                } else if (op == TAG_WRITE) {
-                       memcpy(dp, tag, to_copy);
-                       dm_bufio_mark_partial_buffer_dirty(b, *metadata_offset, *metadata_offset + to_copy);
+                       if (memcmp(dp, tag, to_copy)) {
+                               memcpy(dp, tag, to_copy);
+                               dm_bufio_mark_partial_buffer_dirty(b, *metadata_offset, *metadata_offset + to_copy);
+                       }
                } else {
                        /* e.g.: op == TAG_CMP */