@@ -21,7 +21,7 @@ struct kvec {
21
21
size_t iov_len ;
22
22
};
23
23
24
- enum {
24
+ enum iter_type {
25
25
ITER_IOVEC = 0 ,
26
26
ITER_KVEC = 2 ,
27
27
ITER_BVEC = 4 ,
@@ -47,6 +47,36 @@ struct iov_iter {
47
47
};
48
48
};
49
49
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
+
50
80
/*
51
81
* Total number of bytes covered by an iovec.
52
82
*
@@ -74,7 +104,8 @@ static inline struct iovec iov_iter_iovec(const struct iov_iter *iter)
74
104
}
75
105
76
106
#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) \
78
109
for (iter = (start); \
79
110
(iter).count && \
80
111
((iov = iov_iter_iovec(&(iter))), 1); \
@@ -202,19 +233,6 @@ static inline size_t iov_iter_count(const struct iov_iter *i)
202
233
return i -> count ;
203
234
}
204
235
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
-
218
236
/*
219
237
* Cap the iov_iter by given limit; note that the second argument is
220
238
* *not* the new size - it's upper limit for such. Passing it a value
0 commit comments