diff --git a/src/io/uring/Queue.hxx b/src/io/uring/Queue.hxx index 046e60dcd..9410c6a8e 100644 --- a/src/io/uring/Queue.hxx +++ b/src/io/uring/Queue.hxx @@ -49,6 +49,10 @@ protected: void AddPending(struct io_uring_sqe &sqe, Operation &operation) noexcept; + void SubmitAndGetEvents() { + ring.SubmitAndGetEvents(); + } + public: void Push(struct io_uring_sqe &sqe, Operation &operation) noexcept { diff --git a/src/io/uring/Ring.cxx b/src/io/uring/Ring.cxx index 0d7f29a4e..91331a523 100644 --- a/src/io/uring/Ring.cxx +++ b/src/io/uring/Ring.cxx @@ -22,6 +22,14 @@ Ring::Submit() throw MakeErrno(-error, "io_uring_submit() failed"); } +void +Ring::SubmitAndGetEvents() +{ + int error = io_uring_submit_and_get_events(&ring); + if (error < 0) + throw MakeErrno(-error, "io_uring_submit() failed"); +} + struct io_uring_cqe * Ring::WaitCompletion() { diff --git a/src/io/uring/Ring.hxx b/src/io/uring/Ring.hxx index 24ea3c6c6..b16c6ed12 100644 --- a/src/io/uring/Ring.hxx +++ b/src/io/uring/Ring.hxx @@ -53,9 +53,18 @@ public: * kernel using io_uring_submit(). * * Throws on error. + * + * @see io_uring_submit() */ void Submit(); + /** + * Like Submit(), but also flush completions. + * + * @see io_uring_submit_and_get_events() + */ + void SubmitAndGetEvents(); + /** * Waits for one completion. *