• Mikulas Patocka's avatar
    dm snapshot: avoid having two exceptions for the same chunk · 35bf659b
    Mikulas Patocka authored
    We need to check if the exception was completed after dropping the lock.
    
    After regaining the lock, __find_pending_exception checks if the exception
    was already placed into &s->pending hash.
    
    But we don't check if the exception was already completed and placed into
    &s->complete hash. If the process waiting in alloc_pending_exception was
    delayed at this point because of a scheduling latency and the exception
    was meanwhile completed, we'd miss that and allocate another pending
    exception for already completed chunk.
    
    It would lead to a situation where two records for the same chunk exist
    and potential data corruption because multiple snapshot I/Os to the
    affected chunk could be redirected to different locations in the
    snapshot.
    
    Cc: stable@kernel.org
    Signed-off-by: default avatarMikulas Patocka <mpatocka@redhat.com>
    Signed-off-by: default avatarAlasdair G Kergon <agk@redhat.com>
    35bf659b
dm-snap.c 32.9 KB