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

Razvan Deaconescu razvan.deaconescu at cs.pub.ro
Tue Apr 23 08:31:53 EEST 2013


Liviu Ioan <liviu.andrei.ioan at gmail.com> writes:
>> Cu observația că bio_cur_bytes se aplică pe bio și pe segmentul curent,
>> indicat de bio->bi_idx. Dacă bio->bi_idx nu este actualizat, atunci
>> bio_cur_bytes va oferi constant dimensiunea primului segment.
>
>> Și aceeași observație ar trebui aplicată și pe exemplul din LDD. Acolo
>> foloseau bio_cur_sectors; dar, nefiind actualizat bio->bi_idx, nu cred
>> că folosea la ceva, tot timpul adunau cu numărul de sectoare ale
>> primului segment.
>
> Brr, am înțeles - la o folosire bio_for_each_segment(bvec, bio, i), nu
> se modifică bio, ci bvec și i.
> Să înțeleg că linia size_t len = bvec->bv_len din noua rezolvare
> clarifică lucrurile.

Da.

>> Am actualizat soluția pentru 1-2-3-ram-disk/, laboratorul 8. Liviu,
> Mai am o întrebare.
> Dacă în funcția my_block_request nu prelucrăm la nivel de bio, ci
> folosim direct
> my_block_transfer(dev, blk_rq_pos(rq), blk_rq_cur_bytes(rq),
> rq->buffer, rq_data_dir(rq)),
> nu vom transfera un singur segment?
>
> Observ că după apelul my_bloc_request se apelează __blk_end_request_all(rq, 0).
> Asta nu înseamnă că semnalăm terminarea prelucrării pentru request-ul curent?

Ai dreptate. Acum, ținând cont de faptul că avem un singur bio per
request și un singur segment per bio, deci merge.

O să lăsăm așa și o să ținem cont pentru la anul. Partea asta nu e
foarte bine făcută și nu cred că e un mod uzual de a prelucra datele așa
cum facem noi în laborator, după cum a sugerat și Vlad.

> Eu cred că ar tb să folosim blk_end_request, care întoarce:
>     %false - we are done with this request
>     %true  - still buffers pending for this request
> În cazul __blk_end_request_all: "Completely finish @rq".

O să mă documentezi mai atent aici. Oricum trebuie folosite functiile
__blk_end_request... pentru că ai lock-ul luat.

Răzvan


More information about the so2 mailing list