Btrfs: Add a per-inode csum mutex to avoid races creating csum items

Signed-off-by: Chris Mason <chris.mason@oracle.com>
diff --git a/fs/btrfs/ordered-data.c b/fs/btrfs/ordered-data.c
index 5e4c0d95..254da82 100644
--- a/fs/btrfs/ordered-data.c
+++ b/fs/btrfs/ordered-data.c
@@ -152,12 +152,13 @@
 			   inode->i_ino, &entry->rb_node);
 
 	BTRFS_I(inode)->ordered_trans = transid;
+	if (!node)
+		igrab(inode);
 
 	write_unlock(&tree->lock);
+
 	if (node)
 		kfree(entry);
-	else
-		igrab(inode);
 	return 0;
 }