On 30.08.2018 20:42, Josef Bacik wrote:
> If we flip read-only before we initiate writeback on all dirty pages for
> ordered extents we've created then we'll have ordered extents left over
> on umount, which results in all sorts of bad things happening.  Fix this
> by making sure we wait on ordered extents if we have to do the aborted
> transaction cleanup stuff.
> 
> Signed-off-by: Josef Bacik <jo...@toxicpanda.com>

Reviewed-by: Nikolay Borisov <nbori...@suse.com>

> ---
>  fs/btrfs/disk-io.c | 8 ++++++++
>  1 file changed, 8 insertions(+)
> 
> diff --git a/fs/btrfs/disk-io.c b/fs/btrfs/disk-io.c
> index 54fbdc944a3f..51b2a5bf25e5 100644
> --- a/fs/btrfs/disk-io.c
> +++ b/fs/btrfs/disk-io.c
> @@ -4188,6 +4188,14 @@ static void btrfs_destroy_all_ordered_extents(struct 
> btrfs_fs_info *fs_info)
>               spin_lock(&fs_info->ordered_root_lock);
>       }
>       spin_unlock(&fs_info->ordered_root_lock);
> +
> +     /*
> +      * We need this here because if we've been flipped read-only we won't
> +      * get sync() from the umount, so we need to make sure any ordered
> +      * extents that haven't had their dirty pages IO start writeout yet
> +      * actually get run and error out properly.
> +      */
> +     btrfs_wait_ordered_roots(fs_info, U64_MAX, 0, (u64)-1);
>  }
>  
>  static int btrfs_destroy_delayed_refs(struct btrfs_transaction *trans,
> 

Reply via email to