On Tue, Jan 29, 2019 at 02:57:39PM +0800, Qu Wenruo wrote:
> The most straightforward is to sync the fs before balancing metadata
> chunks.
> 
> We could enhance the kernel bytes_may_use calculation, but I doubt about
> the complexity.
> So I take the easy fix to reduce the false ENOSPC reports.

Agreed.

> +     /*
> +      * There may be many over-reserved space for metadata block groups,
> +      * especially for inlined file extents.
> +      *
> +      * Do a sync here will free those over-reserved space and hugely
> +      * reduce the possibility of some false ENOSPC
> +      */
> +     if (args->flags & BTRFS_BALANCE_METADATA) {
> +             ret = btrfs_util_sync(path);

As the fd is already open, we should use the _fd version,

> +             if (ret) {
> +                     error("failed to sync the fs before balance: %m");
> +                     ret = -errno;
> +                     goto out;

and possibly only warn if there's an error returned as the sync failure
is not a critical condition.

Reply via email to