[pso] [Tema 3][lin] Diverse intrebari

Razvan Deaconescu razvan.deaconescu at cs.pub.ro
Mon Apr 25 16:29:53 EEST 2011


On 04/25/2011 04:01 PM, Tiberiu Popa wrote:
> Salut!
> 
> Am si eu cateva intrebari:
> 
> 1. Ce buffere invalideaza invalidate_bdev (cumva buffer_head ca in ultimele
> laboratoare)? Si daca tot trebuie sa apelez sync_blockdev si invalidate_bdev
> impreuna, trebuie s-o fac atomic? Ma gandesc ca daca s-ar procesa cereri de
> read/write intre cele doua ar fi ca si cum n-am fi apelat sync.

Am specificat aici snippet-ul recomandat pentru funcția de sync[3].

> 2. In functia make_request [1] (apelata de md_make_request, care este un
> make_request_fn), pe ramura rw == READ se apeleaza generic_make_request pe
> un bio clonat. Cum este posibil (generic_make_request va apela eventual un
> alt make_request_fn)?

Cum este posibil ... ce?

> Am incercat si in tema mea, pe ramura cu READ merge sa
> dau submit_bio, pe cealalta se blocheaza chiar si cu un singur submit_bio
> (dar merge cu waitqueues).

Din câte știu eu, din ce reiese din cod[4] și după cum e precizat și în
enunț[5], nu ar trebui să poți avea două funcții de cereri (request_fn)
active la un moment dat (indiferent de tipul cererii). Voi investiga în
acest sens.

Oricum ar fi, soluția corectă este să transmiți bio-ul spre prelucrare
în workqueue și să dai return în funcția de prelucrare a cererii
(request_fn).

> 3. Din cate am observat, functia mea de make_request primeste doar bio-uri
> de urmatorul tip: bi_sector - divizibil cu 8, bi_vcnt == 1, bi_idx == 0,
> bio_sectors(bio) == 8. Din cate vad, imi da requesturi de 4K (fix o pagina).
> Pot primi si requesturi cu bi_vcnt > 1?

Conform definiției structurilor bio și request este posibil. Din ceea ce
am testat eu pentru această temă, vei primi tot timpul bio-uri care sunt
"backed" de o pagină (și, astfel, de 8 sectoare = PAGE_SIZE (4k) /
KERNEL_SECTOR_SIZE (512B)).

> Campul bv_len din struct bio_vec e
> mereu divizibil cu 512 (sau pot sa primesc de exemplu cate un byte din 512
> pagini diferite)?

E mereu divizibil cu KERNEL_SECTOR_SIZE, din cunoștințele mele.

Răzvan

> [1] http://lxr.linux.no/linux+v2.6.38/drivers/md/raid1.c#L763
> [2] http://lxr.linux.no/linux+v2.6.38/drivers/md/md.c#L284
[3]
http://article.gmane.org/gmane.education.region.romania.operating-systems-design/4947
[4] http://lxr.linux.no/linux+v2.6.38/block/blk-core.c#L1568
[5] http://elf.cs.pub.ro/so2/wiki/teme/tema3#precizari-linux


More information about the pso mailing list