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