aboutsummaryrefslogtreecommitdiffstats
path: root/include/linux/uio.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/linux/uio.h')
-rw-r--r--include/linux/uio.h14
1 files changed, 12 insertions, 2 deletions
diff --git a/include/linux/uio.h b/include/linux/uio.h
index e8a109a75de1..e2231e47cec1 100644
--- a/include/linux/uio.h
+++ b/include/linux/uio.h
@@ -19,12 +19,21 @@ struct kvec {
19 size_t iov_len; 19 size_t iov_len;
20}; 20};
21 21
22enum {
23 ITER_IOVEC = 0,
24 ITER_KVEC = 2,
25 ITER_BVEC = 4,
26};
27
22struct iov_iter { 28struct iov_iter {
23 int type; 29 int type;
24 const struct iovec *iov;
25 unsigned long nr_segs;
26 size_t iov_offset; 30 size_t iov_offset;
27 size_t count; 31 size_t count;
32 union {
33 const struct iovec *iov;
34 const struct bio_vec *bvec;
35 };
36 unsigned long nr_segs;
28}; 37};
29 38
30/* 39/*
@@ -54,6 +63,7 @@ static inline struct iovec iov_iter_iovec(const struct iov_iter *iter)
54} 63}
55 64
56#define iov_for_each(iov, iter, start) \ 65#define iov_for_each(iov, iter, start) \
66 if (!((start).type & ITER_BVEC)) \
57 for (iter = (start); \ 67 for (iter = (start); \
58 (iter).count && \ 68 (iter).count && \
59 ((iov = iov_iter_iovec(&(iter))), 1); \ 69 ((iov = iov_iter_iovec(&(iter))), 1); \