- http://people.redhat.com/~lherbolt/dm-flakey/v4.7-dm_flakey.tar.gz
Lukas On Fri, Jul 29, 2016 at 8:32 AM, Akira Hayakawa <[email protected]> wrote: > Hi Lukas, > > > I have patch ready, would you be able to test it before posting it. > > > > Let me know if I should build the kernel for you or just share the source > > with you. > > OK. > Please share the git tree and specify the branch to test. > > Akira > > On 2016/07/29 15:25, Lukas Herbolt wrote: > > Hi Akira, > > Sorry I was on holiday. > > I have patch ready, would you be able to test it before posting it. > > > > Let me know if I should build the kernel for you or just share the source > > with you. > > > > Lukas > > > > On Sun, Jul 17, 2016 at 3:36 AM, Akira Hayakawa <[email protected]> > wrote: > > > >>> On 2016/07/06 18:52, Lukas Herbolt wrote: > >>>> Hi, > >>>> Yes this part is wrong and reads are not dropped. > >>>> I have a patch ready, just have to send it out. > >> > >> btw, is this fix going to be included in the next release? > >> > >> On 2016/07/06 21:54, Akira Hayakawa wrote: > >>> Thanks, > >>> > >>> I want the patch in the main-tree quickly. > >>> Because without it, my tests will not be green. > >>> This is really annoying. > >>> > >>> I made a quick reproducer of this problem. > >>> If you are looking for one, this will help. > >>> (You need to install sbt first) > >>> > >>> https://github.com/akiradeveloper/writeboost-test-suite > >>> > >>> test("flakey (read)") { > >>> Memory(Sector.M(16)) { a => > >>> Flakey.Table(a, 0, 1).create { b => > >>> intercept[Exception] { > >>> Shell(s"dd status=none if=${b.bdev.path} iflag=direct > >> of=/dev/null") > >>> } > >>> } > >>> } > >>> } > >>> > >>> $ sudo sbt "testOnly dmtest.FlakeyTest" > >>> 12:44:00.643 [pool-2-thread-3-ScalaTest-running-FlakeyTest] INFO dmtest > >> - [TEST] flakey (read) > >>> 12:44:00.752 [pool-2-thread-3-ScalaTest-running-FlakeyTest] DEBUG > dmtest > >> - reload: table=0 32768 flakey /dev/loop0 0 0 1 > >>> [info] FlakeyTest: > >>> [info] - flakey (read) *** FAILED *** > >>> [info] Expected exception java.lang.Exception to be thrown, but no > >> exception was thrown. (FlakeyTest.scala:9) > >>> [info] Run completed in 2 seconds, 781 milliseconds. > >>> [info] Total number of tests run: 1 > >>> [info] Suites: completed 1, aborted 0 > >>> [info] Tests: succeeded 0, failed 1, canceled 0, ignored 0, pending 0 > >>> > >>> - Akira > >>> > >>> On 2016/07/06 18:52, Lukas Herbolt wrote: > >>>> Hi, > >>>> Yes this part is wrong and reads are not dropped. > >>>> I have a patch ready, just have to send it out. > >>>> > >>>> Lukas > >>>> > >>>> On Wed, Jul 6, 2016 at 8:33 AM, Akira Hayakawa <[email protected]> > >> wrote: > >>>> > >>>>> Hi, > >>>>> > >>>>> I am using dm-flakey to emulate a broken device that should return > >> -EIO on > >>>>> both read and write. > >>>>> I use the parameter up_interval=0 and down_interval=1. > >>>>> > >>>>> But when I am dd-ing the flakey device, while write fails, read > >> succeeds. > >>>>> This isn't the behavior I expect. > >>>>> > >>>>> Then I looked into the code. > >>>>> > >>>>> 326 static int flakey_end_io(struct dm_target *ti, struct bio *bio, > int > >>>>> error) > >>>>> 327 { > >>>>> 328 struct flakey_c *fc = ti->private; > >>>>> 329 struct per_bio_data *pb = dm_per_bio_data(bio, > >> sizeof(struct > >>>>> per_bio_data)); > >>>>> 330 > >>>>> 331 /* > >>>>> 332 * Corrupt successful READs while in down state. > >>>>> 333 * If flags were specified, only corrupt those that > match. > >>>>> 334 */ > >>>>> 335 if (fc->corrupt_bio_byte && !error && pb->bio_submitted > && > >>>>> 336 (bio_data_dir(bio) == READ) && (fc->corrupt_bio_rw == > >>>>> READ) && > >>>>> 337 all_corrupt_bio_flags_match(bio, fc)) > >>>>> 338 corrupt_bio_data(bio, fc); > >>>>> 339 > >>>>> 340 return error; > >>>>> 341 } > >>>>> > >>>>> When the bio direction is READ and currupt_bio_bytes isn't specified > >>>>> the READ bio is handled normally right? > >>>>> > >>>>> I think READ requests should return -EIO if > >>>>> > >>>>> 1. corrupt_bio_bytes isn't specified > >>>>> 2. but the requested is handled during down interval. > >>>>> > >>>>> as well as WRITE requests: > >>>>> > >>>>> 305 /* > >>>>> 306 * Corrupt matching writes. > >>>>> 307 */ > >>>>> 308 if (fc->corrupt_bio_byte && (fc->corrupt_bio_rw > == > >>>>> WRITE)) { > >>>>> 309 if (all_corrupt_bio_flags_match(bio, fc)) > >>>>> 310 corrupt_bio_data(bio, fc); > >>>>> 311 goto map_bio; > >>>>> 312 } > >>>>> 313 > >>>>> 314 /* > >>>>> 315 * By default, error all I/O. > >>>>> 316 */ > >>>>> 317 return -EIO; > >>>>> 318 } > >>>>> > >>>>> This code is similar to what we see in the end_io. > >>>>> > >>>>> If my understanding is correct, I would like to modify dm-flakey to > >> return > >>>>> -EIO in the end_io. > >>>>> > >>>>> I would like to request for comments. > >>>>> > >>>>> Thanks, > >>>>> > >>>>> - Akira > >>>>> > >>>>> -- > >>>>> dm-devel mailing list > >>>>> [email protected] > >>>>> https://www.redhat.com/mailman/listinfo/dm-devel > >>>>> > >>>> > >>>> > >>>> > >> > > > > > > > -- Lukas Herbolt RHCE, RH436, BSc, SSc Senior Technical Support Engineer Global Support Services (GSS) Email: [email protected]
-- dm-devel mailing list [email protected] https://www.redhat.com/mailman/listinfo/dm-devel
