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 ---