• Alex Elder's avatar
    rbd: barriers are hard · 632b88ca
    Alex Elder authored
    Let's go shopping!
    
    I'm afraid this may not have gotten it right:
        07741308  rbd: add barriers near done flag operations
    
    The smp_wmb() should have been done *before* setting the done flag,
    to ensure all other data was valid before marking the object request
    done.
    
    Switch to use atomic_inc_return() here to set the done flag, which
    allows us to verify we don't mark something done more than once.
    Doing this also implies general barriers before and after the call.
    
    And although a read memory barrier might have been sufficient before
    reading the done flag, convert this to a full memory barrier just
    to put this issue to bed.
    
    This resolves:
        http://tracker.ceph.com/issues/4238Signed-off-by: default avatarAlex Elder <elder@inktank.com>
    Reviewed-by: default avatarJosh Durgin <josh.durgin@inktank.com>
    632b88ca
rbd.c 104 KB