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

Liviu Ioan liviu.andrei.ioan at gmail.com
Mon Apr 22 00:05:50 EEST 2013


> 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.


> 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?

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".

Liviu


More information about the so2 mailing list