Salut,<br><br>Tot eu.<br>Probabil iar va urma un monolog tipic (şi spam :D ), dar poate are cineva idee...<br><br>Ei bine, după cum am scris şi în subiect, am un race condition pe undeva prin cod.<br>Câte-odată îmi ia toate testele, alteori îmi diferă fişierele cu vreo 30-40 bytes (nu la size ci la conţinut, comparat manual :D ).<br>
<br>Exemplu: <br><i>test 633: check lots_of_files/file21 data.........................failed<br> -- diff /tmp/pitix.mnt/lots_of_files/file21 /tmp/<a href="http://pitix.rw//lots_of_files/file21">pitix.rw//lots_of_files/file21</a></i><br>
<br>Chestia asta se întâmplă random, pe fişiere random.<br>Şi am mai observat un pattern: MEREU (din 5 rulări buguite), diferă doar 36 de caractere pe la mijlocul fişierului; în fişierul din <a href="http://pitix.rw">pitix.rw</a> am 36 NULL-uri consecutive iar în pitix.mnt am, în locul lor, 36 de caractere binare random.<br>
Repet: mereu 36 NULL-uri consecutive, mereu sunt copiate greşit. Dimensiunile fişierelor sunt identice.<br>Şi am mai încercat să îl pun cu dd (şi cu cp), manual, şi se copiază perfect fişierul cu cele 36 de NULL-uri.<br>WTF? :D <br>
<br>Am protejat structurile data_blocks a inode-ului cu spin_lock-uri. Tot aşa face.<br>Am pus printk-uri de ENTER functie() şi EXIT funcţie() la <b>truncate()</b> şi la <b>get_block()</b>. <br>Nu se apelează niciodată intercalate. Dar, dacă nu e de aici, atunci nu am nicio idee ce se întâmplă...<br>
<br>