[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