uio.h (cecdd52a3dd312564f81a39df08378b7b39a2654) | uio.h (de4f5fed3f231a8ff4790bf52975f847b95b85ea) |
---|---|
1/* SPDX-License-Identifier: GPL-2.0-or-later */ 2/* 3 * Berkeley style UIO structures - Alan Cox 1994. 4 */ 5#ifndef __LINUX_UIO_H 6#define __LINUX_UIO_H 7 8#include <linux/kernel.h> --- 37 unchanged lines hidden (view full) --- 46 bool data_source; 47 bool user_backed; 48 union { 49 size_t iov_offset; 50 int last_offset; 51 }; 52 size_t count; 53 union { | 1/* SPDX-License-Identifier: GPL-2.0-or-later */ 2/* 3 * Berkeley style UIO structures - Alan Cox 1994. 4 */ 5#ifndef __LINUX_UIO_H 6#define __LINUX_UIO_H 7 8#include <linux/kernel.h> --- 37 unchanged lines hidden (view full) --- 46 bool data_source; 47 bool user_backed; 48 union { 49 size_t iov_offset; 50 int last_offset; 51 }; 52 size_t count; 53 union { |
54 const struct iovec *iov; | 54 /* use iter_iov() to get the current vec */ 55 const struct iovec *__iov; |
55 const struct kvec *kvec; 56 const struct bio_vec *bvec; 57 struct xarray *xarray; 58 struct pipe_inode_info *pipe; 59 void __user *ubuf; 60 }; 61 union { 62 unsigned long nr_segs; 63 struct { 64 unsigned int head; 65 unsigned int start_head; 66 }; 67 loff_t xarray_start; 68 }; 69}; 70 | 56 const struct kvec *kvec; 57 const struct bio_vec *bvec; 58 struct xarray *xarray; 59 struct pipe_inode_info *pipe; 60 void __user *ubuf; 61 }; 62 union { 63 unsigned long nr_segs; 64 struct { 65 unsigned int head; 66 unsigned int start_head; 67 }; 68 loff_t xarray_start; 69 }; 70}; 71 |
72#define iter_iov(iter) (iter)->__iov 73 |
|
71static inline enum iter_type iov_iter_type(const struct iov_iter *i) 72{ 73 return i->iter_type; 74} 75 76static inline void iov_iter_save_state(struct iov_iter *iter, 77 struct iov_iter_state *state) 78{ --- 62 unchanged lines hidden (view full) --- 141 for (seg = 0; seg < nr_segs; seg++) 142 ret += iov[seg].iov_len; 143 return ret; 144} 145 146static inline struct iovec iov_iter_iovec(const struct iov_iter *iter) 147{ 148 return (struct iovec) { | 74static inline enum iter_type iov_iter_type(const struct iov_iter *i) 75{ 76 return i->iter_type; 77} 78 79static inline void iov_iter_save_state(struct iov_iter *iter, 80 struct iov_iter_state *state) 81{ --- 62 unchanged lines hidden (view full) --- 144 for (seg = 0; seg < nr_segs; seg++) 145 ret += iov[seg].iov_len; 146 return ret; 147} 148 149static inline struct iovec iov_iter_iovec(const struct iov_iter *iter) 150{ 151 return (struct iovec) { |
149 .iov_base = iter->iov->iov_base + iter->iov_offset, | 152 .iov_base = iter_iov(iter)->iov_base + iter->iov_offset, |
150 .iov_len = min(iter->count, | 153 .iov_len = min(iter->count, |
151 iter->iov->iov_len - iter->iov_offset), | 154 iter_iov(iter)->iov_len - iter->iov_offset), |
152 }; 153} 154 155size_t copy_page_from_iter_atomic(struct page *page, unsigned offset, 156 size_t bytes, struct iov_iter *i); 157void iov_iter_advance(struct iov_iter *i, size_t bytes); 158void iov_iter_revert(struct iov_iter *i, size_t bytes); 159size_t fault_in_iov_iter_readable(const struct iov_iter *i, size_t bytes); --- 236 unchanged lines hidden --- | 155 }; 156} 157 158size_t copy_page_from_iter_atomic(struct page *page, unsigned offset, 159 size_t bytes, struct iov_iter *i); 160void iov_iter_advance(struct iov_iter *i, size_t bytes); 161void iov_iter_revert(struct iov_iter *i, size_t bytes); 162size_t fault_in_iov_iter_readable(const struct iov_iter *i, size_t bytes); --- 236 unchanged lines hidden --- |