]> Git Repo - linux.git/commitdiff
btrfs: run delayed iputs when flushing delalloc
authorJosef Bacik <[email protected]>
Wed, 21 Aug 2024 19:53:18 +0000 (15:53 -0400)
committerDavid Sterba <[email protected]>
Sun, 25 Aug 2024 17:15:34 +0000 (19:15 +0200)
We have transient failures with btrfs/301, specifically in the part
where we do

  for i in $(seq 0 10); do
  write 50m to file
  rm -f file
  done

Sometimes this will result in a transient quota error, and it's because
sometimes we start writeback on the file which results in a delayed
iput, and thus the rm doesn't actually clean the file up.  When we're
flushing the quota space we need to run the delayed iputs to make sure
all the unlinks that we think have completed have actually completed.
This removes the small window where we could fail to find enough space
in our quota.

CC: [email protected] # 5.15+
Reviewed-by: Qu Wenruo <[email protected]>
Signed-off-by: Josef Bacik <[email protected]>
Signed-off-by: David Sterba <[email protected]>
fs/btrfs/qgroup.c

index 5d57a285d59b90229043cf6efdee3707cb780952..7d6f5d9420ec203d6b1d76d9b839e806ff7503e3 100644 (file)
@@ -4185,6 +4185,8 @@ static int try_flush_qgroup(struct btrfs_root *root)
                return 0;
        }
 
+       btrfs_run_delayed_iputs(root->fs_info);
+       btrfs_wait_on_delayed_iputs(root->fs_info);
        ret = btrfs_start_delalloc_snapshot(root, true);
        if (ret < 0)
                goto out;
This page took 0.066488 seconds and 4 git commands to generate.