]> git.ipfire.org Git - thirdparty/xfsprogs-dev.git/commitdiff
xfs_scrub: fix queue-and-stash of non-contiguous verify requests
authorDarrick J. Wong <darrick.wong@oracle.com>
Thu, 17 Oct 2019 02:35:26 +0000 (22:35 -0400)
committerEric Sandeen <sandeen@sandeen.net>
Thu, 17 Oct 2019 02:35:26 +0000 (22:35 -0400)
read_verify_schedule_io is supposed to have the ability to decide that a
retained aggregate extent verification request is not sufficiently
contiguous with the request that is being scheduled, and therefore it
needs to queue the retained request and use the new request to start
building a new aggregate request.

Unfortunately, it stupidly returns after queueing the IO, so we lose the
incoming request.  Fix the code so we only do that if there's a run time
error.

Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com>
Reviewed-by: Eric Sandeen <sandeen@redhat.com>
Signed-off-by: Eric Sandeen <sandeen@sandeen.net>
scrub/read_verify.c

index c19b2289371f58ea00fc0cdb65937e83959d6f06..eadeb7e5688e25a87ad36913f0c3ddd251f9953f 100644 (file)
@@ -269,8 +269,13 @@ read_verify_schedule_io(
                rv->io_length = max(req_end, rv_end) - rv->io_start;
        } else  {
                /* Otherwise, issue the stashed IO (if there is one) */
-               if (rv->io_length > 0)
-                       return read_verify_queue(rvp, rv);
+               if (rv->io_length > 0) {
+                       int     res;
+
+                       res = read_verify_queue(rvp, rv);
+                       if (res)
+                               return res;
+               }
 
                /* Stash the new IO. */
                rv->io_start = start;