size_t copy_page_from_iter(struct page *page, size_t offset, size_t bytes,struct iov_iter *i); 只能移动一个页的数据在原子上下文中运行的代码可以使用一下方式从用户空间获取数据: size_t iov_iter_copy_from_user_atomic(struct page *page, struct iov_iter *i, unsigned long offset, size_t ...
if (unlikely(!page_copy_sane(page, offset, bytes))) return 0; if (i->type & (ITER_BVEC|ITER_KVEC)) { if (i->type & (ITER_BVEC | ITER_KVEC | ITER_XARRAY)) { void *kaddr = kmap_atomic(page); size_t wanted = copy_to_iter(kaddr + offset, bytes, i); ...
* copy_from_user()). * * Return 0 on success, or non-zero if the memory could not be accessed (i.e. * because it is an invalid address). * Always returns 0 for non-userspace iterators. */ intiov_iter_fault_in_readable(conststructiov_iter*i,size_tbytes) ...