函数逻辑报告

Linux Kernel

v5.5.9

Brick Technologies Co., Ltd

Source Code:fs\io_uring.c Create Date:2022-07-29 10:55:13
Last Modify:2020-03-12 14:18:49 Copyright©Brick
首页 函数Tree
注解内核,赢得工具下载SCCTEnglish

函数名称:io_sqe_buffer_register

函数原型:static int io_sqe_buffer_register(struct io_ring_ctx *ctx, void __user *arg, unsigned nr_args)

返回类型:int

参数:

类型参数名称
struct io_ring_ctx *ctx
void __user *arg
unsignednr_args
4765  struct vm_area_struct * * vmas = NULL
4766  struct page * * pages = NULL
4767  got_pages等于0
4768  ret等于负EINVAL
4770  如果user_bufs则返回:负EBUSY
4772  如果非nr_argsnr_args大于UIO_MAXIOV则返回:负EINVAL
4775  user_bufs等于分配数组内存并置零
4777  如果非user_bufs则返回:负ENOMEM
4780 i小于nr_args循环
4781  imu等于user_bufs[i]
4787  ret等于io_copy_iov(ctx, & iov, arg, i)
4788  如果ret则转到:err
4796  ret等于负EFAULT
4797  如果非 BSD uses caddr_t (1003.1g requires void *) 或非 Must be size_t (1003.1g) 则转到:err
4801  如果 Must be size_t (1003.1g) 大于SZ_1G则转到:err
4804  ubuf等于 BSD uses caddr_t (1003.1g requires void *)
4805  end等于ubuf Must be size_t (1003.1g) PAGE_SIZE减1右移PAGE_SHIFT determines the page size
4806  start等于ubuf右移PAGE_SHIFT determines the page size
4807  nr_pages等于endstart
4809  如果account_mem
4811  如果ret则转到:err
4815  ret等于0
4816  如果非pagesnr_pages大于got_pages
4817  释放内存
4818  释放内存
4819  pages等于kvmalloc_array(nr_pages, *的长度, GFP_KERNEL)
4821  vmas等于kvmalloc_array(nr_pages, *的长度, GFP_KERNEL)
4824  如果非pages或非vmas
4825  ret等于负ENOMEM
4828  转到:err
4830  got_pages等于nr_pages
4833  bvec等于kvmalloc_array(nr_pages, sizeof(structbio_vec), GFP_KERNEL)
4835  ret等于负ENOMEM
4836  如果非bvec
4839  转到:err
4842  ret等于0
4843  lock for reading
4844  pret等于This is the same as get_user_pages_remote(), just with a* less-flexible calling convention where we assume that the task* and mm being operated on are the current task's and don't allow* passing of a locked parameter. We also obviously don't pass
4847  如果pret恒等于nr_pages
4849 j小于nr_pages循环
4858  否则
4859  ret等于如果pret小于0则pret否则负EFAULT
4861  lease a read lock
4862  如果ret
4872  转到:err
4875  off等于ubuf按位与PAGE_MASK的反
4876  size等于 Must be size_t (1003.1g)
4877 j小于nr_pages循环
4881  bv_page等于pages[j]
4882  bv_len等于vec_len
4883  bv_offset等于off
4884  off等于0
4885  size减等于vec_len
4888  ubuf等于ubuf
4889  len等于 Must be size_t (1003.1g)
4890  nr_bvecs等于nr_pages
4892  if used, fixed mapped user buffers 自加
4894  kvfree() - Free memory.*@addr: Pointer to allocated memory.* kvfree frees memory allocated by any of vmalloc(), kmalloc() or kvmalloc().* It is slightly more efficient to use kfree() or vfree() if you are certain* that you know which one to use.
4895  kvfree() - Free memory.*@addr: Pointer to allocated memory.* kvfree frees memory allocated by any of vmalloc(), kmalloc() or kvmalloc().* It is slightly more efficient to use kfree() or vfree() if you are certain* that you know which one to use.
4896  返回:0
4897  err :
4898  kvfree() - Free memory.*@addr: Pointer to allocated memory.* kvfree frees memory allocated by any of vmalloc(), kmalloc() or kvmalloc().* It is slightly more efficient to use kfree() or vfree() if you are certain* that you know which one to use.
4899  kvfree() - Free memory.*@addr: Pointer to allocated memory.* kvfree frees memory allocated by any of vmalloc(), kmalloc() or kvmalloc().* It is slightly more efficient to use kfree() or vfree() if you are certain* that you know which one to use.
4900  io_sqe_buffer_unregister(ctx)
4901  返回:ret
调用者
名称描述
__io_uring_register