[so2] [Tema 3] Parcurgerea segmentelor dintr-un bio

Octavian Crintea octavian.crintea at gmail.com
Wed Apr 22 01:26:42 EEST 2015


Salutare!

În laborator ni s-a sugerat folosirea următorului macro pentru a itera
prin vectorul de segmente (bv_io_vec) al structurii bio:

#define bio_for_each_segment(bvl, bio, i)                               \
         for (i = (bio)->bi_idx;
             \
              bvl = bio_iovec_idx((bio), (i)), i < (bio)->bi_vcnt;        \
              i++)

Observ că structura bio nu se modifică, doar bvec și i fiind
actualizați la fiecare iterație.  În aceste condiții cum este posibil
ca funcția bio_cur_bytes(bio) să întoarcă numarul de octeți din pagina
curentă dacă nu primește nicio referință la acea pagină (i sau bvec,
de exemplu)?

Funcția de mapare __bio_kmap_atomic primește atât pointer la structura
bio cât și indexul curent i, ceea ce justifică faptul că pentru a avea
acces la ceva din pagina curentă e nevoie sa fie pasat i sau bvec sau
să fie modificată corespunzător strcutura bio la fiecare iterație.
Dacă nu ar fi nevoie de i sau bvec atunci ar putea exista o funcție de
mapare a paginii curente care să primească doar bio și atât.

Mulțumesc,

Octavian


More information about the so2 mailing list