[pso] [tema3] Construirea unui bio pt CRC

Octavian Voicu octavian.voicu at gmail.com
Sun May 17 16:02:57 EEST 2009


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
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://cursuri.cs.pub.ro/pipermail/pso/attachments/20090517/fc27c5fc/attachment.htm>


More information about the pso mailing list