- 論壇徽章:
- 0
|
本帖最后由 tacoe 于 2011-12-12 19:53 編輯
如果可以將多個bvec組織到一個sg 段里描述。一個sg里指向一個page.一般一個page 的大小為4096
131 bvprv = NULL;
132 sg = NULL;
133 rq_for_each_segment(bvec, rq, iter) {
134 int nbytes = bvec->bv_len;
135
136 if (bvprv && cluster) {
137 if (sg->length + nbytes > queue_max_segment_size(q)) --〉沒有超出物理上限制的段大小,queue_max_segment_size(q)這個值的默認值為65536.
138 goto new_segment;
139
140 if (!BIOVEC_PHYS_MERGEABLE(bvprv, bvec)) 。滴锢砩葏^(qū)上連續(xù)
141 goto new_segment;
142 if (!BIOVEC_SEG_BOUNDARY(q, bvprv, bvec))。礲=no boundary
143 goto new_segment;
144
145 sg->length += nbytes; 。怠≈苯影言黾铀拈L度。
146 } else {
147 new_segment:
上面藍色中是不是還缺少一個限制條件:
if (sg->length+nbytes > 4096)
goto new_segment;
PS.這里實現得很優(yōu)美。 |
|