All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 0/4] dm-flakey fixes
@ 2025-04-22 23:47 Benjamin Marzinski
  2025-04-22 23:47 ` [PATCH 1/4] dm-flakey: Clean up parsing messages Benjamin Marzinski
                   ` (4 more replies)
  0 siblings, 5 replies; 8+ messages in thread
From: Benjamin Marzinski @ 2025-04-22 23:47 UTC (permalink / raw)
  To: Mikulas Patocka, Mike Snitzer; +Cc: dm-devel, Kent Overstreet

This patchset handles some dm-flakey issues reported by Kent Overstreet.
It fixes some issues with dm-flakey's parsing and feature interactions
and makes corrupting read bios work.

Benjamin Marzinski (4):
  dm-flakey: Clean up parsing messages
  dm-flakey: error all IOs when num_features is absent
  dm-flakey: remove useless ERROR_READS check in flakey_end_io
  dm-flakey: make corrupting read bios work

 drivers/md/dm-flakey.c | 114 ++++++++++++++++++++++-------------------
 1 file changed, 62 insertions(+), 52 deletions(-)

-- 
2.48.1


^ permalink raw reply	[flat|nested] 8+ messages in thread

* [PATCH 1/4] dm-flakey: Clean up parsing messages
  2025-04-22 23:47 [PATCH 0/4] dm-flakey fixes Benjamin Marzinski
@ 2025-04-22 23:47 ` Benjamin Marzinski
  2025-04-22 23:47 ` [PATCH 2/4] dm-flakey: error all IOs when num_features is absent Benjamin Marzinski
                   ` (3 subsequent siblings)
  4 siblings, 0 replies; 8+ messages in thread
From: Benjamin Marzinski @ 2025-04-22 23:47 UTC (permalink / raw)
  To: Mikulas Patocka, Mike Snitzer; +Cc: dm-devel, Kent Overstreet

There were a number of cases where the error message for an invalid
table line did not match the actual problem. Fix these. Additionally,
error out when duplicate corrupt_bio_byte, random_read_corrupt, or
random_write_corrupt features are present. Also, error_reads is
incompatible with random_read_corrupt and corrupt_bio_byte with the READ
flag set, so disallow that.

Reported-by: Kent Overstreet <kent.overstreet@linux.dev>
Signed-off-by: Benjamin Marzinski <bmarzins@redhat.com>
---
 drivers/md/dm-flakey.c | 33 ++++++++++++++++++++++++---------
 1 file changed, 24 insertions(+), 9 deletions(-)

diff --git a/drivers/md/dm-flakey.c b/drivers/md/dm-flakey.c
index b690905ab89f..f5f8d25d1b2d 100644
--- a/drivers/md/dm-flakey.c
+++ b/drivers/md/dm-flakey.c
@@ -128,8 +128,11 @@ static int parse_features(struct dm_arg_set *as, struct flakey_c *fc,
 		 * corrupt_bio_byte <Nth_byte> <direction> <value> <bio_flags>
 		 */
 		if (!strcasecmp(arg_name, "corrupt_bio_byte")) {
-			if (!argc) {
-				ti->error = "Feature corrupt_bio_byte requires parameters";
+			if (fc->corrupt_bio_byte) {
+				ti->error = "Feature corrupt_bio_byte duplicated";
+				return -EINVAL;
+			} else if (argc < 4) {
+				ti->error = "Feature corrupt_bio_byte requires 4 parameters";
 				return -EINVAL;
 			}
 
@@ -176,7 +179,10 @@ static int parse_features(struct dm_arg_set *as, struct flakey_c *fc,
 		}
 
 		if (!strcasecmp(arg_name, "random_read_corrupt")) {
-			if (!argc) {
+			if (fc->random_read_corrupt) {
+				ti->error = "Feature random_read_corrupt duplicated";
+				return -EINVAL;
+			} else if (!argc) {
 				ti->error = "Feature random_read_corrupt requires a parameter";
 				return -EINVAL;
 			}
@@ -189,7 +195,10 @@ static int parse_features(struct dm_arg_set *as, struct flakey_c *fc,
 		}
 
 		if (!strcasecmp(arg_name, "random_write_corrupt")) {
-			if (!argc) {
+			if (fc->random_write_corrupt) {
+				ti->error = "Feature random_write_corrupt duplicated";
+				return -EINVAL;
+			} else if (!argc) {
 				ti->error = "Feature random_write_corrupt requires a parameter";
 				return -EINVAL;
 			}
@@ -205,12 +214,18 @@ static int parse_features(struct dm_arg_set *as, struct flakey_c *fc,
 		return -EINVAL;
 	}
 
-	if (test_bit(DROP_WRITES, &fc->flags) && (fc->corrupt_bio_rw == WRITE)) {
-		ti->error = "drop_writes is incompatible with corrupt_bio_byte with the WRITE flag set";
+	if (test_bit(DROP_WRITES, &fc->flags) &&
+	    (fc->corrupt_bio_rw == WRITE || fc->random_write_corrupt)) {
+		ti->error = "drop_writes is incompatible with random_write_corrupt or corrupt_bio_byte with the WRITE flag set";
 		return -EINVAL;
 
-	} else if (test_bit(ERROR_WRITES, &fc->flags) && (fc->corrupt_bio_rw == WRITE)) {
-		ti->error = "error_writes is incompatible with corrupt_bio_byte with the WRITE flag set";
+	} else if (test_bit(ERROR_WRITES, &fc->flags) &&
+		   (fc->corrupt_bio_rw == WRITE || fc->random_write_corrupt)) {
+		ti->error = "error_writes is incompatible with random_write_corrupt or corrupt_bio_byte with the WRITE flag set";
+		return -EINVAL;
+	} else if (test_bit(ERROR_READS, &fc->flags) &&
+		   (fc->corrupt_bio_rw == READ || fc->random_read_corrupt)) {
+		ti->error = "error_reads is incompatible with random_read_corrupt or corrupt_bio_byte with the READ flag set";
 		return -EINVAL;
 	}
 
@@ -278,7 +293,7 @@ static int flakey_ctr(struct dm_target *ti, unsigned int argc, char **argv)
 	if (r)
 		goto bad;
 
-	r = dm_read_arg(_args, &as, &fc->down_interval, &ti->error);
+	r = dm_read_arg(_args + 1, &as, &fc->down_interval, &ti->error);
 	if (r)
 		goto bad;
 
-- 
2.48.1


^ permalink raw reply related	[flat|nested] 8+ messages in thread

* [PATCH 2/4] dm-flakey: error all IOs when num_features is absent
  2025-04-22 23:47 [PATCH 0/4] dm-flakey fixes Benjamin Marzinski
  2025-04-22 23:47 ` [PATCH 1/4] dm-flakey: Clean up parsing messages Benjamin Marzinski
