Mike, > This fix should resolve the problem, I'll be staging it to go upstream > during the 4.8-rc cycle (Akira, please test to verify your test fails as > expected now): I tested with the patch and it's now ok. Akira On 2016/07/30 2:30, Mike Snitzer wrote: > On Fri, Jul 29 2016 at 10:35am -0400, > Mike Snitzer <snitzer@xxxxxxxxxx> wrote: > >> On Fri, Jul 29 2016 at 10:31am -0400, >> Lukas Herbolt <lherbolt@xxxxxxxxxx> wrote: >> >>> - http://people.redhat.com/~lherbolt/dm-flakey/v4.7-dm_flakey.tar.gz >>> >>> Lukas >> >> Please post an incremental patch relative to 4.7 or latest Linus >> kernel. Don't make people suffer with tarballs of whatever you've >> packaged above. > > I pulled out your incremental diff. Your proposed fix isn't correct. It > breaks the corrupt_bio_byte feature. We cannot blindly drop reads early > in flakey_map(), like you've proposed, because the corrupt_bio_byte > feature relies on corrupt data being returned on read during the > down_interval. > > The issue reported is: reads aren't dropped during the "down_interval". > > I do agree that this needs fixing, and it was commit a3998799fb4df ("dm > flakey: add corrupt_bio_byte feature") that caused this regression. > > But a fix must not break the corrupt_bio_byte feature. > > This fix should resolve the problem, I'll be staging it to go upstream > during the 4.8-rc cycle (Akira, please test to verify your test fails as > expected now): > > From: Mike Snitzer <snitzer@xxxxxxxxxx> > Date: Fri, 29 Jul 2016 13:19:55 -0400 > Subject: [PATCH] dm flakey: error READ bios during the down_interval > > When the corrupt_bio_byte feature was introduced it caused READ bios to > no longer be errored with -EIO during the down_interval. This had to do > with the complexity of needing to submit READs if the corrupt_bio_byte > feature was used. > > Fix it so READ bios are properly errored with -EIO; doing so early in > flakey_map() as long as there isn't a match for the corrupt_bio_byte > feature. > > Fixes: a3998799fb4df ("dm flakey: add corrupt_bio_byte feature") > Reported-by: Akira Hayakawa <ruby.wktk@xxxxxxxxx> > Signed-off-by: Mike Snitzer <snitzer@xxxxxxxxxx> > Cc: stable@xxxxxxxxxxxxxxx > --- > drivers/md/dm-flakey.c | 23 +++++++++++++++-------- > 1 file changed, 15 insertions(+), 8 deletions(-) > > diff --git a/drivers/md/dm-flakey.c b/drivers/md/dm-flakey.c > index 29b99fb..19db13e 100644 > --- a/drivers/md/dm-flakey.c > +++ b/drivers/md/dm-flakey.c > @@ -289,10 +289,16 @@ static int flakey_map(struct dm_target *ti, struct bio *bio) > pb->bio_submitted = true; > > /* > - * Map reads as normal. > + * Map reads as normal only if corrupt_bio_byte set. > */ > - if (bio_data_dir(bio) == READ) > - goto map_bio; > + if (bio_data_dir(bio) == READ) { > + /* If flags were specified, only corrupt those that match. */ > + if (fc->corrupt_bio_byte && (fc->corrupt_bio_rw == READ) && > + all_corrupt_bio_flags_match(bio, fc)) > + goto map_bio; > + else > + return -EIO; > + } > > /* > * Drop writes? > @@ -330,12 +336,13 @@ static int flakey_end_io(struct dm_target *ti, struct bio *bio, int error) > > /* > * Corrupt successful READs while in down state. > - * If flags were specified, only corrupt those that match. > */ > - if (fc->corrupt_bio_byte && !error && pb->bio_submitted && > - (bio_data_dir(bio) == READ) && (fc->corrupt_bio_rw == READ) && > - all_corrupt_bio_flags_match(bio, fc)) > - corrupt_bio_data(bio, fc); > + if (!error && pb->bio_submitted && (bio_data_dir(bio) == READ)) { > + if (fc->corrupt_bio_byte) > + corrupt_bio_data(bio, fc); > + else > + return -EIO; > + } > > return error; > } > -- dm-devel mailing list dm-devel@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/dm-devel