<p dir="ltr"><br>
On May 3, 2014 9:29 AM, "Mihail Dunaev" <<a href="mailto:ddryhten@gmail.com">ddryhten@gmail.com</a>> wrote:<br>
><br>
> Hello,<br>
><br>
> Dacă aloc o nouă structură bio în handler-ul meu de request-uri<br>
> (pentru /dev/ssr), o completez şi îi dau mai departe submit_bio<br>
> către sda, nu mi se apelează funcţia din bi_end_io (practic mi se<br>
> blochează în “wait_for_completion”). Dacă fac fix acelaşi lucru în<br>
> funcţia de init, totul merge perfect. Care ar putea să fie problema ?<br>
> Mi-a scăpat mie ceva ? Codul este acelaşi cu cel din laborator.</p>
<p dir="ltr">Trebuie să apelezi submit_bio dintr-un kernel thread, așa cum zice și în enunț. Poți folosi workqueue pentru asta. Motivul este că încerci să aștepți după o cerere (pentru device-ul fizic) pe care ai trimis-o din interiorul altei cereri (cea pentru ssr) și ajungi într-un deadlock. O *singură* cerere poate fi activă la un moment dat pe aceeași stivă, noua cerere fiind adăugată de kernel într-o listă, până când cea curentă se termină. Cum am zis anterior, soluția e să apelezi submit din interiorul unui kernel thread. </p>

<p dir="ltr">Costash. </p>