Btrfs: Handle data block end_io through the async work queue

Before it was done by the bio end_io routine, the work queue code is able
to scale much better with faster IO subsystems.

Signed-off-by: Chris Mason <chris.mason@oracle.com>
diff --git a/fs/btrfs/inode.c b/fs/btrfs/inode.c
index 7ae677d..e1ef1ac 100644
--- a/fs/btrfs/inode.c
+++ b/fs/btrfs/inode.c
@@ -328,7 +328,9 @@
 	struct btrfs_trans_handle *trans;
 	int ret = 0;
 
-	if (rw != WRITE) {
+	if (!(rw & (1 << BIO_RW))) {
+		ret = btrfs_bio_wq_end_io(root->fs_info, bio, 0);
+		BUG_ON(ret);
 		goto mapit;
 	}