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