• Alex Elder's avatar
    rbd: consolidate rbd_do_op() calls · 4634246d
    Alex Elder authored
    The two calls to rbd_do_op() from rbd_rq_fn() differ only in the
    value passed for the snapshot id and the snapshot context.
    
    For reads the snapshot always comes from the mapping, and for writes
    the snapshot id is always CEPH_NOSNAP.
    
    The snapshot context is always null for reads.  For writes, the
    snapshot context always comes from the rbd header, but it is
    acquired under protection of header semaphore and could change
    thereafter, so we can't simply use what's available inside
    rbd_do_op().
    
    Eliminate the snapid parameter from rbd_do_op(), and set it
    based on the I/O direction inside that function instead.  Always
    pass the snapshot context acquired in the caller, but reset it
    to a null pointer inside rbd_do_op() if the operation is a read.
    
    As a result, there is no difference in the read and write calls
    to rbd_do_op() made in rbd_rq_fn(), so just call it unconditionally.
    Signed-off-by: default avatarAlex Elder <elder@inktank.com>
    Reviewed-by: default avatarJosh Durgin <josh.durgin@inktank.com>
    4634246d
rbd.c 76.7 KB