verify/trim: make trim_backlog_batch work
authorVincent Fu <vincentfu@gmail.com>
Mon, 31 Mar 2025 14:01:32 +0000 (10:01 -0400)
committerVincent Fu <vincent.fu@samsung.com>
Mon, 7 Apr 2025 14:54:38 +0000 (10:54 -0400)
In order to detect when we are at the beginning of a trim phase we check
io_hist_len and should check that the previous operation was not a
*trim* (instead of not a read). Without this change trim_backlog_batch
will have no effect because after one batch is done, fio will simply
start a new batch because io_hist_len is still a multiple of
trim_backlog and the last operation in a batch was a trim which is not a
read.

For check_get_verify checking against read is appropriate but for
check_get_trim we must check against a trim.

Also we need to decrement the trim_batch count for the first trim
operation we send through.

Signed-off-by: Vincent Fu <vincent.fu@samsung.com>
io_u.c

diff --git a/io_u.c b/io_u.c
index 66cfa16a6a2eea2f5779785cff86101e93c75d46..17f5e8530c5b20804518384448073440c6c7fff1 100644 (file)
--- a/io_u.c
+++ b/io_u.c
@@ -1761,12 +1761,14 @@ static bool check_get_trim(struct thread_data *td, struct io_u *io_u)
                else
                        td->trim_batch = 0;
        } else if (!(td->io_hist_len % td->o.trim_backlog) &&
-                    td->last_ddir_completed != DDIR_READ) {
-               td->trim_batch = td->o.trim_batch;
-               if (!td->trim_batch)
-                       td->trim_batch = td->o.trim_backlog;
-               if (get_next_trim(td, io_u))
+                    td->last_ddir_completed != DDIR_TRIM) {
+               if (get_next_trim(td, io_u)) {
+                       td->trim_batch = td->o.trim_batch;
+                       if (!td->trim_batch)
+                               td->trim_batch = td->o.trim_backlog;
+                       td->trim_batch--;
                        return true;
+               }
        }
 
        return false;