All of lore.kernel.org
 help / color / mirror / Atom feed
From: Filipe Manana <fdmanana@kernel.org>
To: Naohiro Aota <naohiro.aota@wdc.com>
Cc: linux-btrfs@vger.kernel.org, johannes.thumshirn@wdc.com,
	linux-fsdevel@vger.kernel.org, viro@zeniv.linux.org.uk,
	david@fromorbit.com
Subject: Re: [PATCH 1/4] btrfs: mark resumed async balance as writing
Date: Fri, 11 Mar 2022 14:08:37 +0000	[thread overview]
Message-ID: <YitX5fpZcC/P70o6@debian9.Home> (raw)
In-Reply-To: <65730df62341500bfcbde7d86eeaa3e9b15f1bcb.1646983176.git.naohiro.aota@wdc.com>

On Fri, Mar 11, 2022 at 04:38:02PM +0900, Naohiro Aota wrote:
> When btrfs balance is interrupted with umount, the background balance
> resumes on the next mount. There is a potential deadlock with FS freezing
> here like as described in commit 26559780b953 ("btrfs: zoned: mark
> relocation as writing").
> 
> Mark the process as sb_writing. To preserve the order of sb_start_write()
> (or mnt_want_write_file()) and btrfs_exclop_start(), call sb_start_write()
> at btrfs_resume_balance_async() before taking fs_info->super_lock.
> 
> Fixes: 5accdf82ba25 ("fs: Improve filesystem freezing handling")

This seems odd to me. I read the note you left on the cover letter about
this, but honestly I don't think it's fair to blame that commit. I see
it more as btrfs specific problem.

Plus it's a 10 years old commit, so instead of the Fixes tag, adding a
minimal kernel version to the CC stable tag below makes more sense.

> Cc: stable@vger.kernel.org
> Signed-off-by: Naohiro Aota <naohiro.aota@wdc.com>
> ---
>  fs/btrfs/volumes.c | 2 ++
>  1 file changed, 2 insertions(+)
> 
> diff --git a/fs/btrfs/volumes.c b/fs/btrfs/volumes.c
> index 1be7cb2f955f..0d27d8d35c7a 100644
> --- a/fs/btrfs/volumes.c
> +++ b/fs/btrfs/volumes.c
> @@ -4443,6 +4443,7 @@ static int balance_kthread(void *data)
>  	if (fs_info->balance_ctl)
>  		ret = btrfs_balance(fs_info, fs_info->balance_ctl, NULL);
>  	mutex_unlock(&fs_info->balance_mutex);
> +	sb_end_write(fs_info->sb);
>  
>  	return ret;
>  }
> @@ -4463,6 +4464,7 @@ int btrfs_resume_balance_async(struct btrfs_fs_info *fs_info)
>  		return 0;
>  	}
>  
> +	sb_start_write(fs_info->sb);

I don't understand this.

We are doing the sb_start_write() here, in the task doing the mount, and then
we do the sb_end_write() at the kthread that runs balance_kthread().

Why not do the sb_start_write() in the kthread?

This is also buggy in the case the call below to kthread_run() fails, as
we end up never calling sb_end_write().

Thanks.

>  	spin_lock(&fs_info->super_lock);
>  	ASSERT(fs_info->exclusive_operation == BTRFS_EXCLOP_BALANCE_PAUSED);
>  	fs_info->exclusive_operation = BTRFS_EXCLOP_BALANCE;
> -- 
> 2.35.1
> 

  reply	other threads:[~2022-03-11 14:09 UTC|newest]

Thread overview: 12+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-03-11  7:38 [PATCH 0/4] protect relocation with sb_start_write Naohiro Aota
2022-03-11  7:38 ` [PATCH 1/4] btrfs: mark resumed async balance as writing Naohiro Aota
2022-03-11 14:08   ` Filipe Manana [this message]
2022-03-14  2:29     ` Naohiro Aota
2022-03-14 11:25       ` Filipe Manana
2022-03-11  7:38 ` [PATCH 2/4] btrfs: mark device addition as sb_writing Naohiro Aota
2022-03-11 14:21   ` Filipe Manana
2022-03-14  2:31     ` Naohiro Aota
2022-03-11  7:38 ` [PATCH 3/4] fs: add check functions for sb_start_{write,pagefault,intwrite} Naohiro Aota
2022-03-11 14:28   ` Filipe Manana
2022-03-11  7:38 ` [PATCH 4/4] btrfs: assert that relocation is protected with sb_start_write() Naohiro Aota
2022-03-11 14:33   ` Filipe Manana

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=YitX5fpZcC/P70o6@debian9.Home \
    --to=fdmanana@kernel.org \
    --cc=david@fromorbit.com \
    --cc=johannes.thumshirn@wdc.com \
    --cc=linux-btrfs@vger.kernel.org \
    --cc=linux-fsdevel@vger.kernel.org \
    --cc=naohiro.aota@wdc.com \
    --cc=viro@zeniv.linux.org.uk \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.