From df0cd8535207cd9dfb0dd8220d59a47b8de71178 Mon Sep 17 00:00:00 2001 From: Vitaliy Filippov Date: Tue, 1 Feb 2022 00:19:32 +0300 Subject: [PATCH] Fix another part of the "async sqe clear" bug (followup to d9857a5340c932c534af5f0a29573e3d67ab4d92) --- src/blockstore_impl.cpp | 4 +--- src/blockstore_impl.h | 3 +++ 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/src/blockstore_impl.cpp b/src/blockstore_impl.cpp index 24329944..f1e96e40 100644 --- a/src/blockstore_impl.cpp +++ b/src/blockstore_impl.cpp @@ -142,7 +142,6 @@ void blockstore_impl_t::loop() continue; } } - unsigned ring_space = ringloop->space_left(); unsigned prev_sqe_pos = ringloop->save(); // 0 = can't submit // 1 = in progress @@ -212,7 +211,6 @@ void blockstore_impl_t::loop() ringloop->restore(prev_sqe_pos); if (PRIV(op)->wait_for == WAIT_SQE) { - PRIV(op)->wait_detail = 1 + ring_space; // ring is full, stop submission break; } @@ -282,7 +280,7 @@ void blockstore_impl_t::check_wait(blockstore_op_t *op) { if (PRIV(op)->wait_for == WAIT_SQE) { - if (ringloop->space_left() < PRIV(op)->wait_detail) + if (ringloop->sqes_left() < PRIV(op)->wait_detail) { // stop submission if there's still no free space #ifdef BLOCKSTORE_DEBUG diff --git a/src/blockstore_impl.h b/src/blockstore_impl.h index 037636e1..e77933c6 100644 --- a/src/blockstore_impl.h +++ b/src/blockstore_impl.h @@ -58,6 +58,7 @@ if (ringloop->sqes_left() < (n))\ {\ /* Pause until there are more requests available */\ + PRIV(op)->wait_detail = (n);\ PRIV(op)->wait_for = WAIT_SQE;\ return 0;\ } @@ -71,6 +72,7 @@ if (!sqe)\ {\ /* Pause until there are more requests available */\ + PRIV(op)->wait_detail = 1;\ PRIV(op)->wait_for = WAIT_SQE;\ return 0;\ } @@ -80,6 +82,7 @@ if (!sqe)\ {\ /* Pause until there are more requests available */\ + PRIV(op)->wait_detail = 1;\ PRIV(op)->wait_for = WAIT_SQE;\ return 0;\ }