All of lore.kernel.org
 help / color / mirror / Atom feed
From: sashiko-bot@kernel.org
To: "Christian Brauner" <brauner@kernel.org>
Cc: "Mark Fasheh" <mark@fasheh.com>,
	dsterba@suse.cz, tytso@mit.edu,
	"Joel Becker" <jlbec@evilplan.org>,
	"Joseph Qi" <joseph.qi@linux.alibaba.com>,
	linux-ext4@vger.kernel.org
Subject: Re: [PATCH RFC 18/28] btrfs: check BTRFS_FS_STATE_RO instead of SB_RDONLY at runtime
Date: Mon, 12 Oct 2026 10:53:24 +0000	[thread overview]
Message-ID: <sashiko-outbox-167994@kernel.org> (raw)
In-Reply-To: <20261012-work-fs-sb_rdonly-v1-18-60743a3dc326@kernel.org>

Thank you for your contribution! Sashiko AI review found 2 potential issue(s) to consider:
- [Medium] btrfs: deduplication bypasses btrfs_fs_rdonly() check on errored filesystem
- [Medium] btrfs: missing btrfs_fs_rdonly() check in btrfs_fallocate
--

commit 724f453e748b24ef023f98daeae702d1edad4559
Author: Christian Brauner <brauner@kernel.org>
Subject: btrfs: check BTRFS_FS_STATE_RO instead of SB_RDONLY at runtime

This commit introduces btrfs_fs_rdonly() to test BTRFS_FS_STATE_RO and
replaces sb_rdonly() with it across various runtime checks. This ensures
the filesystem catches modifications during an error state independently of
the VFS, preparing for the removal of the SB_RDONLY flag from the error
handler.

