diff --git a/fs/btrfs/inode.c b/fs/btrfs/inode.c index 280e4d48763667c9df371d56ae00b1346a0362c9..d1e3a2d15f9126ae78b76990bf22ef77bcde9225 100644 --- a/fs/btrfs/inode.c +++ b/fs/btrfs/inode.c @@ -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 @@ int btrfs_start_delalloc_inodes(struct btrfs_root *root, int delay_iput) 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