Btrfs: Throttle file_write when data=ordered is flushing the inode

Signed-off-by: Chris Mason <chris.mason@oracle.com>
diff --git a/fs/btrfs/transaction.c b/fs/btrfs/transaction.c
index 1ed179c..c85cb48 100644
--- a/fs/btrfs/transaction.c
+++ b/fs/btrfs/transaction.c
@@ -512,8 +512,11 @@
 		mutex_unlock(&root->fs_info->trans_mutex);
 		mutex_unlock(&root->fs_info->fs_mutex);
 
-		if (S_ISREG(inode->i_mode))
+		if (S_ISREG(inode->i_mode)) {
+			atomic_inc(&BTRFS_I(inode)->ordered_writeback);
 			filemap_fdatawrite(inode->i_mapping);
+			atomic_dec(&BTRFS_I(inode)->ordered_writeback);
+		}
 		iput(inode);
 
 		mutex_lock(&root->fs_info->fs_mutex);
@@ -530,8 +533,11 @@
 		mutex_unlock(&root->fs_info->trans_mutex);
 		mutex_unlock(&root->fs_info->fs_mutex);
 
-		if (S_ISREG(inode->i_mode))
+		if (S_ISREG(inode->i_mode)) {
+			atomic_inc(&BTRFS_I(inode)->ordered_writeback);
 			filemap_write_and_wait(inode->i_mapping);
+			atomic_dec(&BTRFS_I(inode)->ordered_writeback);
+		}
 		atomic_dec(&inode->i_count);
 		iput(inode);