• Josef Bacik's avatar
    Btrfs: fix deadlock when throttling transactions · 81317fde
    Josef Bacik authored
    Hit this nice little deadlock.  What happens is this
    
    __btrfs_end_transaction with throttle set, --use_count so it equals 0
      btrfs_commit_transaction
        <somebody else actually manages to start the commit>
        btrfs_end_transaction --use_count so now its -1 <== BAD
          we just return and wait on the transaction
    
    This is bad because we just return after our use_count is -1 and don't let go
    of our num_writer count on the transaction, so the guy committing the
    transaction just sits there forever.  Fix this by inc'ing our use_count if we're
    going to call commit_transaction so that if we call btrfs_end_transaction it's
    valid.  Thanks,
    Signed-off-by: default avatarJosef Bacik <josef@redhat.com>
    Signed-off-by: default avatarChris Mason <chris.mason@oracle.com>
    81317fde
transaction.c 37.7 KB