[pso] [tema3] Construirea unui bio pt CRC

Bogdan Tenea tenea.bogdan at gmail.com
Sun May 17 16:17:43 EEST 2009


Multumesc mult pentru raspuns. Problema era intradevar ca setam manual
bi_vcnt (ramasesem cu impresia din laborator ca asa ar trebui facut, dar
daca bio_add_page ai drepate, il incrementeaza singur). Am modificat si
offsetul (credeam ca e offestul in bytes ca venea imediat dupa lungimea in
bytes). Oricum vad ca testele nu trimit cereri mai mare de 8 sectoare, care
se traduc in 32 de octeti de crc si care sigur incap pe o pagina, dar mai
bine sa fie corect :)

2009/5/17 Octavian Voicu <octavian.voicu at gmail.com>

> On Sun, May 17, 2009 at 3:27 PM, Bogdan Tenea <tenea.bogdan at gmail.com>wrote:
>
>>     bio_crc->bi_bdev = dev;
>>     bio_crc->bi_sector = start_sector;
>>     init_completion(event);
>>     bio_crc->bi_private = event;
>>     bio_crc->bi_end_io = my_complete;
>>     bio_crc->bi_rw = DIRECTION_READ;
>>     bio_crc->bi_vcnt = num_pages;
>>     bio_crc->bi_idx = 0;
>>
>>     for(i=0; i<num_pages-1; i++)
>>         bio_add_page(bio_crc, alloc_page(GFP_NOIO), PAGE_SIZE, 0);
>>     bio_add_page(bio_crc, alloc_page(GFP_NOIO), sectors_in_last_page *
>> MY_SECTOR_SIZE, 0);
>>
>
> Ce gresesti e ca nu setezi offset-ul cand apelezi bio_add_page (ultimul
> parametru, pe care l-ai pus 0);
> Incearca asa (i in loc de zero pentru ambele apleuri; la iesirea din for
> i-ul o sa aiba valoarea potrivita):
>
>     for(i=0; i<num_pages-1; i++)
>>         bio_add_page(bio_crc, alloc_page(GFP_NOIO), PAGE_SIZE, *i*);
>>     bio_add_page(bio_crc, alloc_page(GFP_NOIO), sectors_in_last_page *
>> MY_SECTOR_SIZE, *i*);
>>
>
> Mai e un bug de care e mai greu sa-ti dai seama. Daca te uiti in codul din
> laborator, bi_vcnt era setat in structura *dupa* bio_add_page. Problema e ca
> bio_add_page incrementeaza automat bi_vcnt cand adauga o pagina (studiaza
> sursa din kernel). Daca il setezi inca o data dupa adaugarea paginilor (cum
> e in lab) probabil nu se strica nimic, cu toate ca nu vad rostul. Dar daca
> il setezi inainte la num_pages si apelezi bio_add_page de num_pages ori, la
> sfarsit o sa aiba valoarea dubla fata de cea corecta. Cel mai bine e sa nu-l
> setezi deloc (default e 0) sau sa-l setezi pe zero inainte de
> bio_add_page-uri.
>
> DIRECTION_READ nu l-am gasit in headere, presupun ca ti l-ai definit tu.
> Poti sa folosesti define-urile READ si WRITE (care au valorile 0 respectiv
> 1).
>
>
> --
> Octavian Voicu
>
> _______________________________________________
> pso mailing list
> pso at cursuri.cs.pub.ro
> http://cursuri.cs.pub.ro/cgi-bin/mailman/listinfo/pso
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://cursuri.cs.pub.ro/pipermail/pso/attachments/20090517/54420aa9/attachment.htm>


More information about the pso mailing list