summaryrefslogtreecommitdiff
path: root/include/linux/uio.h
diff options
context:
space:
mode:
authorJens Axboe <axboe@kernel.dk>2023-03-29 08:52:15 -0600
committerJens Axboe <axboe@kernel.dk>2023-03-30 08:12:29 -0600
commitde4f5fed3f231a8ff4790bf52975f847b95b85ea (patch)
tree0f546e08dadb0145ca9347ce3fc2b8936d48c5f6 /include/linux/uio.h
parent0a2481cde24f78f503cbc066df2c9c160e64cfd6 (diff)
iov_iter: add iter_iovec() helper
This returns a pointer to the current iovec entry in the iterator. Only useful with ITER_IOVEC right now, but it prepares us to treat ITER_UBUF and ITER_IOVEC identically for the first segment. Rename struct iov_iter->iov to iov_iter->__iov to find any potentially troublesome spots, and also to prevent anyone from adding new code that accesses iter->iov directly. Signed-off-by: Jens Axboe <axboe@kernel.dk>
Diffstat (limited to 'include/linux/uio.h')
-rw-r--r--include/linux/uio.h9
1 files changed, 6 insertions, 3 deletions
diff --git a/include/linux/uio.h b/include/linux/uio.h
index 27e3fd942960..4218624b7f78 100644
--- a/include/linux/uio.h
+++ b/include/linux/uio.h
@@ -51,7 +51,8 @@ struct iov_iter {
};
size_t count;
union {
- const struct iovec *iov;
+ /* use iter_iov() to get the current vec */
+ const struct iovec *__iov;
const struct kvec *kvec;
const struct bio_vec *bvec;
struct xarray *xarray;
@@ -68,6 +69,8 @@ struct iov_iter {
};
};
+#define iter_iov(iter) (iter)->__iov
+
static inline enum iter_type iov_iter_type(const struct iov_iter *i)
{
return i->iter_type;
@@ -146,9 +149,9 @@ static inline size_t iov_length(const struct iovec *iov, unsigned long nr_segs)
static inline struct iovec iov_iter_iovec(const struct iov_iter *iter)
{
return (struct iovec) {
- .iov_base = iter->iov->iov_base + iter->iov_offset,
+ .iov_base = iter_iov(iter)->iov_base + iter->iov_offset,
.iov_len = min(iter->count,
- iter->iov->iov_len - iter->iov_offset),
+ iter_iov(iter)->iov_len - iter->iov_offset),
};
}