亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費注冊 查看新帖 |

Chinaunix

  平臺 論壇 博客 文庫
最近訪問板塊 發(fā)新帖
查看: 5067 | 回復: 2
打印 上一主題 下一主題

blk_rq_map_sg 這個函數的疑問。 [復制鏈接]

論壇徽章:
0
跳轉到指定樓層
1 [收藏(0)] [報告]
發(fā)表于 2011-12-12 19:51 |只看該作者 |倒序瀏覽
本帖最后由 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)美。

論壇徽章:
1
拜羊年徽章
日期:2015-03-03 16:15:43
2 [報告]
發(fā)表于 2011-12-13 13:30 |只看該作者
回復 1# tacoe

993 static inline unsigned int queue_max_segment_size(struct request_queue *q)
994 {
995         return q->limits.max_segment_size;
996 }

沒必要,這里是要放到request_queue 里,不是放到一個page里;只有大小收集到超過q->limits.max_segment_size才轉入一個新的segment

論壇徽章:
0
3 [報告]
發(fā)表于 2011-12-13 18:54 |只看該作者
回復 2# linuxfellow


原來是我搞錯了,
if (!BIOVEC_PHYS_MERGEABLE(bvprv, bvec)) 。滴锢砩葏^(qū)上連續(xù) 
                            ~~~~~~~~~ 這里不是指物理扇區(qū)連續(xù)而指兩個bvec 的page是連續(xù)的。
這樣才不會越界。
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(guī)則 發(fā)表回復

  

北京盛拓優(yōu)訊信息技術有限公司. 版權所有 京ICP備16024965號-6 北京市公安局海淀分局網監(jiān)中心備案編號:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報專區(qū)
中國互聯網協會會員  聯系我們:huangweiwei@itpub.net
感謝所有關心和支持過ChinaUnix的朋友們 轉載本站內容請注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP