• A
    libceph: don't add to crc unless data sent · 143334ff
    Alex Elder 提交于
    In write_partial_message_data() we aggregate the crc for the data
    portion of the message as each new piece of the data item is
    encountered.  Because it was computed *before* sending the data, if
    an attempt to send a new piece resulted in 0 bytes being sent, the
    crc crc across that piece would erroneously get computed again and
    added to the aggregate result.  This would occasionally happen in
    the evnet of a connection failure.
    
    The crc value isn't really needed until the complete value is known
    after sending all data, so there's no need to compute it before
    sending.
    
    So don't calculate the crc for a piece until *after* we know at
    least one byte of it has been sent.  That will avoid this problem.
    
    This resolves:
        http://tracker.ceph.com/issues/4450Signed-off-by: NAlex Elder <elder@inktank.com>
    Reviewed-by: NSage Weil <sage@inktank.com>
    143334ff
messenger.c 79.5 KB