btrfs: zoned: wait until zone is finished when allocation didn't progress
[linux-2.6-microblaze.git] / fs / btrfs / inode.c
index a8f9728..16789bb 100644 (file)
@@ -1643,8 +1643,13 @@ static noinline int run_delalloc_zoned(struct btrfs_inode *inode,
                if (ret == 0)
                        done_offset = end;
 
-               if (done_offset == start)
-                       return -ENOSPC;
+               if (done_offset == start) {
+                       struct btrfs_fs_info *info = inode->root->fs_info;
+
+                       wait_var_event(&info->zone_finish_wait,
+                                      !test_bit(BTRFS_FS_NEED_ZONE_FINISH, &info->flags));
+                       continue;
+               }
 
                if (!locked_page_done) {
                        __set_page_dirty_nobuffers(locked_page);