| 函数逻辑报告 | 
| Source Code: block\bio.c | Create Date:2022-07-27 18:31:06 | 
| Last Modify:2020-03-17 23:13:58 | Copyright©Brick | 
| 首页 | 函数Tree | 
| 注解内核,赢得工具 | 下载SCCT | English | 
函数名称:_copy_user_iov - copy user data to bio*@q: destination block queue*@map_data: pointer to the rq_map_data holding pages (if necessary)*@iter: iovec iterator*@gfp_mask: memory allocation flags* Prepares and returns a bio for indirect user io, bouncing data
函数原型:struct bio *bio_copy_user_iov(struct request_queue *q, struct rq_map_data *map_data, struct iov_iter *iter, gfp_t gfp_mask)
返回类型:struct bio
参数:
| 类型 | 参数 | 名称 | 
|---|---|---|
| struct request_queue * | q | |
| struct rq_map_data * | map_data | |
| struct iov_iter * | iter | |
| gfp_t | gfp_mask | 
| 1281 | i等于0 | 
| 1284 | offset等于如果map_data则offset_in_page(offset)否则0 | 
| 1286 | bmd等于bio_alloc_map_data(iter, gfp_mask) | 
| 1295 | is_our_pages等于如果map_data则0否则1 | 
| 1297 | nr_pages等于DIV_ROUND_UP(offset + len, PAGE_SIZE) | 
| 1298 | 如果nr_pages大于BIO_MAX_PAGES则nr_pages等于BIO_MAX_PAGES | 
| 1302 | bio等于bio_kmalloc(gfp_mask, nr_pages) | 
| 1306 | ret等于0 | 
| 1308 | 如果map_data则 | 
| 1309 | nr_pages等于1左移page_order位 | 
| 1320 | 如果map_data则 | 
| 1321 | 如果i恒等于nr_entries乘nr_pages则 | 
| 1329 | i自加 | 
| 1330 | 否则 | 
| 1332 | 如果非page则 | 
| 1339 | 如果非map_data则__free_page(page) | 
| 1341 | 退出 | 
| 1345 | offset等于0 | 
| 1351 | 如果map_data则offset加等于 residual I/O count | 
| 1357 | 如果iov_iter_rw(iter)恒等于WRITE且非map_data或非null_mapped的值或map_data且from_user则 | 
| 1362 | 否则 | 
| 1363 | 如果is_our_pages则zero_fill_bio(bio) | 
| 1365 | iov_iter_advance(iter, residual I/O count ) | 
| 1368 | bi_private等于bmd | 
| 1369 | 如果map_data且null_mapped则bio_set_flag(bio, BIO_NULL_MAPPED) | 
| 1371 | 返回:bio | 
| 1372 | cleanup : | 
| 1373 | 如果非map_data则bio_free_pages(bio) | 
| 1376 | out_bmd : | 
| 1377 | 释放内存 | 
| 1378 | 返回:错误号 | 
| 名称 | 描述 | 
|---|---|
| __blk_rq_map_user_iov | 
| 源代码转换工具 开放的插件接口 | X | 
|---|---|
| 支持:c/c++/esqlc/java Oracle/Informix/Mysql 插件可实现:逻辑报告 代码生成和批量转换代码 |