<div dir="ltr">Hi,<div><br></div><div>I'm currently testing <span class="" style="background-color:yellow"><span class="" style="background-color:yellow"><span class="" style>dm</span></span></span>-cache on '<font color="#000000"><span class="" style="background-color:yellow"><span class="" style="background-color:yellow"><span class="" style>debian</span></span></span> 3.12-1-amd64 #1 <span class="" style="background-color:yellow"><span class="" style="background-color:yellow"><span class="" style>SMP</span></span></span> Debian 3.12.9-1' vanilla kernel and finally reproduced the issue with data corruption on cached device.</font></div>
<div><font color="#000000"><br></font></div><div><font color="#000000">Using small and simple setup:</font></div><div><font color="#000000"><br></font></div><div><font color="#000000"><br></font></div><div><font color="#000000"><i><div>
root@<span class="" style="background-color:yellow"><span class="" style="background-color:yellow"><span class="" style>debian</span></span></span>:~# <span class="" style="background-color:yellow"><span class="" style="background-color:yellow"><span class="" style>blockdev</span></span></span> --<span class="" style="background-color:yellow"><span class="" style="background-color:yellow"><span class="" style>getsz</span></span></span> /<span class="" style="background-color:yellow"><span class="" style="background-color:yellow"><span class="" style>dev</span></span></span>/sda5</div>
<div>1951744</div><div>root@<span class="" style="background-color:yellow"><span class="" style="background-color:yellow"><span class="" style>debian</span></span></span>:~# <span class="" style="background-color:yellow"><span class="" style="background-color:yellow"><span class="" style>blockdev</span></span></span> --<span class="" style="background-color:yellow"><span class="" style="background-color:yellow"><span class="" style>getsz</span></span></span> /<span class="" style="background-color:yellow"><span class="" style="background-color:yellow"><span class="" style>dev</span></span></span>/sda6</div>
<div>122880</div><div>root@<span class="" style="background-color:yellow"><span class="" style="background-color:yellow"><span class="" style>debian</span></span></span>:~# <span class="" style="background-color:yellow"><span class="" style="background-color:yellow"><span class="" style>blockdev</span></span></span> --<span class="" style="background-color:yellow"><span class="" style="background-color:yellow"><span class="" style>getsz</span></span></span> /<span class="" style="background-color:yellow"><span class="" style="background-color:yellow"><span class="" style>dev</span></span></span>/sda7</div>
<div>28672</div><div><br></div></i></font></div><div><font color="#000000"><i>root@<span class="" style="background-color:yellow"><span class="" style="background-color:yellow"><span class="" style>debian</span></span></span>:~# <span class="" style="background-color:yellow"><span class="" style="background-color:yellow"><span class="" style>dmsetup</span></span></span> create cached --table '0 1951744 cache /<span class="" style="background-color:yellow"><span class="" style="background-color:yellow"><span class="" style>dev</span></span></span>/sda7 /<span class="" style="background-color:yellow"><span class="" style="background-color:yellow"><span class="" style>dev</span></span></span>/sda6 /<span class="" style="background-color:yellow"><span class="" style="background-color:yellow"><span class="" style>dev</span></span></span>/sda5  512 1 <span class="" style="background-color:yellow"><span class="" style="background-color:yellow"><span class="" style>writeback</span></span></span> default 0'</i><br>
</font></div><div><font color="#000000"><br></font></div><div><font color="#000000">and a script that actually starts many (let's say 100) instances of <i><b><span class="" style="background-color:yellow"><span class="" style="background-color:yellow"><span class="" style>badblock</span></span></span></b></i> tool,  writing, reading and comparing 0x55, </font><span style="color:rgb(0,0,0)">0x</span><span style="color:rgb(0,0,0)"><span class="" style="background-color:yellow"><span class="" style="background-color:yellow"><span class="" style>aa</span></span></span>, </span><span style="color:rgb(0,0,0)">0x</span><span style="color:rgb(0,0,0)">ff, </span><span style="color:rgb(0,0,0)">0x</span><span style="color:rgb(0,0,0)">00 patterns, where each instance repeats that procedure over is own range of blocks. See my bash script (attached)</span></div>
<div><font color="#000000"><br></font></div><div><font color="#000000">Here how I run it:</font></div><div><font color="#000000"><i>./<span class="" style="background-color:yellow"><span class="" style>dm</span></span>-stress-test.sh -n 100 -r 10000 -d /<span class="" style="background-color:yellow"><span class="" style>dev</span></span>/mapper/cached -t p</i><br>
</font></div><div><br></div><div><div>/<span class="" style>dev</span>/mapper/cached, 512, 1951744</div><div>running parallel test</div><div>checking blocks 0 to 19516</div><div>checking blocks 19517 to 39033</div></div><div>
<i style="color:rgb(0,0,0)">.</i><br></div><div><font color="#000000"><i>.</i></font></div><div><font color="#000000"><i>.</i></font></div><div><font color="#000000"><div><i>checking blocks 1932183 to 1951699</i></div><div>
<i>waiting for bad blocks</i></div><div><i>file has bad blocks, ./bad_block_43</i></div><div><i>839295</i></div><div><i>file has bad blocks, ./bad_block_43</i></div><div><i>839295</i></div><div><i>file has bad blocks, ./bad_block_43</i></div>
<div><i>839295</i></div><div><i>^<span class="" style="background-color:yellow"><span class="" style>CCTRL</span></span>-C exiting ...</i></div><div><br></div><div>here is the <span class="" style="background-color:yellow"><span class="" style>dm</span></span>-cache status at the time of first corrupted block:</div>
<div><br></div><div><div><i>root@<span class="" style="background-color:yellow"><span class="" style>debian</span></span>:~# <span class="" style="background-color:yellow"><span class="" style>dmsetup</span></span> status </i></div>
<div><i>cached: 0 1951744 cache 7/3584 852 126848 1040 166813 0 85 85 71 0 2 migration_threshold 2048 4 random_threshold 4 sequential_threshold 51</i>2</div></div><div><br></div></font></div><div><font color="#000000"><br>
</font></div><div><font color="#000000">I've also tried this test on <span class="" style="background-color:yellow">custom</span> build <span class="" style="background-color:yellow">kernel</span> 'Linux <span class="" style="background-color:yellow"><span class="" style>george</span></span> 3.13.0+ #3 <span class="" style="background-color:yellow"><span class="" style>SMP</span></span> Mon Feb 17 10:44:59 <span class="" style="background-color:yellow"><span class="" style>EET</span></span> 2014 x86_64 x86_64 x86_64 GNU/Linux' and there is the same issue </font></div>
<div><br></div><div><font color="#000000">If using ram device for cache and <span class="" style="background-color:yellow"><span class="" style>sata</span></span> for origin the first corrupted blocks appears almost  immediately .</font></div>
<div><font color="#000000"><br></font></div><div><font color="#000000"><br></font></div><div><font color="#000000">We been testing <span class="" style="background-color:yellow"><span class="" style="background-color:yellow"><span class="" style>dm</span></span></span>-cache on larger setups (see <a href="https://www">https://www</a>.<span class="" style="background-color:yellow"><span class="" style="background-color:yellow"><span class="" style>redhat</span></span></span>.com/archives/<span class="" style="background-color:yellow"><span class="" style="background-color:yellow"><span class="" style>dm</span></span></span>-<span class="" style="background-color:yellow"><span class="" style="background-color:yellow"><span class="" style>devel</span></span></span>/2014-January/msg00135.html</font><span style="color:rgb(0,0,0)">) but there we were able to corrupt cached device after several days under heavy traffic.</span></div>
</div>