• Alex Elder's avatar
    libceph: use cursor for bio reads · 463207aa
    Alex Elder authored
    Replace the use of the information in con->in_msg_pos for incoming
    bio data.  The old in_msg_pos and the new cursor mechanism do
    basically the same thing, just slightly differently.
    
    The main functional difference is that in_msg_pos keeps track of the
    length of the complete bio list, and assumed it was fully consumed
    when that many bytes had been transferred.  The cursor does not assume
    a length, it simply consumes all bytes in the bio list.  Because the
    only user of bio data is the rbd client, and because the length of a
    bio list provided by rbd client always matches the number of bytes
    in the list, both ways of tracking length are equivalent.
    
    In addition, for in_msg_pos the initial bio vector is selected as
    the initial value of the bio->bi_idx, while the cursor assumes this
    is zero.  Again, the rbd client always passes 0 as the initial index
    so the effect is the same.
    
    Other than that, they basically match:
        in_msg_pos      cursor
        ----------      ------
        bio_iter        bio
        bio_seg         vec_index
        page_pos        page_offset
    
    The in_msg_pos field is initialized by a call to init_bio_iter().
    The bio cursor is initialized by ceph_msg_data_cursor_init().
    Both now happen in the same spot, in prepare_message_data().
    
    The in_msg_pos field is advanced by a call to in_msg_pos_next(),
    which updates page_pos and calls iter_bio_next() to move to the next
    bio vector, or to the next bio in the list.  The cursor is advanced
    by ceph_msg_data_advance().  That isn't currently happening so
    add a call to that in in_msg_pos_next().
    
    Finally, the next piece of data to use for a read is determined
    by a bunch of lines in read_partial_message_bio().  Those can be
    replaced by an equivalent ceph_msg_data_bio_next() call.
    
    This partially resolves:
        http://tracker.ceph.com/issues/4428Signed-off-by: default avatarAlex Elder <elder@inktank.com>
    Reviewed-by: default avatarJosh Durgin <josh.durgin@inktank.com>
    463207aa
messenger.c 83.2 KB