From: Zygo Blaxell Date: Sun, 5 Dec 2021 08:07:34 +0000 (-0500) Subject: Revert "btrfs: run delayed refs less often in commit_cowonly_roots" X-Git-Url: http://git.hungrycats.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=30ee9a1ea032fc98ff51b9c72a0d38be4982b4da;p=linux Revert "btrfs: run delayed refs less often in commit_cowonly_roots" This reverts commit 7309dd9d676ea091857c0f0752272b4b50e723ac. --- diff --git a/fs/btrfs/transaction.c b/fs/btrfs/transaction.c index b40f91b1277a..4b5db4d1aa61 100644 --- a/fs/btrfs/transaction.c +++ b/fs/btrfs/transaction.c @@ -1226,6 +1226,10 @@ static noinline int commit_cowonly_roots(struct btrfs_trans_handle *trans) btrfs_tree_unlock(eb); free_extent_buffer(eb); + if (ret) + return ret; + + ret = btrfs_run_delayed_refs(trans, (unsigned long)-1); if (ret) return ret; @@ -1243,6 +1247,10 @@ static noinline int commit_cowonly_roots(struct btrfs_trans_handle *trans) if (ret) return ret; + /* run_qgroups might have added some more refs */ + ret = btrfs_run_delayed_refs(trans, (unsigned long)-1); + if (ret) + return ret; again: while (!list_empty(&fs_info->dirty_cowonly_roots)) { struct btrfs_root *root; @@ -1257,24 +1265,15 @@ again: ret = update_cowonly_root(trans, root); if (ret) return ret; + ret = btrfs_run_delayed_refs(trans, (unsigned long)-1); + if (ret) + return ret; } - /* Now flush any delayed refs generated by updating all of the roots */ - ret = btrfs_run_delayed_refs(trans, (unsigned long)-1); - if (ret) - return ret; - while (!list_empty(dirty_bgs) || !list_empty(io_bgs)) { ret = btrfs_write_dirty_block_groups(trans); if (ret) return ret; - - /* - * We're writing the dirty block groups, which could generate - * delayed refs, which could generate more dirty block groups, - * so we want to keep this flushing in this loop to make sure - * everything gets run. - */ ret = btrfs_run_delayed_refs(trans, (unsigned long)-1); if (ret) return ret;