| Function report | 
| Source Code: block\bio.c | Create Date:2022-07-28 16:55:53 | 
| Last Modify:2020-03-17 23:13:58 | Copyright©Brick | 
| home page | Tree | 
| Annotation kernel can get tool activity | Download SCCT | Chinese | 
Name:_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
Proto:struct bio *bio_copy_user_iov(struct request_queue *q, struct rq_map_data *map_data, struct iov_iter *iter, gfp_t gfp_mask)
Type:struct bio
Parameter:
| Type | Parameter | Name | 
|---|---|---|
| struct request_queue * | q | |
| struct rq_map_data * | map_data | |
| struct iov_iter * | iter | |
| gfp_t | gfp_mask | 
| 1281 | i = 0 | 
| 1284 | offset = If map_data Then offset_in_page(offset) Else 0 | 
| 1286 | bmd = bio_alloc_map_data(iter, gfp_mask) | 
| 1295 | is_our_pages = If map_data Then 0 Else 1 | 
| 1297 | nr_pages = DIV_ROUND_UP(offset + len, PAGE_SIZE) | 
| 1298 | If nr_pages > BIO_MAX_PAGES Then nr_pages = BIO_MAX_PAGES | 
| 1302 | bio = bio_kmalloc(gfp_mask, nr_pages) | 
| 1306 | ret = 0 | 
| 1308 | If map_data Then | 
| 1309 | nr_pages = 1 << page_order | 
| 1320 | If map_data Then | 
| 1321 | If i == nr_entries * nr_pages Then | 
| 1329 | i++ | 
| 1330 | Else | 
| 1332 | If Not page Then | 
| 1339 | If Not map_data Then __free_page(page) | 
| 1341 | Break | 
| 1345 | offset = 0 | 
| 1351 | If map_data Then offset += residual I/O count | 
| 1357 | If iov_iter_rw(iter) == WRITE && ( Not map_data || Not null_mapped ) || map_data && from_user Then | 
| 1362 | Else | 
| 1363 | If is_our_pages Then zero_fill_bio(bio) | 
| 1365 | iov_iter_advance(iter, residual I/O count ) | 
| 1368 | bi_private = bmd | 
| 1369 | If map_data && null_mapped Then bio_set_flag(bio, BIO_NULL_MAPPED) | 
| 1371 | Return bio | 
| 1372 | cleanup : | 
| 1373 | If Not map_data Then bio_free_pages(bio) | 
| 1376 | out_bmd : | 
| Name | Describe | 
|---|---|
| __blk_rq_map_user_iov | 
| Source code conversion tool public plug-in interface | X | 
|---|---|
| Support c/c++/esqlc/java Oracle/Informix/Mysql Plug-in can realize: logical Report Code generation and batch code conversion |