@ 2025-04-22 23:47 ` Benjamin Marzinski
  2025-04-22 23:47 ` [PATCH 3/4] dm-flakey: remove useless ERROR_READS check in flakey_end_io Benjamin Marzinski
                   ` (2 subsequent siblings)
  4 siblings, 0 replies; 8+ messages in thread
From: Benjamin Marzinski @ 2025-04-22 23:47 UTC (permalink / raw)
  To: Mikulas Patocka, Mike Snitzer; +Cc: dm-devel, Kent Overstreet

dm-flakey would error all IOs if num_features was 0, but if it was
absent, dm-flakey would never error any IO. Fix this so that no
num_features works the same as num_features set to 0.

Fixes: aa7d7bc99fed7 ("dm flakey: add an "error_reads" option")
Reported-by: Kent Overstreet <kent.overstreet@linux.dev>
Signed-off-by: Benjamin Marzinski <bmarzins@redhat.com>
---
 drivers/md/dm-flakey.c | 16 ++++++++--------
 1 file changed, 8 insertions(+), 8 deletions(-)

diff --git a/drivers/md/dm-flakey.c b/drivers/md/dm-flakey.c
index f5f8d25d1b2d..35f1708b62e8 100644
--- a/drivers/md/dm-flakey.c
+++ b/drivers/md/dm-flakey.c
@@ -53,8 +53,8 @@ struct per_bio_data {
 static int parse_features(struct dm_arg_set *as, struct flakey_c *fc,
 			  struct dm_target *ti)
 {
-	int r;
-	unsigned int argc;
+	int r = 0;
+	unsigned int argc = 0;
 	const char *arg_name;
 
 	static const struct dm_arg _args[] = {
@@ -65,14 +65,13 @@ static int parse_features(struct dm_arg_set *as, struct flakey_c *fc,
 		{0, PROBABILITY_BASE, "Invalid random corrupt argument"},
 	};
 
-	/* No feature arguments supplied. */
-	if (!as->argc)
-		return 0;
-
-	r = dm_read_arg_group(_args, as, &argc, &ti->error);
-	if (r)
+	if (as->argc && (r = dm_read_arg_group(_args, as, &argc, &ti->error)))
 		return r;
 
+	/* No feature arguments supplied. */
+	if (!argc)
+		goto error_all_io;
+
 	while (argc) {
 		arg_name = dm_shift_arg(as);
 		argc--;
@@ -232,6 +231,7 @@ static int parse_features(struct dm_arg_set *as, struct flakey_c *fc,
 	if (!fc->corrupt_bio_byte && !test_bit(ERROR_READS, &fc->flags) &&
 	    !test_bit(DROP_WRITES, &fc->flags) && !test_bit(ERROR_WRITES, &fc->flags) &&
 	    !fc->random_read_corrupt && !fc->random_write_corrupt) {
+error_all_io:
 		set_bit(ERROR_WRITES, &fc->flags);
 		set_bit(ERROR_READS, &fc->flags);
 	}
-- 
2.48.1


^ permalink raw reply related	[flat|nested] 8+ messages in thread

* [PATCH 3/4] dm-flakey: remove useless ERROR_READS check in flakey_end_io
  2025-04-22 23:47 [PATCH 0/4] dm-flakey fixes Benjamin Marzinski
  2025-04-22 23:47 ` [PATCH 1/4] dm-flakey: Clean up parsing messages Benjamin Marzinski
  2025-04-22 23:47 ` [PATCH 2/4] dm-flakey: error all IOs when num_features is absent Benjamin Marzinski
@ 2025-04-22 23:47 ` Benjamin Marzinski
  2025-04-22 23:47 ` [PATCH 4/4] dm-flakey: make corrupting read bios work Benjamin Marzinski
  2025-04-23  0:02 ` [PATCH 0/4] dm-flakey fixes Kent Overstreet
  4 siblings, 0 replies; 8+ messages in thread
