• Jeff Layton's avatar
    libceph: new sparse_read op, support sparse reads on msgr2 crc codepath · ec3bc567
    Jeff Layton authored
    
    
    Add support for a new sparse_read ceph_connection operation. The idea is
    that the client driver can define this operation use it to do special
    handling for incoming reads.
    
    The alloc_msg routine will look at the request and determine whether the
    reply is expected to be sparse. If it is, then we'll dispatch to a
    different set of state machine states that will repeatedly call the
    driver's sparse_read op to get length and placement info for reading the
    extent map, and the extents themselves.
    
    This necessitates adding some new field to some other structs:
    
    - The msg gets a new bool to track whether it's a sparse_read request.
    
    - A new field is added to the cursor to track the amount remaining in the
    current extent. This is used to cap the read from the socket into the
    msg_data
    
    - Handing a revoke with all of this is particularly difficult, so I've
    added a new data_len_remain field to the v2 connection info, and then
    use that to skip that much on a revoke. We may want to expand the use of
    that to the normal read path as well, just for consistency's sake.
    Signed-off-by: default avatarJeff Layton <jlayton@kernel.org>
    Reviewed-by: default avatarXiubo Li <xiubli@redhat.com>
    Reviewed-and-tested-by: default avatarLuís Henriques <lhenriques@suse.de>
    Reviewed-by: default avatarMilind Changire <mchangir@redhat.com>
    Signed-off-by: default avatarIlya Dryomov <idryomov@gmail.com>
    ec3bc567
messenger_v2.c 95.5 KB