Check for SQEs, not for completions

Should finally fix Assertion `sqe != NULL' failed introduced after journaling
refactor in 0.6.11...
non-odp-rdma
Vitaliy Filippov 2022-01-31 02:17:54 +03:00
parent eb5d9153e8
commit d9857a5340
3 changed files with 10 additions and 1 deletions

View File

@ -55,7 +55,7 @@
#define IS_DELETE(st) (((st) & 0x0F) == BS_ST_DELETE)
#define BS_SUBMIT_CHECK_SQES(n) \
if (ringloop->space_left() < (n))\
if (ringloop->sqes_left() < (n))\
{\
/* Pause until there are more requests available */\
PRIV(op)->wait_for = WAIT_SQE;\

View File

@ -112,3 +112,11 @@ void ring_loop_t::restore(unsigned sqe_tail)
}
ring.sq.sqe_tail = sqe_tail;
}
int ring_loop_t::sqes_left()
{
struct io_uring_sq *sq = &ring.sq;
unsigned int head = io_uring_smp_load_acquire(sq->khead);
unsigned int next = sq->sqe_tail + 1;
return *sq->kring_entries - (next - head);
}

View File

@ -172,6 +172,7 @@ public:
struct io_uring_cqe *cqe;
return io_uring_wait_cqe(&ring, &cqe);
}
int sqes_left();
inline unsigned space_left()
{
return free_ring_data_ptr;