函数逻辑报告 | 
Source Code:fs\pipe.c | 
Create Date:2022-07-29 10:34:17 | 
| Last Modify:2020-03-12 14:18:49 | Copyright©Brick | 
| 首页 | 函数Tree | 
| 注解内核,赢得工具 | 下载SCCT | English | 
函数名称:pipe_write
函数原型:static ssize_t pipe_write(struct kiocb *iocb, struct iov_iter *from)
返回类型:ssize_t
参数:
| 类型 | 参数 | 名称 | 
|---|---|---|
| struct kiocb * | iocb | |
| struct iov_iter * | from | 
| 436 | ret等于0 | 
| 437 | total_len等于iov_iter_count(from) | 
| 439 | bool was_empty = false | 
| 442 | 如果此条件成立可能性小(为编译器优化)(total_len == 0)则返回:0 | 
| 445 | __pipe_lock(pipe) | 
| 447 | 如果非readers则 | 
| 465 | was_empty等于pipe_empty - Return true if the pipe is empty*@head: The pipe ring head pointer*@tail: The pipe ring tail pointer | 
| 472 | 如果pipe_buf_can_merge(buf)且offset加chars小于等于PAGE_SIZE则 | 
| 489 | 循环 | 
| 490 | 如果非readers则 | 
| 504 | 如果非page则 | 
| 505 | page等于alloc_page(GFP_HIGHUSER | __GFP_ACCOUNT) | 
| 506 | 如果此条件成立可能性小(为编译器优化)(!page)则 | 
| 518 | spin_lock_irq( & lock) | 
| 522 | spin_unlock_irq( & lock) | 
| 523 | 继续下一循环 | 
| 527 | spin_unlock_irq( & lock) | 
| 533 | offset等于0 | 
| 534 | len等于0 | 
| 535 | flags等于0 | 
| 536 | 如果is_packetized(filp)则 | 
| 537 | ops等于packet_pipe_buf_ops | 
| 538 | flags等于ad() as a packet | 
| 540 | tmp_page = NULL | 
| 542 | copied等于copy_page_from_iter(page, 0, PAGE_SIZE, from) | 
| 543 | 如果此条件成立可能性小(为编译器优化)(copied < PAGE_SIZE && iov_iter_count(from))则 | 
| 549 | offset等于0 | 
| 552 | 如果非iov_iter_count(from)则退出 | 
| 560 | 如果f_flags按位与O_NONBLOCK则 | 
| 565 | 如果signal_pending(当前进程)则 | 
| 568 | 退出 | 
| 577 | __pipe_unlock(pipe) | 
| 578 | 如果was_empty则 | 
| 583 | __pipe_lock(pipe) | 
| 586 | out : | 
| 587 | __pipe_unlock(pipe) | 
| 598 | 如果was_empty则 | 
| 602 | 如果ret大于0且sb_start_write_trylock(i_sb)则 | 
| 608 | 返回:ret | 
| 源代码转换工具 开放的插件接口  | X | 
|---|---|
| 支持:c/c++/esqlc/java Oracle/Informix/Mysql 插件可实现:逻辑报告 代码生成和批量转换代码  |