• E
    nbd/server: Fix structured read of length 0 · ef8c887e
    Eric Blake 提交于
    The NBD spec was recently clarified to state that a read of length 0
    should not be attempted by a compliant client; but that a server must
    still handle it correctly in an unspecified manner (that is, either
    a successful no-op or an error reply, but not a crash) [1].  However,
    it also implies that NBD_REPLY_TYPE_OFFSET_DATA must have a non-zero
    payload length, but our existing code was replying with a chunk
    that a picky client could reject as invalid because it was missing
    a payload (our own client implementation was recently patched to be
    that picky, after first fixing it to not send 0-length requests).
    
    We are already doing successful no-ops for 0-length writes and for
    non-structured reads; so for consistency, we want structured reply
    reads to also be a no-op.  The easiest way to do this is to return
    a NBD_REPLY_TYPE_NONE chunk; this is best done via a new helper
    function (especially since future patches for other structured
    replies may benefit from using the same helper).
    
    [1] https://github.com/NetworkBlockDevice/nbd/commit/ee926037Signed-off-by: NEric Blake <eblake@redhat.com>
    Message-Id: <20171108215703.9295-8-eblake@redhat.com>
    Reviewed-by: NVladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
    ef8c887e
trace-events 5.9 KB