[pso] [Tema3][Linux] Intrebare bio

Macicas Teodor teodor.macicas at cti.pub.ro
Fri May 7 13:07:23 EEST 2010


Multumesc pentru raspuns, Razvan.
Acu folosesc workqueues pentru submitarea unui bio dintr-un kernel 
thread. Precizez ca vrea sa fac functional doar un write simple test.

In functia unde primesc un bio si-l clonez, campul bio->bi_rw este 0 ( 
READ ) desi in test eu fac write. De ce se intampla asta ?
Mai mult, daca fac submit din kernel thread la bio-ul clonat, primesc un 
kernel oops [0000] din procesul events/0 .

Any ideas?
Multumesc.
Teodor

Razvan Deaconescu wrote:
> On Thu, 2010-05-06 at 16:18 +0300, Macicas Teodor wrote:
>   
>> Salut,
>>
>> Am o nelamurire. Incerc sa fac o chestie simpla si nu inteleg ce gresesc.
>> In functia care primeste bio-urile, am folosit open_bdev_exclusive()
>>     
>
> Foloseste open_bdev_exclusive in open sau in module_init. Nu-l vei putea
> folosi in functia care primeste bio-urile (vezi mai jos).
>
>   
>> pentru a deschide discul fizic. Am clonat un bio ( bio_clone() ) si am
>> modificat campurile bi_bdev, bi_private si bi_end_io.
>> Am dat bio_submit() si wait_for_completion(). Se pare ca nu intra in
>> bi_complete() niciodata, iar masina virtuala se blocheaza.
>>     
>
> Nu se pot apela, la un moment dat, doua instante ale functiei
> bio_submit. In functia care primeste bio-ul deja te afli intr-una din
> ele. Acest lucru este precizat in enunt, cu propunerea folosirii
> workqueues:
> ---
> * o singură funcție de prelucrare a cererilor pentru dispozitive de tip
> bloc poate fi activă la un moment dat în cadrul unei stive de apeluri
> (mai multe detalii aici); va trebui să submiteți cererile pentru
> dispozitivele fizice dintr-un kernel thread; se recomandă folosirea
> folosirea workqueues;
> ---
>
> Razvan
>
> Razvan
>
> _______________________________________________
> http://elf.cs.pub.ro/so2/wiki/resurse/lista-discutii
>   


-- 
Teodor MACICAS






More information about the pso mailing list