• A
    rbd: simplify __rbd_init_snaps_header() · 35938150
    Alex Elder 提交于
    The purpose of __rbd_init_snaps_header() is to compare a new
    snapshot context with an rbd device's list of existing snapshots.
    It updates the list by adding any new snapshots or removing any
    that are not present in the new snapshot context.
    
    The code as written is a little confusing, because it traverses both
    the existing snapshot list and the set of snapshots in the snapshot
    context in reverse.  This was done based on an assumption about
    snapshots that is not true--namely that a duplicate snapshot name
    could cause an error in intepreting things if they were not
    processed in ascending order.
    
    These precautions are not necessary, because:
        - all snapshots are uniquely identified by their snapshot id
        - a new snapshot cannot be created if the rbd device has another
          snapshot with the same name
    (It is furthermore not currently possible to rename a snapshot.)
    
    This patch re-implements __rbd_init_snaps_header() so it passes
    through both the existing snapshot list and the entries in the
    snapshot context in forward order.  It still does the same thing
    as before, but I find the logic considerably easier to understand.
    
    By going forward through the names in the snapshot context, there
    is no longer a need for the rbd_prev_snap_name() helper function.
    Signed-off-by: NAlex Elder <elder@inktank.com>
    Reviewed-by: NJosh Durgin <josh.durgin@inktank.com>
    35938150
rbd.c 60.7 KB