Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 63607cc8 authored by Miao Xie's avatar Miao Xie Committed by Josef Bacik
Browse files

Btrfs: traverse and flush the delalloc inodes once



btrfs_start_delalloc_inodes() needn't traverse and flush the delalloc inodes
repeatedly. It is because we can regard the data that the users write after
we start delalloc inodes flush as the one which is after the delalloc inodes
flush is done, and we can flush it next time.

Signed-off-by: default avatarMiao Xie <miaox@cn.fujitsu.com>
Signed-off-by: default avatarJosef Bacik <jbacik@fusionio.com>
parent eebc6084
Loading
Loading
Loading
Loading
+1 −8
Original line number Diff line number Diff line
@@ -7614,7 +7614,7 @@ int btrfs_start_delalloc_inodes(struct btrfs_root *root, int delay_iput)

	INIT_LIST_HEAD(&works);
	INIT_LIST_HEAD(&splice);
again:

	spin_lock(&root->fs_info->delalloc_lock);
	list_splice_init(&root->fs_info->delalloc_inodes, &splice);
	while (!list_empty(&splice)) {
@@ -7650,13 +7650,6 @@ again:
		btrfs_wait_and_free_delalloc_work(work);
	}

	spin_lock(&root->fs_info->delalloc_lock);
	if (!list_empty(&root->fs_info->delalloc_inodes)) {
		spin_unlock(&root->fs_info->delalloc_lock);
		goto again;
	}
	spin_unlock(&root->fs_info->delalloc_lock);

	/* the filemap_flush will queue IO into the worker threads, but
	 * we have to make sure the IO is actually started and that
	 * ordered extents get created before we return