[dm-devel] dm-flakey NOT to return -EIO on READ?
Lukas Herbolt
lherbolt at redhat.com
Fri Jul 29 06:25:50 UTC 2016
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 <ruby.wktk at gmail.com> 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 <ruby.wktk at gmail.com>
> 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
> >>> dm-devel at redhat.com
> >>> https://www.redhat.com/mailman/listinfo/dm-devel
> >>>
> >>
> >>
> >>
>
--
Lukas Herbolt
RHCE, RH436, BSc, SSc
Senior Technical Support Engineer
Global Support Services (GSS)
Email: lherbolt at redhat.com
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://listman.redhat.com/archives/dm-devel/attachments/20160729/d108d429/attachment.htm>
More information about the dm-devel
mailing list