fio: fix ignore_error regression
authorEric Whitney <enwlinux@gmail.com>
Wed, 3 Feb 2016 23:58:43 +0000 (16:58 -0700)
committerJens Axboe <axboe@fb.com>
Wed, 3 Feb 2016 23:58:43 +0000 (16:58 -0700)
Commit e9d512d8e7d2 introduced a regression affecting handling for
the ignore_error parameter.  The common code for io_u event handling
pulled from do_io() and do_verify() into io_queue_event() does not
check for and process errors that are to be ignored in the main I/O
path as I/Os are completed.  Prior to that commit, do_io() called
break_on_this_error() to handle that case.

The change causes fio to return a non-zero exit status after
encountering an error it should ignore while performing I/O, even
though the job does run to completion. This regression causes
failures for some fstests that use fio, including ext4/302, ext4/303,
and generic/300.

This patch restores the original error handling behavior.

Signed-off-by: Eric Whitney <enwlinux@gmail.com>
Signed-off-by: Jens Axboe <axboe@fb.com>
backend.c

index 20784096a0d7b9b8e417d0235311b4ab983bfd29..fd8184917325af84ac74b50a8967c1ba507a026f 100644 (file)
--- a/backend.c
+++ b/backend.c
@@ -520,6 +520,14 @@ sync_done:
                        if (*ret < 0)
                                break;
                }
+
+               /*
+                * when doing I/O (not when verifying),
+                * check for any errors that are to be ignored
+                */
+               if (!from_verify)
+                       break;
+
                return 0;
        case FIO_Q_QUEUED:
                /*