函数逻辑报告 |
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 插件可实现:逻辑报告 代码生成和批量转换代码 |