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@xxxxxxxxx> 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@xxxxxxxxx> 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@xxxxxxxxxx
>>> https://www.redhat.com/mailman/listinfo/dm-devel
>>>
>>
>>
>>
Lukas Herbolt
RHCE, RH436, BSc, SSc
Senior Technical Support Engineer
Global Support Services (GSS)
Email: lherbolt@xxxxxxxxxx
-- dm-devel mailing list dm-devel@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/dm-devel