• J
    dm thin: fix passdown_double_checking_shared_status() · d445bd9c
    Joe Thornber 提交于
    Commit 00a0ea33 ("dm thin: do not queue freed thin mapping for next
    stage processing") changed process_prepared_discard_passdown_pt1() to
    increment all the blocks being discarded until after the passdown had
    completed to avoid them being prematurely reused.
    
    IO issued to a thin device that breaks sharing with a snapshot, followed
    by a discard issued to snapshot(s) that previously shared the block(s),
    results in passdown_double_checking_shared_status() being called to
    iterate through the blocks double checking their reference count is zero
    and issuing the passdown if so.  So a side effect of commit 00a0ea33
    is passdown_double_checking_shared_status() was broken.
    
    Fix this by checking if the block reference count is greater than 1.
    Also, rename dm_pool_block_is_used() to dm_pool_block_is_shared().
    
    Fixes: 00a0ea33 ("dm thin: do not queue freed thin mapping for next stage processing")
    Cc: stable@vger.kernel.org # 4.9+
    Reported-by: ryan.p.norwood@gmail.com
    Signed-off-by: NJoe Thornber <ejt@redhat.com>
    Signed-off-by: NMike Snitzer <snitzer@redhat.com>
    d445bd9c
dm-thin-metadata.h 6.8 KB