> diff --git a/fs/btrfs/reflink.c b/fs/btrfs/reflink.c
> index d2a4101912bdb..96cc207cdb4e9 100644
> --- a/fs/btrfs/reflink.c
> +++ b/fs/btrfs/reflink.c
> @@ -846,7 +846,8 @@ static int btrfs_remap_file_range_prep(struct file *file_in, loff_t pos_in,
>  	if (!(remap_flags & REMAP_FILE_DEDUP)) {
>  		struct btrfs_root *root_out = inode_out->root;
>  
> -		if (btrfs_root_readonly(root_out))
> +		if (btrfs_root_readonly(root_out) ||
> +		    btrfs_fs_rdonly(root_out->fs_info))
>  			return -EROFS;

[Severity: Medium]
Should the btrfs_fs_rdonly() check be placed outside the deduplication
conditional block?

By placing it inside the check for !(remap_flags & REMAP_FILE_DEDUP),
deduplication operations bypass this early read-only failure on an errored
filesystem. Because the VFS no longer rejects writes via mnt_want_write_file()
due to the SB_RDONLY removal later in the series, the FIDEDUPERANGE ioctl
will proceed to flush pages, wait for IO, and run generic_remap_file_range_prep().

This allows unprivileged users to force significant IO and CPU work on an
already broken filesystem, performing the expensive data comparison before
finally returning -EROFS during btrfs_start_transaction().

[ ... ]

> And check it next to every btrfs_root_readonly() check that guards a
> modification, e.g. in btrfs_permission(), btrfs_setattr(),
> btrfs_update_time(), the xattr and ACL handlers, btrfs_fileattr_set()
> and the clone checks in btrfs_remap_file_range_prep().

[Severity: Medium]
Is there a need for a similar btrfs_fs_rdonly() check in btrfs_fallocate()
in fs/btrfs/file.c?

Currently, btrfs_fallocate() on an errored filesystem will bypass VFS checks.
It will proceed to call btrfs_cont_expand() or btrfs_truncate_block() which
dirty pages in memory, and wait for IO, before eventually failing later when
btrfs_start_transaction() checks BTRFS_FS_ERROR.

This could leave unflushable dirty pages in memory for a read-only filesystem,
potentially causing writeback warnings or unmount issues. This creates an
inconsistency with other modification paths like btrfs_setattr() which
correctly check for the read-only or error state early.

-- 
Sashiko AI review · https://sashiko.dev/#/patchset/20261012-work-fs-sb_rdonly-v1-0-60743a3dc326@kernel.org?part=18

  reply	other threads:[~2026-10-12 10:53 UTC|newest]

Thread overview: 102+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-10-12 10:20 [PATCH RFC 00/28] fs: don't set SB_RDONLY after filesystem errors Christian Brauner
2026-10-12 10:20 ` Christian Brauner
2026-10-12 10:20 ` [PATCH RFC 01/28] ecryptfs: don't leak the inode when a lookup can't open the lower file Christian Brauner
2026-10-12 10:20   ` Christian Brauner
2026-10-12 10:34   ` sashiko-bot
2026-10-12 10:20 ` [PATCH RFC 02/28] ecryptfs: fall back to a read-only " Christian Brauner
2026-10-12 10:20   ` Christian Brauner
2026-10-12 10:32   ` sashiko-bot
2026-10-12 10:20 ` [PATCH RFC 03/28] ext2: don't set SB_RDONLY after filesystem errors Christian Brauner
2026-10-12 10:20   ` Christian Brauner
2026-10-12 10:44   ` sashiko-bot
2026-10-12 10:20 ` [PATCH RFC 04/28] jfs: " Christian Brauner
2026-10-12 10:20   ` Christian Brauner
2026-10-12 10:41   ` sashiko-bot
2026-10-12 10:20 ` [PATCH RFC 05/28] nilfs2: " Christian Brauner
2026-10-12 10:20   ` Christian Brauner
2026-10-12 10:34   ` sashiko-bot
2026-10-13 16:01   ` Ryusuke Konishi
2026-10-13 16:01     ` Ryusuke Konishi
2026-10-12 10:20 ` [PATCH RFC 06/28] fat: " Christian Brauner
2026-10-12 10:20   ` Christian Brauner
2026-10-12 10:37   ` sashiko-bot
2026-10-12 10:20 ` [PATCH RFC 07/28] exfat: keep the current mount options on remount Christian Brauner
2026-10-12 10:20   ` Christian Brauner
2026-10-12 10:36   ` sashiko-bot
2026-10-12 10:20 ` [PATCH RFC 08/28] exfat: don't set SB_RDONLY after filesystem errors Christian Brauner
2026-10-12 10:20   ` Christian Brauner
2026-10-12 10:35   ` sashiko-bot
2026-10-12 10:20 ` [PATCH RFC 09/28] hfs: don't set SB_RDONLY after MDB write errors Christian Brauner
2026-10-12 10:20   ` Christian Brauner
2026-10-12 10:41   ` sashiko-bot
2026-10-12 22:57   ` [Jfs-discussion] " Viacheslav Dubeyko
2026-10-12 22:57     ` Viacheslav Dubeyko
2026-10-12 10:20 ` [PATCH RFC 10/28] hfsplus: don't set SB_RDONLY when creating the attributes tree Christian Brauner
2026-10-12 10:20   ` Christian Brauner
2026-10-12 10:36   ` sashiko-bot
2026-10-12 22:34   ` [Jfs-discussion] " Viacheslav Dubeyko
2026-10-12 22:34     ` Viacheslav Dubeyko
2026-10-12 10:20 ` [PATCH RFC 11/28] affs: don't set SB_RDONLY after filesystem errors Christian Brauner
2026-10-12 10:20   ` Christian Brauner
2026-10-12 10:41   ` sashiko-bot
2026-10-12 10:20 ` [PATCH RFC 12/28] ufs: " Christian Brauner
2026-10-12 10:20   ` Christian Brauner
2026-10-12 10:39   ` sashiko-bot
2026-10-12 10:20 ` [PATCH RFC 13/28] hpfs: " Christian Brauner
2026-10-12 10:20   ` Christian Brauner
2026-10-12 10:35   ` sashiko-bot
2026-10-12 10:20 ` [PATCH RFC 14/28] ntfs: " Christian Brauner
2026-10-12 10:20   ` Christian Brauner
2026-10-12 10:45   ` sashiko-bot
2026-10-12 10:21 ` [PATCH RFC 15/28] ocfs2: keep options that can't change on remount Christian Brauner
2026-10-12 10:21   ` Christian Brauner
2026-10-12 10:45   ` sashiko-bot
2026-10-12 10:21 ` [PATCH RFC 16/28] ocfs2: don't set SB_RDONLY after filesystem errors Christian Brauner
2026-10-12 10:21   ` Christian Brauner
2026-10-12 10:59   ` sashiko-bot
2026-10-12 10:21 ` [PATCH RFC 17/28] zonefs: don't set SB_RDONLY after I/O errors Christian Brauner
2026-10-12 10:21   ` Christian Brauner
2026-10-12 10:42   ` sashiko-bot
2026-10-12 10:21 ` [PATCH RFC 18/28] btrfs: check BTRFS_FS_STATE_RO instead of SB_RDONLY at runtime Christian Brauner
2026-10-12 10:21   ` Christian Brauner
2026-10-12 10:53   ` sashiko-bot [this message]
2026-10-12 10:21 ` [PATCH RFC 19/28] btrfs: don't set SB_RDONLY after filesystem errors Christian Brauner
2026-10-12 10:21   ` Christian Brauner
2026-10-12 11:05   ` sashiko-bot
2026-10-12 10:21 ` [PATCH RFC 20/28] gfs2: wait for a pending withdraw before remounting read-only Christian Brauner
2026-10-12 10:21   ` Christian Brauner
2026-10-12 10:44   ` sashiko-bot
2026-10-12 10:21 ` [PATCH RFC 21/28] gfs2: don't set SB_RDONLY on withdraw Christian Brauner
2026-10-12 10:21   ` Christian Brauner
2026-10-12 10:48   ` sashiko-bot
2026-10-12 10:21 ` [PATCH RFC 22/28] efivarfs: stop using SB_RDONLY for read-only efivar ops Christian Brauner
2026-10-12 10:21   ` Christian Brauner
2026-10-12 10:52   ` sashiko-bot
2026-10-12 10:21 ` [PATCH RFC 23/28] ubifs: don't set SB_RDONLY after errors Christian Brauner
2026-10-12 10:21   ` Christian Brauner
2026-10-12 11:05   ` sashiko-bot
2026-10-12 10:21 ` [PATCH RFC 24/28] selftests/filesystems: test filesystem errors while frozen Christian Brauner
2026-10-12 10:21   ` Christian Brauner
2026-10-12 10:47   ` sashiko-bot
2026-10-12 10:21 ` [PATCH RFC 25/28] ext4: allow remounting read-only in the emergency state Christian Brauner
2026-10-12 10:21   ` Christian Brauner
2026-10-12 10:49   ` sashiko-bot
2026-10-12 16:38   ` Jan Kara
2026-10-12 16:38     ` Jan Kara
2026-10-12 10:21 ` [PATCH RFC 26/28] selftests/filesystems: test ext4 remounts " Christian Brauner
2026-10-12 10:21   ` Christian Brauner
2026-10-12 10:52   ` sashiko-bot
2026-10-12 10:21 ` [PATCH RFC 27/28] xfs: allow remounting read-only after a shutdown Christian Brauner
2026-10-12 10:21   ` Christian Brauner
2026-10-12 10:55   ` sashiko-bot
2026-10-13  7:38   ` Christoph Hellwig
2026-10-13  7:38     ` Christoph Hellwig
2026-10-12 10:21 ` [PATCH RFC 28/28] selftests/filesystems: test xfs remounts " Christian Brauner
2026-10-12 10:21   ` Christian Brauner
2026-10-12 10:51   ` sashiko-bot
2026-10-13  7:40   ` Christoph Hellwig
2026-10-13  7:40     ` Christoph Hellwig
2026-10-12 16:53 ` [PATCH RFC 00/28] fs: don't set SB_RDONLY after filesystem errors Jan Kara
2026-10-12 16:53   ` Jan Kara
2026-10-13 19:39   ` Christian Brauner
2026-10-13 19:39     ` Christian Brauner

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=sashiko-outbox-167994@kernel.org \
    --to=sashiko-bot@kernel.org \
    --cc=brauner@kernel.org \
    --cc=dsterba@suse.cz \
    --cc=jlbec@evilplan.org \
    --cc=joseph.qi@linux.alibaba.com \
    --cc=linux-ext4@vger.kernel.org \
    --cc=mark@fasheh.com \
    --cc=sashiko-reviews@lists.linux.dev \
    --cc=tytso@mit.edu \
    /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.