Skip to content

Commit b3b6f78

Browse files
committed
Add register_buffers_* family of functions
1 parent 38d5905 commit b3b6f78

File tree

1 file changed

+59
-0
lines changed

1 file changed

+59
-0
lines changed

src/submit.rs

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -179,6 +179,65 @@ impl<'a> Submitter<'a> {
179179
.map(drop)
180180
}
181181

182+
pub fn register_buffers_update_tag(
183+
&self,
184+
off: u32,
185+
bufs: &[libc::iovec],
186+
tags: &[u64],
187+
) -> io::Result<()> {
188+
use std::mem;
189+
let rr = sys::io_uring_rsrc_update2 {
190+
nr: bufs.len().min(tags.len()) as _,
191+
data: bufs.as_ptr() as _,
192+
tags: tags.as_ptr() as _,
193+
offset: off,
194+
..Default::default()
195+
};
196+
let rr = cast_ptr::<sys::io_uring_rsrc_update2>(&rr);
197+
execute(
198+
self.fd.as_raw_fd(),
199+
sys::IORING_REGISTER_BUFFERS_UPDATE,
200+
rr as *const _,
201+
mem::size_of::<sys::io_uring_rsrc_update2>() as _,
202+
)
203+
.map(drop)
204+
}
205+
206+
pub fn register_buffers_tags(&self, bufs: &[libc::iovec], tags: &[u64]) -> io::Result<()> {
207+
use std::mem;
208+
let rr = sys::io_uring_rsrc_register {
209+
nr: bufs.len().min(tags.len()) as _,
210+
data: bufs.as_ptr() as _,
211+
tags: tags.as_ptr() as _,
212+
..Default::default()
213+
};
214+
let rr = cast_ptr::<sys::io_uring_rsrc_register>(&rr);
215+
execute(
216+
self.fd.as_raw_fd(),
217+
sys::IORING_REGISTER_BUFFERS2,
218+
rr as *const _,
219+
mem::size_of::<sys::io_uring_rsrc_register>() as _,
220+
)
221+
.map(drop)
222+
}
223+
224+
pub fn register_buffers_sparse(&self, nr: u32) -> io::Result<()> {
225+
use std::mem;
226+
let rr = sys::io_uring_rsrc_register {
227+
nr,
228+
flags: sys::IORING_RSRC_REGISTER_SPARSE,
229+
..Default::default()
230+
};
231+
let rr = cast_ptr::<sys::io_uring_rsrc_register>(&rr);
232+
execute(
233+
self.fd.as_raw_fd(),
234+
sys::IORING_REGISTER_BUFFERS2,
235+
rr as *const _,
236+
mem::size_of::<sys::io_uring_rsrc_register>() as _,
237+
)
238+
.map(drop)
239+
}
240+
182241
/// Registers an empty file table of nr_files number of file descriptors. The sparse variant is
183242
/// available in kernels 5.19 and later.
184243
///

0 commit comments

Comments
 (0)