@@ -21,7 +21,7 @@ struct kvec {
2121 size_t iov_len ;
2222};
2323
24- enum {
24+ enum iter_type {
2525 ITER_IOVEC = 0 ,
2626 ITER_KVEC = 2 ,
2727 ITER_BVEC = 4 ,
@@ -47,6 +47,36 @@ struct iov_iter {
4747 };
4848};
4949
50+ static inline enum iter_type iov_iter_type (const struct iov_iter * i )
51+ {
52+ return i -> type & ~(READ | WRITE );
53+ }
54+
55+ static inline bool iter_is_iovec (const struct iov_iter * i )
56+ {
57+ return iov_iter_type (i ) == ITER_IOVEC ;
58+ }
59+
60+ static inline bool iov_iter_is_kvec (const struct iov_iter * i )
61+ {
62+ return iov_iter_type (i ) == ITER_KVEC ;
63+ }
64+
65+ static inline bool iov_iter_is_bvec (const struct iov_iter * i )
66+ {
67+ return iov_iter_type (i ) == ITER_BVEC ;
68+ }
69+
70+ static inline bool iov_iter_is_pipe (const struct iov_iter * i )
71+ {
72+ return iov_iter_type (i ) == ITER_PIPE ;
73+ }
74+
75+ static inline unsigned char iov_iter_rw (const struct iov_iter * i )
76+ {
77+ return i -> type & (READ | WRITE );
78+ }
79+
5080/*
5181 * Total number of bytes covered by an iovec.
5282 *
@@ -74,7 +104,8 @@ static inline struct iovec iov_iter_iovec(const struct iov_iter *iter)
74104}
75105
76106#define iov_for_each (iov , iter , start ) \
77- if (!((start).type & (ITER_BVEC | ITER_PIPE))) \
107+ if (iov_iter_type(start) == ITER_IOVEC || \
108+ iov_iter_type(start) == ITER_KVEC) \
78109 for (iter = (start); \
79110 (iter).count && \
80111 ((iov = iov_iter_iovec(&(iter))), 1); \
@@ -202,19 +233,6 @@ static inline size_t iov_iter_count(const struct iov_iter *i)
202233 return i -> count ;
203234}
204235
205- static inline bool iter_is_iovec (const struct iov_iter * i )
206- {
207- return !(i -> type & (ITER_BVEC | ITER_KVEC | ITER_PIPE ));
208- }
209-
210- /*
211- * Get one of READ or WRITE out of iter->type without any other flags OR'd in
212- * with it.
213- *
214- * The ?: is just for type safety.
215- */
216- #define iov_iter_rw (i ) ((0 ? (struct iov_iter *)0 : (i))->type & (READ | WRITE))
217-
218236/*
219237 * Cap the iov_iter by given limit; note that the second argument is
220238 * *not* the new size - it's upper limit for such. Passing it a value
0 commit comments