[so2] [Tema3] submit_bio/wait_for_completion

Costash costashsrc at gmail.com
Sat May 3 10:03:11 EEST 2014


On May 3, 2014 9:29 AM, "Mihail Dunaev" <ddryhten at gmail.com> wrote:
>
> Hello,
>
> Dacă aloc o nouă structură bio în handler-ul meu de request-uri
> (pentru /dev/ssr), o completez şi îi dau mai departe submit_bio
> către sda, nu mi se apelează funcţia din bi_end_io (practic mi se
> blochează în “wait_for_completion”). Dacă fac fix acelaşi lucru în
> funcţia de init, totul merge perfect. Care ar putea să fie problema ?
> Mi-a scăpat mie ceva ? Codul este acelaşi cu cel din laborator.

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.

Costash.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://cursuri.cs.pub.ro/pipermail/so2/attachments/20140503/6bca524e/attachment.html>


More information about the so2 mailing list