函数逻辑报告 |
Source Code:fs\aio.c |
Create Date:2022-07-29 10:53:23 |
Last Modify:2020-03-12 14:18:49 | Copyright©Brick |
首页 | 函数Tree |
注解内核,赢得工具 | 下载SCCT | English |
函数名称:x_alloc* Allocates and initializes an ioctx. Returns an ERR_PTR if it failed.
函数原型:static struct kioctx *ioctx_alloc(unsigned nr_events)
返回类型:struct kioctx
参数:
类型 | 参数 | 名称 |
---|---|---|
unsigned | nr_events |
722 | nr_events等于两数取大(nr_events, num_possible_cpus() * 4) |
723 | nr_events乘等于2 |
740 | spin_lock_init( & ctx_lock) |
741 | spin_lock_init( & completion_lock) |
742 | mutex_init - initialize the mutex*@mutex: the mutex to be initialized* Initialize the mutex to unlocked state.* It is not allowed to initialize an already locked mutex.( & ring_lock) |
745 | mutex_lock( & ring_lock) |
746 | init_waitqueue_head( & wait) |
748 | 初始化链表头 |
756 | cpu等于alloc_percpu(structkioctx_cpu) |
760 | err等于aio_setup_ring(ctx, nr_events) |
765 | * For percpu reqs_available, number of slots we move to/from global * counter at a time:等于 Size of ringbuffer, in units of struct io_event 减1的差除num_possible_cpus()乘4 |
766 | 如果* For percpu reqs_available, number of slots we move to/from global * counter at a time:小于1则* For percpu reqs_available, number of slots we move to/from global * counter at a time:等于1 |
770 | 加自旋锁 |
778 | 自旋锁解锁 |
780 | percpu计数引用增 |
781 | percpu计数引用增 |
783 | err等于ioctx_add_table(ctx, mm) |
784 | 如果err则转到:err_cleanup |
790 | pr_debug("allocated ioctx %p[%ld]: mm=%p mask=0x%x\n", ctx, user_id, mm, Size of ringbuffer, in units of struct io_event ) |
792 | 返回:ctx |
794 | err_cleanup : |
796 | err_ctx : |
797 | atomic_set( & dead, 1) |
800 | aio_free_ring(ctx) |
801 | err : |
803 | 释放内存 |
806 | kmem_cache_free(kioctx_cachep, ctx) |
808 | 返回:错误号 |
名称 | 描述 |
---|---|
SYSCALL_DEFINE2 | sys_io_setup:* Create an aio_context capable of receiving at least nr_events |
COMPAT_SYSCALL_DEFINE2 |
源代码转换工具 开放的插件接口 | X |
---|---|
支持:c/c++/esqlc/java Oracle/Informix/Mysql 插件可实现:逻辑报告 代码生成和批量转换代码 |