From: Benjamin Marzinski @ 2025-04-22 23:47 UTC (permalink / raw)
  To: Mikulas Patocka, Mike Snitzer; +Cc: dm-devel, Kent Overstreet

If ERROR_READS is set, flakey_map returns DM_MAPIO_KILL for read
bios and flakey_end_io is never called, so there's no point in
checking it there. Also clean up an incorrect comment about when
read IOs are errored out.

Signed-off-by: Benjamin Marzinski <bmarzins@redhat.com>
---
 drivers/md/dm-flakey.c | 11 ++---------
 1 file changed, 2 insertions(+), 9 deletions(-)

diff --git a/drivers/md/dm-flakey.c b/drivers/md/dm-flakey.c
index 35f1708b62e8..0421f9336680 100644
--- a/drivers/md/dm-flakey.c
+++ b/drivers/md/dm-flakey.c
@@ -511,8 +511,8 @@ static int flakey_map(struct dm_target *ti, struct bio *bio)
 		pb->bio_submitted = true;
 
 		/*
-		 * Error reads if neither corrupt_bio_byte or drop_writes or error_writes are set.
-		 * Otherwise, flakey_end_io() will decide if the reads should be modified.
+		 * If ERROR_READS isn't set flakey_end_io() will decide if the
+		 * reads should be modified.
 		 */
 		if (bio_data_dir(bio) == READ) {
 			if (test_bit(ERROR_READS, &fc->flags))
@@ -590,13 +590,6 @@ static int flakey_end_io(struct dm_target *ti, struct bio *bio,
 			if (rem < fc->random_read_corrupt)
 				corrupt_bio_random(bio);
 		}
-		if (test_bit(ERROR_READS, &fc->flags)) {
-			/*
-			 * Error read during the down_interval if drop_writes
-			 * and error_writes were not configured.
-			 */
-			*error = BLK_STS_IOERR;
-		}
 	}
 
 	return DM_ENDIO_DONE;
-- 
2.48.1


^ permalink raw reply related	[flat|nested] 8+ messages in thread

* [PATCH 4/4] dm-flakey: make corrupting read bios work
  2025-04-22 23:47 [PATCH 0/4] dm-flakey fixes Benjamin Marzinski
                   ` (2 preceding siblings ...)
  2025-04-22 23:47 ` [PATCH 3/4] dm-flakey: remove useless ERROR_READS check in flakey_end_io Benjamin Marzinski
@ 2025-04-22 23:47 ` Benjamin Marzinski
  2025-04-23  0:02 ` [PATCH 0/4] dm-flakey fixes Kent Overstreet
  4 siblings, 0 replies; 8+ messages in thread
