summaryrefslogtreecommitdiffstats
path: root/fs/btrfs/delayed-inode.c
diff options
context:
space:
mode:
Diffstat (limited to 'fs/btrfs/delayed-inode.c')
-rw-r--r--fs/btrfs/delayed-inode.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/fs/btrfs/delayed-inode.c b/fs/btrfs/delayed-inode.c
index be007c1b5592..80982a83c9fd 100644
--- a/fs/btrfs/delayed-inode.c
+++ b/fs/btrfs/delayed-inode.c
@@ -1353,7 +1353,8 @@ release_path:
1353 total_done++; 1353 total_done++;
1354 1354
1355 btrfs_release_prepared_delayed_node(delayed_node); 1355 btrfs_release_prepared_delayed_node(delayed_node);
1356 if (async_work->nr == 0 || total_done < async_work->nr) 1356 if ((async_work->nr == 0 && total_done < BTRFS_DELAYED_WRITEBACK) ||
1357 total_done < async_work->nr)
1357 goto again; 1358 goto again;
1358 1359
1359free_path: 1360free_path:
@@ -1369,7 +1370,8 @@ static int btrfs_wq_run_delayed_node(struct btrfs_delayed_root *delayed_root,
1369{ 1370{
1370 struct btrfs_async_delayed_work *async_work; 1371 struct btrfs_async_delayed_work *async_work;
1371 1372
1372 if (atomic_read(&delayed_root->items) < BTRFS_DELAYED_BACKGROUND) 1373 if (atomic_read(&delayed_root->items) < BTRFS_DELAYED_BACKGROUND ||
1374 btrfs_workqueue_normal_congested(fs_info->delayed_workers))
1373 return 0; 1375 return 0;
1374 1376
1375 async_work = kmalloc(sizeof(*async_work), GFP_NOFS); 1377 async_work = kmalloc(sizeof(*async_work), GFP_NOFS);