• E
    blkdebug: Add pass-through write_zero and discard support · 577cf9e6
    Eric Blake 提交于
    In order to test the effects of artificial geometry constraints
    on operations like write zero or discard, we first need blkdebug
    to manage these actions.  It also allows us to inject errors on
    those operations, just like we can for read/write/flush.
    
    We can also test the contract promised by the block layer; namely,
    if a device has specified limits on alignment or maximum size,
    then those limits must be obeyed (for now, the blkdebug driver
    merely inherits limits from whatever it is wrapping, but the next
    patch will further enhance it to allow specific limit overrides).
    
    This patch intentionally refuses to service requests smaller than
    the requested alignments; this is because an upcoming patch adds
    a qemu-iotest to prove that the block layer is correctly handling
    fragmentation, but the test only works if there is a way to tell
    the difference at artificial alignment boundaries when blkdebug is
    using a larger-than-default alignment.  If we let the blkdebug
    layer always defer to the underlying layer, which potentially has
    a smaller granularity, the iotest will be thwarted.
    
    Tested by setting up an NBD server with export 'foo', then invoking:
    $ ./qemu-io
    qemu-io> open -o driver=blkdebug blkdebug::nbd://localhost:10809/foo
    qemu-io> d 0 15M
    qemu-io> w -z 0 15M
    
    Pre-patch, the server never sees the discard (it was silently
    eaten by the block layer); post-patch it is passed across the
    wire.  Likewise, pre-patch the write is always passed with
    NBD_WRITE (with 15M of zeroes on the wire), while post-patch
    it can utilize NBD_WRITE_ZEROES (for less traffic).
    Signed-off-by: NEric Blake <eblake@redhat.com>
    Reviewed-by: NMax Reitz <mreitz@redhat.com>
    Message-id: 20170429191419.30051-7-eblake@redhat.com
    Signed-off-by: NMax Reitz <mreitz@redhat.com>
    (cherry picked from commit 63188c24)
    * prereq for 81c219acSigned-off-by: NMichael Roth <mdroth@linux.vnet.ibm.com>
    577cf9e6
blkdebug.c 22.4 KB