From: Benjamin Marzinski @ 2025-04-22 23:47 UTC (permalink / raw)
  To: Mikulas Patocka, Mike Snitzer; +Cc: dm-devel, Kent Overstreet

dm-flakey corrupts the read bios in the endio function.  However, the
corrupt_bio_* functions checked bio_has_data() to see if there was data
to corrupt. Since this was the endio function, there was no data left to
complete, so bio_has_data() was always false. Fix this by saving a copy
of the bio's bi_iter in flakey_map(), and using this to initialize the
iter for corrupting the read bios. This patch also skips cloning the bio
for write bios with no data.

Reported-by: Kent Overstreet <kent.overstreet@linux.dev>
Fixes: a3998799fb4df ("dm flakey: add corrupt_bio_byte feature")
Signed-off-by: Benjamin Marzinski <bmarzins@redhat.com>
---
 drivers/md/dm-flakey.c | 54 ++++++++++++++++++++++--------------------
 1 file changed, 28 insertions(+), 26 deletions(-)

diff --git a/drivers/md/dm-flakey.c b/drivers/md/dm-flakey.c
index 0421f9336680..a8ee3df32d5f 100644
--- a/drivers/md/dm-flakey.c
+++ b/drivers/md/dm-flakey.c
@@ -47,7 +47,8 @@ enum feature_flag_bits {
 };
 
 struct per_bio_data {
-	bool bio_submitted;
+	bool bio_can_corrupt;
+	struct bvec_iter saved_iter;
 };
 
 static int parse_features(struct dm_arg_set *as, struct flakey_c *fc,
@@ -354,7 +355,8 @@ static void flakey_map_bio(struct dm_target *ti, struct bio *bio)
 }
 
 static void corrupt_bio_common(struct bio *bio, unsigned int corrupt_bio_byte,
-			       unsigned char corrupt_bio_value)
+			       unsigned char corrupt_bio_value,
+			       struct bvec_iter start)
 {
 	struct bvec_iter iter;
 	struct bio_vec bvec;
@@ -363,7 +365,7 @@ static void corrupt_bio_common(struct bio *bio, unsigned int corrupt_bio_byte,
 	 * Overwrite the Nth byte of the bio's data, on whichever page
 	 * it falls.
 	 */
-	bio_for_each_segment(bvec, bio, iter) {
+	__bio_for_each_segment(bvec, bio, iter, start) {
 		if (bio_iter_len(bio, iter) > corrupt_bio_byte) {
 			unsigned char *segment = bvec_kmap_local(&bvec);
 			segment[corrupt_bio_byte] = corrupt_bio_value;
@@ -372,36 +374,31 @@ static void corrupt_bio_common(struct bio *bio, unsigned int corrupt_bio_byte,
 				"(rw=%c bi_opf=%u bi_sector=%llu size=%u)\n",
 				bio, corrupt_bio_value, corrupt_bio_byte,
 				(bio_data_dir(bio) == WRITE) ? 'w' : 'r', bio->bi_opf,
-				(unsigned long long)bio->bi_iter.bi_sector,
-				bio->bi_iter.bi_size);
+				(unsigned long long)start.bi_sector,
+				start.bi_size);
 			break;
 		}
 		corrupt_bio_byte -= bio_iter_len(bio, iter);
 	}
 }
 
-static void corrupt_bio_data(struct bio *bio, struct flakey_c *fc)
+static void corrupt_bio_data(struct bio *bio, struct flakey_c *fc,
+			     struct bvec_iter start)
 {
 	unsigned int corrupt_bio_byte = fc->corrupt_bio_byte - 1;
 
-	if (!bio_has_data(bio))
-		return;
-
-	corrupt_bio_common(bio, corrupt_bio_byte, fc->corrupt_bio_value);
+	corrupt_bio_common(bio, corrupt_bio_byte, fc->corrupt_bio_value, start);
 }
 
-static void corrupt_bio_random(struct bio *bio)
+static void corrupt_bio_random(struct bio *bio, struct bvec_iter start)
 {
 	unsigned int corrupt_byte;
 	unsigned char corrupt_value;
 
-	if (!bio_has_data(bio))
-		return;
-
-	corrupt_byte = get_random_u32() % bio->bi_iter.bi_size;
+	corrupt_byte = get_random_u32() % start.bi_size;
 	corrupt_value = get_random_u8();
 
-	corrupt_bio_common(bio, corrupt_byte, corrupt_value);
+	corrupt_bio_common(bio, corrupt_byte, corrupt_value, start);
 }
 
 static void clone_free(struct bio *clone)
@@ -496,7 +493,7 @@ static int flakey_map(struct dm_target *ti, struct bio *bio)
 	unsigned int elapsed;
 	struct per_bio_data *pb = dm_per_bio_data(bio, sizeof(struct per_bio_data));
 
-	pb->bio_submitted = false;
+	pb->bio_can_corrupt = false;
 
 	if (op_is_zone_mgmt(bio_op(bio)))
 		goto map_bio;
@@ -505,10 +502,11 @@ static int flakey_map(struct dm_target *ti, struct bio *bio)
 	elapsed = (jiffies - fc->start_time) / HZ;
 	if (elapsed % (fc->up_interval + fc->down_interval) >= fc->up_interval) {
 		bool corrupt_fixed, corrupt_random;
-		/*
-		 * Flag this bio as submitted while down.
-		 */
-		pb->bio_submitted = true;
+
+		if (bio_has_data(bio)) {
+			pb->bio_can_corrupt = true;
+			pb->saved_iter = bio->bi_iter;
+		}
 
 		/*
 		 * If ERROR_READS isn't set flakey_end_io() will decide if the
@@ -531,6 +529,8 @@ static int flakey_map(struct dm_target *ti, struct bio *bio)
 			return DM_MAPIO_SUBMITTED;
 		}
 
+		if (!pb->bio_can_corrupt)
+			goto map_bio;
 		/*
 		 * Corrupt matching writes.
 		 */
@@ -550,9 +550,11 @@ static int flakey_map(struct dm_target *ti, struct bio *bio)
 			struct bio *clone = clone_bio(ti, fc, bio);
 			if (clone) {
 				if (corrupt_fixed)
-					corrupt_bio_data(clone, fc);
+					corrupt_bio_data(clone, fc,
+							 clone->bi_iter);
 				if (corrupt_random)
-					corrupt_bio_random(clone);
+					corrupt_bio_random(clone,
+							   clone->bi_iter);
 				submit_bio(clone);
 				return DM_MAPIO_SUBMITTED;
 			}
@@ -574,21 +576,21 @@ static int flakey_end_io(struct dm_target *ti, struct bio *bio,
 	if (op_is_zone_mgmt(bio_op(bio)))
 		return DM_ENDIO_DONE;
 
-	if (!*error && pb->bio_submitted && (bio_data_dir(bio) == READ)) {
+	if (!*error && pb->bio_can_corrupt && (bio_data_dir(bio) == READ)) {
 		if (fc->corrupt_bio_byte) {
 			if ((fc->corrupt_bio_rw == READ) &&
 			    all_corrupt_bio_flags_match(bio, fc)) {
 				/*
 				 * Corrupt successful matching READs while in down state.
 				 */
-				corrupt_bio_data(bio, fc);
+				corrupt_bio_data(bio, fc, pb->saved_iter);
 			}
 		}
 		if (fc->random_read_corrupt) {
 			u64 rnd = get_random_u64();
 			u32 rem = do_div(rnd, PROBABILITY_BASE);
 			if (rem < fc->random_read_corrupt)
-				corrupt_bio_random(bio);
+				corrupt_bio_random(bio, pb->saved_iter);
 		}
 	}
 
-- 
2.48.1


^ permalink raw reply related	[flat|nested] 8+ messages in thread

* Re: [PATCH 0/4] dm-flakey fixes
  2025-04-22 23:47 [PATCH 0/4] dm-flakey fixes Benjamin Marzinski
                   ` (3 preceding siblings ...)
  2025-04-22 23:47 ` [PATCH 4/4] dm-flakey: make corrupting read bios work Benjamin Marzinski
@ 2025-04-23  0:02 ` Kent Overstreet
  2025-04-23  0:15   ` Benjamin Marzinski
  4 siblings, 1 reply; 8+ messages in thread
From: Kent Overstreet @ 2025-04-23  0:02 UTC (permalink / raw)
  To: Benjamin Marzinski; +Cc: Mikulas Patocka, Mike Snitzer, dm-devel

On Tue, Apr 22, 2025 at 07:47:34PM -0400, Benjamin Marzinski wrote:
> This patchset handles some dm-flakey issues reported by Kent Overstreet.
> It fixes some issues with dm-flakey's parsing and feature interactions
> and makes corrupting read bios work.
> 
> Benjamin Marzinski (4):
>   dm-flakey: Clean up parsing messages
>   dm-flakey: error all IOs when num_features is absent
>   dm-flakey: remove useless ERROR_READS check in flakey_end_io
>   dm-flakey: make corrupting read bios work
> 
>  drivers/md/dm-flakey.c | 114 ++++++++++++++++++++++-------------------
>  1 file changed, 62 insertions(+), 52 deletions(-)

Does it have tests now?

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH 0/4] dm-flakey fixes
  2025-04-23  0:02 ` [PATCH 0/4] dm-flakey fixes Kent Overstreet
@ 2025-04-23  0:15   ` Benjamin Marzinski
  2025-04-23  0:46     ` Kent Overstreet
  0 siblings, 1 reply; 8+ messages in thread
From: Benjamin Marzinski @ 2025-04-23  0:15 UTC (permalink / raw)
  To: Kent Overstreet; +Cc: Mikulas Patocka, Mike Snitzer, dm-devel

On Tue, Apr 22, 2025 at 08:02:54PM -0400, Kent Overstreet wrote:
> On Tue, Apr 22, 2025 at 07:47:34PM -0400, Benjamin Marzinski wrote:
> > This patchset handles some dm-flakey issues reported by Kent Overstreet.
> > It fixes some issues with dm-flakey's parsing and feature interactions
> > and makes corrupting read bios work.
> > 
> > Benjamin Marzinski (4):
> >   dm-flakey: Clean up parsing messages
> >   dm-flakey: error all IOs when num_features is absent
> >   dm-flakey: remove useless ERROR_READS check in flakey_end_io
> >   dm-flakey: make corrupting read bios work
> > 
> >  drivers/md/dm-flakey.c | 114 ++++++++++++++++++++++-------------------
> >  1 file changed, 62 insertions(+), 52 deletions(-)
> 
> Does it have tests now?

I tested it. Adding automated tests for it is a work in progress.

-Ben


^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH 0/4] dm-flakey fixes
  2025-04-23  0:15   ` Benjamin Marzinski
@ 2025-04-23  0:46     ` Kent Overstreet
  0 siblings, 0 replies; 8+ messages in thread
From: Kent Overstreet @ 2025-04-23  0:46 UTC (permalink / raw)
  To: Benjamin Marzinski; +Cc: Mikulas Patocka, Mike Snitzer, dm-devel

On Tue, Apr 22, 2025 at 08:15:20PM -0400, Benjamin Marzinski wrote:
> On Tue, Apr 22, 2025 at 08:02:54PM -0400, Kent Overstreet wrote:
> > On Tue, Apr 22, 2025 at 07:47:34PM -0400, Benjamin Marzinski wrote:
> > > This patchset handles some dm-flakey issues reported by Kent Overstreet.
> > > It fixes some issues with dm-flakey's parsing and feature interactions
> > > and makes corrupting read bios work.
> > > 
> > > Benjamin Marzinski (4):
> > >   dm-flakey: Clean up parsing messages
> > >   dm-flakey: error all IOs when num_features is absent
> > >   dm-flakey: remove useless ERROR_READS check in flakey_end_io
> > >   dm-flakey: make corrupting read bios work
> > > 
> > >  drivers/md/dm-flakey.c | 114 ++++++++++++++++++++++-------------------
> > >  1 file changed, 62 insertions(+), 52 deletions(-)
> > 
> > Does it have tests now?
> 
> I tested it. Adding automated tests for it is a work in progress.

If I get done with my other things tonight I can write you a ktest test
for it, if you'd like. It's what I use for testing bcachefs, shouldn't
take too long...

^ permalink raw reply	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2025-04-23  0:46 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-04-22 23:47 [PATCH 0/4] dm-flakey fixes Benjamin Marzinski
2025-04-22 23:47 ` [PATCH 1/4] dm-flakey: Clean up parsing messages Benjamin Marzinski
2025-04-22 23:47 ` [PATCH 2/4] dm-flakey: error all IOs when num_features is absent Benjamin Marzinski
2025-04-22 23:47 ` [PATCH 3/4] dm-flakey: remove useless ERROR_READS check in flakey_end_io Benjamin Marzinski
2025-04-22 23:47 ` [PATCH 4/4] dm-flakey: make corrupting read bios work Benjamin Marzinski
2025-04-23  0:02 ` [PATCH 0/4] dm-flakey fixes Kent Overstreet
2025-04-23  0:15   ` Benjamin Marzinski
2025-04-23  0:46     ` Kent Overstreet

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.