Skip to content
Snippets Groups Projects
  • Eric Blake's avatar
    0a479545
    nbd: Prepare for NBD_CMD_FLAG_FAST_ZERO · 0a479545
    Eric Blake authored
    
    Commit fe0480d6 and friends added BDRV_REQ_NO_FALLBACK as a way to
    avoid wasting time on a preliminary write-zero request that will later
    be rewritten by actual data, if it is known that the write-zero
    request will use a slow fallback; but in doing so, could not optimize
    for NBD.  The NBD specification is now considering an extension that
    will allow passing on those semantics; this patch updates the new
    protocol bits and 'qemu-nbd --list' output to recognize the bit, as
    well as the new errno value possible when using the new flag; while
    upcoming patches will improve the client to use the feature when
    present, and the server to advertise support for it.
    
    The NBD spec recommends (but not requires) that ENOTSUP be avoided for
    all but failures of a fast zero (the only time it is mandatory to
    avoid an ENOTSUP failure is when fast zero is supported but not
    requested during write zeroes; the questionable use is for ENOTSUP to
    other actions like a normal write request).  However, clients that get
    an unexpected ENOTSUP will either already be treating it the same as
    EINVAL, or may appreciate the extra bit of information.  We were
    equally loose for returning EOVERFLOW in more situations than
    recommended by the spec, so if it turns out to be a problem in
    practice, a later patch can tighten handling for both error codes.
    
    Signed-off-by: default avatarEric Blake <eblake@redhat.com>
    Message-Id: <20190823143726.27062-3-eblake@redhat.com>
    Reviewed-by: default avatarVladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
    [eblake: tweak commit message, also handle EOPNOTSUPP]
    0a479545
    History
    nbd: Prepare for NBD_CMD_FLAG_FAST_ZERO
    Eric Blake authored
    
    Commit fe0480d6 and friends added BDRV_REQ_NO_FALLBACK as a way to
    avoid wasting time on a preliminary write-zero request that will later
    be rewritten by actual data, if it is known that the write-zero
    request will use a slow fallback; but in doing so, could not optimize
    for NBD.  The NBD specification is now considering an extension that
    will allow passing on those semantics; this patch updates the new
    protocol bits and 'qemu-nbd --list' output to recognize the bit, as
    well as the new errno value possible when using the new flag; while
    upcoming patches will improve the client to use the feature when
    present, and the server to advertise support for it.
    
    The NBD spec recommends (but not requires) that ENOTSUP be avoided for
    all but failures of a fast zero (the only time it is mandatory to
    avoid an ENOTSUP failure is when fast zero is supported but not
    requested during write zeroes; the questionable use is for ENOTSUP to
    other actions like a normal write request).  However, clients that get
    an unexpected ENOTSUP will either already be treating it the same as
    EINVAL, or may appreciate the extra bit of information.  We were
    equally loose for returning EOVERFLOW in more situations than
    recommended by the spec, so if it turns out to be a problem in
    practice, a later patch can tighten handling for both error codes.
    
    Signed-off-by: default avatarEric Blake <eblake@redhat.com>
    Message-Id: <20190823143726.27062-3-eblake@redhat.com>
    Reviewed-by: default avatarVladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
    [eblake: tweak commit message, also handle EOPNOTSUPP]