[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