[pso] Tema 3 Linux - elv_next_request

Octavian Purdila pso@cursuri.cs.pub.ro
Sat, 16 Apr 2005 19:22:58 +0300


On Saturday 16 April 2005 03:53 pm, Adrian - Razvan Deaconescu wrote:
> Salut,
>
> am o problema la functia elv_next_request; aceasta ar trebui sa
> extraga din coada de cereri o cerere care sa fie prelucrata.
> 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?
>

Pe scurt, aveti doua alternative:

1) folositi blkdev_dequeue_request luati requestul si il puneti in coada la 
kernel thread si parcurgeti apoi manual requestul (la nivel de bio)

2) preluati cererile in rutina de request (device, sector, operatie, nr de 
sectoare) si le puneti in coada la kernel thread

tavi