[so2] [SO2] [Tema3] [Linux] Nelămuriri - CRC, locking, checker

Razvan Deaconescu razvan.deaconescu at cs.pub.ro
Sun Apr 21 19:19:36 EEST 2013


Razvan Deaconescu <razvan.deaconescu at cs.pub.ro> writes:
> Liviu Ioan <liviu.andrei.ioan at gmail.com> writes:
>> Ce nu înțeleg eu: de ce într-un bio toate segmentele sunt scrise în
>> memoria dispozitivului la același offset?
>> Eu am crezut că un bio conține o serie de segmente care încep la bi_sector.
>> Concret: primul segment se referă la offset-ul bi_sector, al doilea
>> segment are ca offset bi_sector + dimensiunea primului segment etc.
>
>> Mai mult, în Linux Device Drivers, ch16.pdf, pag 25 din 33, există o
>> funcție similară(sbull_xfer_bio):
>> sector_t sector = bio->bi_sector;
>> bio_for_each_segment(bvec, bio, i) {
>>        char *buffer = __bio_kmap_atomic(bio, i, KM_USER0);
>>         sbull_transfer(dev, sector, bio_cur_sectors(bio), buffer,
>> bio_data_dir(bio) = = WRITE);
>>         sector += bio_cur_sectors(bio);
>>         __bio_kunmap_atomic(bio, KM_USER0);
>> }
>> Partea interesantă: sector += bio_cur_sectors(bio). Aici, fiecare
>> segment corespunde unui deplasament diferit.
>
> Ai dreptate. Este o scăpare. Trebuia adunat la variabila sector
> offsetul. Probabil că sosesc doar bio-uri cu un singur segment și de
> aceea merge. O să revin cu o corectare.

Am actualizat soluția pentru 1-2-3-ram-disk/, laboratorul 8. Liviu,
Vlad, să aruncați și voi o privire să vedeți dacă e OK.

Am adăugat niște print-uri. Se transmit dispozitivului/driverului câte
un request (într-o buclă while), câte un bio per request și câte un
segment per bio. Probabil că e nevoie de ceva mai complicat ca să se
transmită mai multe.

Răzvan


More information about the so2 mailing list