• J
    rbd: access snapshot context and mapping size safely · 4e752f0a
    Josh Durgin 提交于
    These fields may both change while the image is mapped if a snapshot
    is created or deleted or the image is resized.  They are guarded by
    rbd_dev->header_rwsem, so hold that while reading them, and store a
    local copy to refer to outside of the critical section. The local copy
    will stay consistent since the snapshot context is reference counted,
    and the mapping size is just a u64. This prevents torn loads from
    giving us inconsistent values.
    
    Move reading header.snapc into the caller of rbd_img_request_create()
    so that we only need to take the semaphore once. The read-only caller,
    rbd_parent_request_create() can just pass NULL for snapc, since the
    snapshot context is only relevant for writes.
    Signed-off-by: NJosh Durgin <josh.durgin@inktank.com>
    4e752f0a
rbd.c 142.3 KB