• Alex Elder's avatar
    rbd: return earlier in rbd_header_from_disk() · 28cb775d
    Alex Elder authored
    The only caller of rbd_header_from_disk() is rbd_read_header().
    It passes as allocated_snaps the number of snapshots it will
    have received from the server for the snapshot context that
    rbd_header_from_disk() is to interpret.  The first time through
    it provides 0--mainly to extract the number of snapshots from
    the snapshot context header--so that it can allocate an
    appropriately-sized buffer to receive the entire snapshot
    context from the server in a second request.
    
    rbd_header_from_disk() will not fill in the array of snapshot ids
    unless the number in the snapshot matches the number the caller
    had allocated.
    
    This patch adjusts that logic a little further to be more efficient.
    rbd_read_header() doesn't even examine the snapshot context unless
    the snapshot count (stored in header->total_snaps) matches the
    number of snapshots allocated.  So rbd_header_from_disk() doesn't
    need to allocate or fill in the snapshot context field at all in
    that case.
    Signed-off-by: default avatarAlex Elder <elder@inktank.com>
    Reviewed-by: default avatarJosh Durgin <josh.durgin@inktank.com>
    28cb775d
rbd.c 61.5 KB