• A
    libceph: fix two messenger bugs · a51b272e
    Alex Elder 提交于
    This patch makes four small changes in the ceph messenger.
    
    While getting copyup functionality working I found two bugs in the
    messenger.  Existing paths through the code did not trigger these
    problems, but they're fixed here:
        - In ceph_msg_data_pagelist_cursor_init(), the cursor's
          last_piece field was being checked against the length
          supplied.  This was OK until this commit: ccba6d98 libceph:
          implement multiple data items in a message That commit changed
          the cursor init routines to allow lengths to be supplied that
          exceeded the size of the current data item. Because of this,
          we have to use the assigned cursor resid field rather than the
          provided length in determining whether the cursor points to
          the last piece of a data item.
        - In ceph_msg_data_add_pages(), a BUG_ON() was erroneously
          catching attempts to add page data to a message if the message
          already had data assigned to it. That was OK until that same
          commit, at which point it was fine for messages to have
          multiple data items. It slipped through because that BUG_ON()
          call was present twice in that function. (You can never be too
          careful.)
    
    In addition two other minor things are changed:
        - In ceph_msg_data_cursor_init(), the local variable "data" was
          getting assigned twice.
        - In ceph_msg_data_advance(), it was assumed that the
          type-specific advance routine would set new_piece to true
          after it advanced past the last piece. That may have been
          fine, but since we check for that case we might as well set it
          explicitly in ceph_msg_data_advance().
    
    This resolves:
        http://tracker.ceph.com/issues/4762Signed-off-by: NAlex Elder <elder@inktank.com>
    Reviewed-by: NJosh Durgin <josh.durgin@inktank.com>
    a51b272e
messenger.c 80.8 KB