5
5
use std:: mem;
6
6
use std:: os:: unix:: io:: RawFd ;
7
7
8
- use crate :: squeue:: Entry ;
8
+ use crate :: squeue:: { Entry , OptionValues } ;
9
9
use crate :: sys;
10
10
use crate :: types:: { self , sealed} ;
11
11
12
12
/// Trait to prepare an SQE from an opcode object.
13
13
pub trait PrepareSQE {
14
14
/// Prepare an SQE from an opcode object.
15
- fn prepare ( & self , sqe : & mut sys:: io_uring_sqe ) ;
15
+ fn prepare ( & self , sqe : & mut sys:: io_uring_sqe , options : & OptionValues ) ;
16
16
}
17
17
18
18
macro_rules! assign_fd {
@@ -58,9 +58,11 @@ macro_rules! opcode {
58
58
59
59
pub const CODE = $opcode: expr;
60
60
61
- fn set_used_fields( & $self: ident, $sqe1: ident : & mut sys:: io_uring_sqe) $set_used_fields: block
61
+ fn set_used_fields( & $self: ident, $sqe1: ident : & mut sys:: io_uring_sqe)
62
+ $set_used_fields: block
62
63
63
- fn zero_unused_fields( $sqe2: ident : & mut sys:: io_uring_sqe) $zero_unused_fields: block
64
+ fn zero_unused_fields( $sqe2: ident : & mut sys:: io_uring_sqe, $options: ident : & OptionValues )
65
+ $zero_unused_fields: block
64
66
) => {
65
67
$( #[ $outer] ) *
66
68
pub struct $name {
@@ -100,15 +102,16 @@ macro_rules! opcode {
100
102
}
101
103
102
104
#[ inline]
103
- fn set_used_fields( & $self, $sqe1: & mut sys:: io_uring_sqe) $set_used_fields
105
+ fn set_used_fields( & $self, $sqe1 : & mut sys:: io_uring_sqe) $set_used_fields
104
106
105
107
#[ inline]
106
- fn zero_unused_fields( $sqe2: & mut sys:: io_uring_sqe) $zero_unused_fields
108
+ fn zero_unused_fields( $sqe2 : & mut sys:: io_uring_sqe, $options : & OptionValues )
109
+ $zero_unused_fields
107
110
}
108
111
109
112
impl PrepareSQE for $name {
110
- fn prepare( & self , sqe: & mut sys:: io_uring_sqe) {
111
- Self :: zero_unused_fields( sqe) ;
113
+ fn prepare( & self , sqe: & mut sys:: io_uring_sqe, options : & OptionValues ) {
114
+ Self :: zero_unused_fields( sqe, options ) ;
112
115
self . set_used_fields( sqe) ;
113
116
}
114
117
}
@@ -121,6 +124,13 @@ fn sqe_zeroed() -> sys::io_uring_sqe {
121
124
unsafe { std:: mem:: zeroed ( ) }
122
125
}
123
126
127
+ #[ inline( always) ]
128
+ fn set_options ( sqe : & mut sys:: io_uring_sqe , options : & OptionValues ) {
129
+ sqe. flags = options. flags ;
130
+ sqe. personality = options. personality ;
131
+ sqe. user_data = options. user_data ;
132
+ }
133
+
124
134
opcode ! (
125
135
/// Do not perform any I/O.
126
136
///
@@ -135,8 +145,9 @@ opcode!(
135
145
sqe. fd = -1 ;
136
146
}
137
147
138
- fn zero_unused_fields( sqe: & mut sys:: io_uring_sqe) {
148
+ fn zero_unused_fields( sqe: & mut sys:: io_uring_sqe, options : & OptionValues ) {
139
149
* sqe = unsafe { std:: mem:: zeroed( ) } ;
150
+ set_options( sqe, options) ;
140
151
}
141
152
) ;
142
153
@@ -167,13 +178,11 @@ opcode!(
167
178
sqe. __bindgen_anon_3. rw_flags = self . rw_flags;
168
179
}
169
180
170
- fn zero_unused_fields( sqe: & mut sys:: io_uring_sqe) {
171
- sqe. flags = 0 ;
172
- sqe. user_data = 0 ;
181
+ fn zero_unused_fields( sqe: & mut sys:: io_uring_sqe, options: & OptionValues ) {
173
182
sqe. __bindgen_anon_4. buf_index = 0 ;
174
- sqe. personality = 0 ;
175
183
sqe. splice_fd_in = 0 ;
176
184
sqe. __pad2 = [ 0 , 0 ] ;
185
+ set_options( sqe, options) ;
177
186
}
178
187
) ;
179
188
@@ -204,13 +213,11 @@ opcode!(
204
213
sqe. __bindgen_anon_3. rw_flags = self . rw_flags;
205
214
}
206
215
207
- fn zero_unused_fields( sqe: & mut sys:: io_uring_sqe) {
208
- sqe. flags = 0 ;
209
- sqe. user_data = 0 ;
216
+ fn zero_unused_fields( sqe: & mut sys:: io_uring_sqe, options: & OptionValues ) {
210
217
sqe. __bindgen_anon_4. buf_index = 0 ;
211
- sqe. personality = 0 ;
212
218
sqe. splice_fd_in = 0 ;
213
219
sqe. __pad2 = [ 0 , 0 ] ;
220
+ set_options( sqe, options) ;
214
221
}
215
222
) ;
216
223
@@ -241,8 +248,9 @@ opcode!(
241
248
sqe. __bindgen_anon_3. fsync_flags = self . flags. bits( ) ;
242
249
}
243
250
244
- fn zero_unused_fields( sqe: & mut sys:: io_uring_sqe) {
251
+ fn zero_unused_fields( sqe: & mut sys:: io_uring_sqe, options : & OptionValues ) {
245
252
* sqe = unsafe { std:: mem:: zeroed( ) } ;
253
+ set_options( sqe, options) ;
246
254
}
247
255
) ;
248
256
@@ -279,12 +287,10 @@ opcode!(
279
287
sqe. __bindgen_anon_3. rw_flags = self . rw_flags;
280
288
}
281
289
282
- fn zero_unused_fields( sqe: & mut sys:: io_uring_sqe) {
283
- sqe. flags = 0 ;
284
- sqe. user_data = 0 ;
285
- sqe. personality = 0 ;
290
+ fn zero_unused_fields( sqe: & mut sys:: io_uring_sqe, options: & OptionValues ) {
286
291
sqe. splice_fd_in = 0 ;
287
292
sqe. __pad2 = [ 0 , 0 ] ;
293
+ set_options( sqe, options) ;
288
294
}
289
295
) ;
290
296
0 commit comments