|
Jiri Slaby |
ef7db2 |
From: Mikulas Patocka <mpatocka@redhat.com>
|
|
Jiri Slaby |
ef7db2 |
Date: Sun, 22 Jan 2023 14:03:56 -0500
|
|
Jiri Slaby |
ef7db2 |
Subject: [PATCH] dm flakey: fix logic when corrupting a bio
|
|
Jiri Slaby |
ef7db2 |
References: bsc#1012628
|
|
Jiri Slaby |
ef7db2 |
Patch-mainline: 6.2.3
|
|
Jiri Slaby |
ef7db2 |
Git-commit: aa56b9b75996ff4c76a0a4181c2fa0206c3d91cc
|
|
Jiri Slaby |
ef7db2 |
|
|
Jiri Slaby |
ef7db2 |
commit aa56b9b75996ff4c76a0a4181c2fa0206c3d91cc upstream.
|
|
Jiri Slaby |
ef7db2 |
|
|
Jiri Slaby |
ef7db2 |
If "corrupt_bio_byte" is set to corrupt reads and corrupt_bio_flags is
|
|
Jiri Slaby |
ef7db2 |
used, dm-flakey would erroneously return all writes as errors. Likewise,
|
|
Jiri Slaby |
ef7db2 |
if "corrupt_bio_byte" is set to corrupt writes, dm-flakey would return
|
|
Jiri Slaby |
ef7db2 |
errors for all reads.
|
|
Jiri Slaby |
ef7db2 |
|
|
Jiri Slaby |
ef7db2 |
Fix the logic so that if fc->corrupt_bio_byte is non-zero, dm-flakey
|
|
Jiri Slaby |
ef7db2 |
will not abort reads on writes with an error.
|
|
Jiri Slaby |
ef7db2 |
|
|
Jiri Slaby |
ef7db2 |
Cc: stable@vger.kernel.org
|
|
Jiri Slaby |
ef7db2 |
Signed-off-by: Mikulas Patocka <mpatocka@redhat.com>
|
|
Jiri Slaby |
ef7db2 |
Reviewed-by: Sweet Tea Dorminy <sweettea-kernel@dorminy.me>
|
|
Jiri Slaby |
ef7db2 |
Signed-off-by: Mike Snitzer <snitzer@kernel.org>
|
|
Jiri Slaby |
ef7db2 |
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
|
|
Jiri Slaby |
ef7db2 |
Signed-off-by: Jiri Slaby <jslaby@suse.cz>
|
|
Jiri Slaby |
ef7db2 |
---
|
|
Jiri Slaby |
ef7db2 |
drivers/md/dm-flakey.c | 23 +++++++++++++----------
|
|
Jiri Slaby |
ef7db2 |
1 file changed, 13 insertions(+), 10 deletions(-)
|
|
Jiri Slaby |
ef7db2 |
|
|
Jiri Slaby |
ef7db2 |
diff --git a/drivers/md/dm-flakey.c b/drivers/md/dm-flakey.c
|
|
Jiri Slaby |
ef7db2 |
index 89fa7a68..220bbf35 100644
|
|
Jiri Slaby |
ef7db2 |
--- a/drivers/md/dm-flakey.c
|
|
Jiri Slaby |
ef7db2 |
+++ b/drivers/md/dm-flakey.c
|
|
Jiri Slaby |
ef7db2 |
@@ -361,9 +361,11 @@ static int flakey_map(struct dm_target *ti, struct bio *bio)
|
|
Jiri Slaby |
ef7db2 |
/*
|
|
Jiri Slaby |
ef7db2 |
* Corrupt matching writes.
|
|
Jiri Slaby |
ef7db2 |
*/
|
|
Jiri Slaby |
ef7db2 |
- if (fc->corrupt_bio_byte && (fc->corrupt_bio_rw == WRITE)) {
|
|
Jiri Slaby |
ef7db2 |
- if (all_corrupt_bio_flags_match(bio, fc))
|
|
Jiri Slaby |
ef7db2 |
- corrupt_bio_data(bio, fc);
|
|
Jiri Slaby |
ef7db2 |
+ if (fc->corrupt_bio_byte) {
|
|
Jiri Slaby |
ef7db2 |
+ if (fc->corrupt_bio_rw == WRITE) {
|
|
Jiri Slaby |
ef7db2 |
+ if (all_corrupt_bio_flags_match(bio, fc))
|
|
Jiri Slaby |
ef7db2 |
+ corrupt_bio_data(bio, fc);
|
|
Jiri Slaby |
ef7db2 |
+ }
|
|
Jiri Slaby |
ef7db2 |
goto map_bio;
|
|
Jiri Slaby |
ef7db2 |
}
|
|
Jiri Slaby |
ef7db2 |
|
|
Jiri Slaby |
ef7db2 |
@@ -389,13 +391,14 @@ static int flakey_end_io(struct dm_target *ti, struct bio *bio,
|
|
Jiri Slaby |
ef7db2 |
return DM_ENDIO_DONE;
|
|
Jiri Slaby |
ef7db2 |
|
|
Jiri Slaby |
ef7db2 |
if (!*error && pb->bio_submitted && (bio_data_dir(bio) == READ)) {
|
|
Jiri Slaby |
ef7db2 |
- if (fc->corrupt_bio_byte && (fc->corrupt_bio_rw == READ) &&
|
|
Jiri Slaby |
ef7db2 |
- all_corrupt_bio_flags_match(bio, fc)) {
|
|
Jiri Slaby |
ef7db2 |
- /*
|
|
Jiri Slaby |
ef7db2 |
- * Corrupt successful matching READs while in down state.
|
|
Jiri Slaby |
ef7db2 |
- */
|
|
Jiri Slaby |
ef7db2 |
- corrupt_bio_data(bio, fc);
|
|
Jiri Slaby |
ef7db2 |
-
|
|
Jiri Slaby |
ef7db2 |
+ if (fc->corrupt_bio_byte) {
|
|
Jiri Slaby |
ef7db2 |
+ if ((fc->corrupt_bio_rw == READ) &&
|
|
Jiri Slaby |
ef7db2 |
+ all_corrupt_bio_flags_match(bio, fc)) {
|
|
Jiri Slaby |
ef7db2 |
+ /*
|
|
Jiri Slaby |
ef7db2 |
+ * Corrupt successful matching READs while in down state.
|
|
Jiri Slaby |
ef7db2 |
+ */
|
|
Jiri Slaby |
ef7db2 |
+ corrupt_bio_data(bio, fc);
|
|
Jiri Slaby |
ef7db2 |
+ }
|
|
Jiri Slaby |
ef7db2 |
} else if (!test_bit(DROP_WRITES, &fc->flags) &&
|
|
Jiri Slaby |
ef7db2 |
!test_bit(ERROR_WRITES, &fc->flags)) {
|
|
Jiri Slaby |
ef7db2 |
/*
|
|
Jiri Slaby |
ef7db2 |
--
|
|
Jiri Slaby |
ef7db2 |
2.35.3
|
|
Jiri Slaby |
ef7db2 |
|