• F
    iotests: 077: Filter out 'resume' lines · d04c1555
    Fam Zheng 提交于
    In the "Overlapping multiple requests" cases, the 3rd reqs (the break
    point B) doesn't wait for the 2nd, and once resumed the I/O will just
    continue.  This is because the 2nd is already waiting for the 1st, and
    in wait_serialising_requests() there is:
    
        /* If the request is already (indirectly) waiting for us, or
         * will wait for us as soon as it wakes up, then just go on
         * (instead of producing a deadlock in the former case). */
        if (!req->waiting_for) {
            /* actually break */
            ...
        }
    
    Consequently, the following "sleep 100; resume A" command races with the
    completion of that request, and sometimes results in an unexpected
    order of output:
    
    > @@ -56,9 +56,9 @@
    >  wrote XXX/XXX bytes at offset XXX
    >  XXX bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
    >  blkdebug: Resuming request 'B'
    > +blkdebug: Resuming request 'A'
    >  wrote XXX/XXX bytes at offset XXX
    >  XXX bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
    > -blkdebug: Resuming request 'A'
    >  wrote XXX/XXX bytes at offset XXX
    >  XXX bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
    >  wrote XXX/XXX bytes at offset XXX
    
    Filter out the "Resuming request" lines to make the output
    deterministic.
    Reported-by: NPatchew <no-reply@patchew.org>
    Signed-off-by: NFam Zheng <famz@redhat.com>
    Message-id: 20171113150026.4743-1-famz@redhat.com
    Reviewed-by: NEric Blake <eblake@redhat.com>
    Signed-off-by: NMax Reitz <mreitz@redhat.com>
    d04c1555
077 5.5 KB