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