[pso] Tema 3 Linux - elv_next_request

Andrei Costin pso@cursuri.cs.pub.ro
Sun, 17 Apr 2005 05:31:09 -0700 (PDT)


--0-1137204552-1113741069=:66386
Content-Type: text/plain; charset=us-ascii


> Problema este ca indiferent ce fac cu cererea astfel extrasa nimic nu
> merge cum trebuie; daca nu fac in cadrul rutinei de tratare a cererii
> nimic cu ea, runtina o citeste la infinit din coada de cereri
> (bucleaza in gol).
> Daca ii dau end_request nu este bine pentru ca cererea ar trebui
> prelucrata din kernel thread.
> Solutia normala este folosirea blkdev_dequeue_request care ar trebui
> sa extraga cererea din coada de cereri. Apoi aceasta ar fi pusa intr-o
> coada pentru prelucrare de catre thread si lucrurile ar trebui sa
> continue in mod asemanator. Problema este ca rutina de tratare a
> cererilor se blocheaza la elv_next_request. Adica dupa un
> blkdev_dequeue_request se blocheaza acolo si nu se mai intampla nimic.
>
> Stie cineva care este problema? Trebuie sa trecem sa folosim
> structurii bio sau sa prelucram manual coada de cereri?
>

Salut.

Solutia cel putin care mi se pare ok este in cadrul functiei de request sa vezi daca requestul e ptr devicul tau bla bla..., si daca da, sa faci un wake_up(&wait_q), wait_q fiind coada de asteptare ptr kthread. Daca structura asociata devicului are design bun, la trezire kthreadul preia din structura devicului pasata lui ca arg, obtine request_queue al devicului corespunzator, si bucleaza un while(!list_empty(req_q->queue_head)) prelucrand fiecare request.

Astfel respecti cerintele temei ca prelucrarile trebuie sa se faca din kthread, si nu te complici cu bio (de fapt cred ca merita sa te complici cu bio - ca tot inveti ceva, dar depinde de fiecare acum :) )

Daca ce am zis e gresit, pls corectati.

Spor si bafta.

Andrei


		
---------------------------------
Do you Yahoo!?
 Plan great trips with Yahoo! Travel: Now over 17,000 guides!
--0-1137204552-1113741069=:66386
Content-Type: text/html; charset=us-ascii

<DIV>
<BLOCKQUOTE class=replbq style="PADDING-LEFT: 5px; MARGIN-LEFT: 5px; BORDER-LEFT: #1010ff 2px solid">
<P>&gt; Problema este ca indiferent ce fac cu cererea astfel extrasa nimic nu<BR>&gt; merge cum trebuie; daca nu fac in cadrul rutinei de tratare a cererii<BR>&gt; nimic cu ea, runtina o citeste la infinit din coada de cereri<BR>&gt; (bucleaza in gol).<BR>&gt; Daca ii dau end_request nu este bine pentru ca cererea ar trebui<BR>&gt; prelucrata din kernel thread.<BR>&gt; Solutia normala este folosirea blkdev_dequeue_request care ar trebui<BR>&gt; sa extraga cererea din coada de cereri. Apoi aceasta ar fi pusa intr-o<BR>&gt; coada pentru prelucrare de catre thread si lucrurile ar trebui sa<BR>&gt; continue in mod asemanator. Problema este ca rutina de tratare a<BR>&gt; cererilor se blocheaza la elv_next_request. Adica dupa un<BR>&gt; blkdev_dequeue_request se blocheaza acolo si nu se mai intampla nimic.<BR>&gt;<BR>&gt; Stie cineva care este problema? Trebuie sa trecem sa folosim<BR>&gt; structurii bio sau sa prelucram manual coada de cereri?<BR>&gt;<BR><BR>Salut.</P>
<P>Solutia cel putin care mi se pare ok este in cadrul functiei de request sa vezi daca requestul&nbsp;e ptr devicul tau bla bla..., si daca da, sa faci un wake_up(&amp;wait_q), wait_q fiind coada de asteptare ptr kthread. Daca structura asociata devicului are design bun, la trezire kthreadul preia din structura devicului&nbsp;pasata lui ca arg, obtine request_queue al devicului corespunzator, si bucleaza un while(!list_empty(req_q-&gt;queue_head)) prelucrand fiecare request.</P>
<P>Astfel respecti cerintele temei ca prelucrarile trebuie sa se faca din kthread, si nu te complici cu bio (de fapt cred ca merita sa te complici cu bio - ca tot inveti ceva, dar depinde de fiecare acum :) )</P>
<P>Daca ce am zis e gresit, pls corectati.</P>
<P>Spor si bafta.</P>
<P>Andrei</P></BLOCKQUOTE></DIV><p>
		<hr size=1>Do you Yahoo!?<br> 
Plan great trips with <a href="http://us.lrd.yahoo.com/_ylc=X3oDMTFmZ2htMTlyBF9TAzMyOTc1MDIEX3MDODYyNzYxNwRwb3MDMQRzZWMDbWFpbARzbGsDZm9vdGVy/SIG=10tesb5j9/**http%3a//travel.yahoo.com/">Yahoo! Travel</a>: Now <a href="http://us.lrd.yahoo.com/_ylc=X3oDMTFmMnFhajhhBF9TAzMyOTc1MDIEX3MDODYyNzYxNwRwb3MDMgRzZWMDbWFpbARzbGsDZm9vdGVy/SIG=12jqk5n45/**http%3a//travel.yahoo.com/p-travelguide-191500002-destination_guides_vacations-i">over 17,000 guides!</a>
--0-1137204552-1113741069=:66386--