All of lore.kernel.org
 help / color / mirror / Atom feed
From: sashiko-bot@kernel.org
To: "Christian Brauner" <brauner@kernel.org>, "Jan Kara" <jack@suse.com>
Cc: "Al Viro" <viro@zeniv.linux.org.uk>,
	linux-ext4@vger.kernel.org, linux-mm@kvack.org,
	linux-efi@vger.kernel.org, linux-mtd@lists.infradead.org,
	"Jan Kara" <jack@suse.cz>,
	dsterba@suse.cz, tytso@mit.edu, "Mark Fasheh" <mark@fasheh.com>,
	"Joel Becker" <jlbec@evilplan.org>,
	"Joseph Qi" <joseph.qi@linux.alibaba.com>
Subject: Re: [PATCH v3 05/33] fs: add a generic emergency read-only state
Date: Sat, 14 Nov 2026 12:03:24 +0000	[thread overview]
Message-ID: <sashiko-outbox-214456@kernel.org> (raw)
In-Reply-To: <20261113-work-fs-sb_rdonly-v3-5-0be92bb73709@kernel.org>

Thank you for your contribution! Sashiko AI review found 2 potential
issues to consider:
- [Medium] vfs: change_mount_ro_state() skips mnt_make_readonly() on
  sb_emergency_ro()
- [Low] quota: do_quotactl() misses sb_emergency_ro() in Q_XQUOTASYNC
  and Q_SYNC
--

commit aa167d356b416c1c40da72fb215b9d988cb411bc
Author: Christian Brauner <brauner@kernel.org>

fs: add a generic emergency read-only state

This commit adds an SB_STATE_EMERGENCY_RO superblock state flag and
updates VFS paths to reject modifications with -EROFS when a filesystem
switches to emergency read-only mode without setting SB_RDONLY.

> diff --git a/fs/namespace.c b/fs/namespace.c
> index 9f6ec35c7b9cd..55fa09818ef90 100644
> --- a/fs/namespace.c
> +++ b/fs/namespace.c
> @@ -396,7 +396,7 @@ static struct mount *alloc_vfsmnt(const char *name)
>   */
>  bool __mnt_is_readonly(const struct vfsmount *mnt)
>  {
> -	return (mnt->mnt_flags & MNT_READONLY) || sb_rdonly(mnt->mnt_sb);
> +	return (mnt->mnt_flags & MNT_READONLY) || sb_rdonly_any(mnt->mnt_sb);
>  }
>  EXPORT_SYMBOL_GPL(__mnt_is_readonly);

[Severity: Medium]
Does changing __mnt_is_readonly() to check sb_rdonly_any() cause
change_mount_ro_state() to skip mnt_make_readonly() when sb_emergency_ro()
is set?

fs/namespace.c:change_mount_ro_state() {
	bool readonly_request = (mnt_flags & MNT_READONLY);

	if (readonly_request == __mnt_is_readonly(&mnt->mnt))
		return 0;

	if (readonly_request)
		return mnt_make_readonly(mnt);
    ...
}

When a read-write mount has open writable files or active writers and the
filesystem enters SB_STATE_EMERGENCY_RO, a mount(2) call with
MS_REMOUNT | MS_BIND | MS_RDONLY (do_reconfigure_mnt()) sees
__mnt_is_readonly() == true, skips mnt_make_readonly(), and sets
MNT_READONLY via set_mount_attributes() without calling
mnt_hold_writers().  If reconfigure_super() is later called to remount the
superblock read-only, sb_prepare_remount_readonly() skips mounts that
already have MNT_READONLY set and transitions the superblock to SB_RDONLY
while active writers remain on that mount.

[ ... ]

> diff --git a/fs/quota/quota.c b/fs/quota/quota.c
> index 33bacd7075800..b488fb1f9cc44 100644
> --- a/fs/quota/quota.c
> +++ b/fs/quota/quota.c
> @@ -783,6 +783,19 @@ static int do_quotactl(struct super_block *sb, int type, int cmd, qid_t id,
>  	if (ret < 0)
>  		return ret;
>  
> +	/* An error made the filesystem read-only. */
> +	if (sb_emergency_ro(sb)) {
> +		switch (cmd) {
> +		case Q_QUOTAON:
> +		case Q_SETINFO:
> +		case Q_SETQUOTA:
> +		case Q_XQUOTAON:
> +		case Q_XQUOTARM:
> +		case Q_XSETQLIM:
> +			return -EROFS;
> +		}
> +	}
> +
>  	switch (cmd) {
>  	case Q_QUOTAON:
>  		return quota_quotaon(sb, type, id, path);

[Severity: Low]
Should Q_XQUOTASYNC and Q_SYNC also be rejected here when
sb_emergency_ro(sb) is set (and quota_sync_one() guarded by
!sb_rdonly_any(sb))?

In do_quotactl(), Q_XQUOTASYNC still checks sb_rdonly(sb) instead of
sb_rdonly_any(sb), returning 0 rather than -EROFS in emergency read-only
mode:

fs/quota/quota.c:do_quotactl() {
    ...
	case Q_XQUOTASYNC:
		if (sb_rdonly(sb))
			return -EROFS;
		/* XFS quotas are fully coherent now, making this call a noop */
		return 0;
    ...
}

Q_SYNC and quota_sync_one() also call ->quota_sync() directly, relying on
dquot_quota_sync() rather than do_quotactl() to reject emergency read-only
superblocks.

-- 
Sashiko AI review · https://sashiko.dev/#/patchset/20261113-work-fs-sb_rdonly-v3-0-0be92bb73709@kernel.org?part=5

WARNING: multiple messages have this Message-ID (diff)
From: sashiko-bot@kernel.org
To: "Christian Brauner" <brauner@kernel.org>, "Jan Kara" <jack@suse.com>
Cc: "Al Viro" <viro@zeniv.linux.org.uk>,
	linux-ext4@vger.kernel.org, linux-mm@kvack.org,
	linux-efi@vger.kernel.org, linux-mtd@lists.infradead.org,
	"Jan Kara" <jack@suse.cz>,
	dsterba@suse.cz, tytso@mit.edu, "Mark Fasheh" <mark@fasheh.com>,
	"Joel Becker" <jlbec@evilplan.org>,
	"Joseph Qi" <joseph.qi@linux.alibaba.com>
Subject: Re: [PATCH v3 05/33] fs: add a generic emergency read-only state
Date: Sat, 14 Nov 2026 12:03:24 +0000	[thread overview]
Message-ID: <sashiko-outbox-214456@kernel.org> (raw)
In-Reply-To: <20261113-work-fs-sb_rdonly-v3-5-0be92bb73709@kernel.org>

Thank you for your contribution! Sashiko AI review found 2 potential
issues to consider:
- [Medium] vfs: change_mount_ro_state() skips mnt_make_readonly() on
  sb_emergency_ro()
- [Low] quota: do_quotactl() misses sb_emergency_ro() in Q_XQUOTASYNC
  and Q_SYNC
--

commit aa167d356b416c1c40da72fb215b9d988cb411bc
Author: Christian Brauner <brauner@kernel.org>

fs: add a generic emergency read-only state

This commit adds an SB_STATE_EMERGENCY_RO superblock state flag and
updates VFS paths to reject modifications with -EROFS when a filesystem
switches to emergency read-only mode without setting SB_RDONLY.

> diff --git a/fs/namespace.c b/fs/namespace.c
> index 9f6ec35c7b9cd..55fa09818ef90 100644
> --- a/fs/namespace.c
> +++ b/fs/namespace.c
> @@ -396,7 +396,7 @@ static struct mount *alloc_vfsmnt(const char *name)
>   */
>  bool __mnt_is_readonly(const struct vfsmount *mnt)
>  {
> -	return (mnt->mnt_flags & MNT_READONLY) || sb_rdonly(mnt->mnt_sb);
> +	return (mnt->mnt_flags & MNT_READONLY) || sb_rdonly_any(mnt->mnt_sb);
>  }
>  EXPORT_SYMBOL_GPL(__mnt_is_readonly);

[Severity: Medium]
Does changing __mnt_is_readonly() to check sb_rdonly_any() cause
change_mount_ro_state() to skip mnt_make_readonly() when sb_emergency_ro()
is set?

fs/namespace.c:change_mount_ro_state() {
	bool readonly_request = (mnt_flags & MNT_READONLY);

	if (readonly_request == __mnt_is_readonly(&mnt->mnt))
		return 0;

	if (readonly_request)
		return mnt_make_readonly(mnt);
    ...
}

When a read-write mount has open writable files or active writers and the
filesystem enters SB_STATE_EMERGENCY_RO, a mount(2) call with
MS_REMOUNT | MS_BIND | MS_RDONLY (do_reconfigure_mnt()) sees
__mnt_is_readonly() == true, skips mnt_make_readonly(), and sets
MNT_READONLY via set_mount_attributes() without calling
mnt_hold_writers().  If reconfigure_super() is later called to remount the
superblock read-only, sb_prepare_remount_readonly() skips mounts that
already have MNT_READONLY set and transitions the superblock to SB_RDONLY
while active writers remain on that mount.

[ ... ]

> diff --git a/fs/quota/quota.c b/fs/quota/quota.c
> index 33bacd7075800..b488fb1f9cc44 100644
> --- a/fs/quota/quota.c
> +++ b/fs/quota/quota.c
> @@ -783,6 +783,19 @@ static int do_quotactl(struct super_block *sb, int type, int cmd, qid_t id,
>  	if (ret < 0)
>  		return ret;
>  
> +	/* An error made the filesystem read-only. */
> +	if (sb_emergency_ro(sb)) {
> +		switch (cmd) {
> +		case Q_QUOTAON:
> +		case Q_SETINFO:
> +		case Q_SETQUOTA:
> +		case Q_XQUOTAON:
> +		case Q_XQUOTARM:
> +		case Q_XSETQLIM:
> +			return -EROFS;
> +		}
> +	}
> +
>  	switch (cmd) {
>  	case Q_QUOTAON:
>  		return quota_quotaon(sb, type, id, path);

[Severity: Low]
Should Q_XQUOTASYNC and Q_SYNC also be rejected here when
sb_emergency_ro(sb) is set (and quota_sync_one() guarded by
!sb_rdonly_any(sb))?

In do_quotactl(), Q_XQUOTASYNC still checks sb_rdonly(sb) instead of
sb_rdonly_any(sb), returning 0 rather than -EROFS in emergency read-only
mode:

fs/quota/quota.c:do_quotactl() {
    ...
	case Q_XQUOTASYNC:
		if (sb_rdonly(sb))
			return -EROFS;
		/* XFS quotas are fully coherent now, making this call a noop */
		return 0;
    ...
}

Q_SYNC and quota_sync_one() also call ->quota_sync() directly, relying on
dquot_quota_sync() rather than do_quotactl() to reject emergency read-only
superblocks.

-- 
Sashiko AI review · https://sashiko.dev/#/patchset/20261113-work-fs-sb_rdonly-v3-0-0be92bb73709@kernel.org?part=5

______________________________________________________
Linux MTD discussion mailing list
http://lists.infradead.org/mailman/listinfo/linux-mtd/

  parent reply	other threads:[~2026-11-14 12:03 UTC|newest]

Thread overview: 118+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-11-13 11:58 [PATCH v3 00/33] fs: don't set SB_RDONLY after filesystem errors Christian Brauner
2026-11-13 11:58 ` Christian Brauner
2026-11-13 11:58 ` [PATCH v3 01/33] jfs: free uncommitted anonymous tlocks when evicting an inode Christian Brauner
2026-11-13 11:58   ` Christian Brauner
2026-11-14 12:03   ` sashiko-bot
2026-11-14 12:03     ` sashiko-bot
2026-11-13 11:58 ` [PATCH v3 02/33] jfs: use jfs_symlink_inode_operations in jfs_iget() Christian Brauner
2026-11-13 11:58   ` Christian Brauner
2026-11-14 12:03   ` sashiko-bot
2026-11-13 11:58 ` [PATCH v3 03/33] ecryptfs: don't leak the inode when a lookup can't open the lower file Christian Brauner
2026-11-13 11:58   ` Christian Brauner
2026-11-14 12:03   ` sashiko-bot
2026-11-13 11:59 ` [PATCH v3 04/33] ecryptfs: fall back to a read-only " Christian Brauner
2026-11-13 11:59   ` Christian Brauner
2026-11-14 12:03   ` sashiko-bot
2026-11-13 11:59 ` [PATCH v3 05/33] fs: add a generic emergency read-only state Christian Brauner
2026-11-13 11:59   ` Christian Brauner
2026-11-13 14:53   ` Jan Kara
2026-11-13 14:53     ` Jan Kara
2026-11-14 12:03   ` sashiko-bot [this message]
2026-11-14 12:03     ` sashiko-bot
2026-11-13 11:59 ` [PATCH v3 06/33] ext2: don't set SB_RDONLY after filesystem errors Christian Brauner
2026-11-13 11:59   ` Christian Brauner
2026-11-13 14:54   ` Jan Kara
2026-11-13 14:54     ` Jan Kara
2026-11-14 12:03   ` sashiko-bot
2026-11-13 11:59 ` [PATCH v3 07/33] jfs: " Christian Brauner
2026-11-13 11:59   ` Christian Brauner
2026-11-14 12:03   ` sashiko-bot
2026-11-13 11:59 ` [PATCH v3 08/33] nilfs2: " Christian Brauner
2026-11-13 11:59   ` Christian Brauner
2026-11-14 12:03   ` sashiko-bot
2026-11-13 11:59 ` [PATCH v3 09/33] fat: " Christian Brauner
2026-11-13 11:59   ` Christian Brauner
2026-11-14 12:03   ` sashiko-bot
2026-11-14 12:03     ` sashiko-bot
2026-11-13 11:59 ` [PATCH v3 10/33] exfat: keep the current mount options on remount Christian Brauner
2026-11-13 11:59   ` Christian Brauner
2026-11-14 12:03   ` sashiko-bot
2026-11-13 11:59 ` [PATCH v3 11/33] exfat: don't set SB_RDONLY after filesystem errors Christian Brauner
2026-11-13 11:59   ` Christian Brauner
2026-11-14 12:03   ` sashiko-bot
2026-11-14 12:03     ` sashiko-bot
2026-11-13 11:59 ` [PATCH v3 12/33] exfat: use the generic emergency read-only state Christian Brauner
2026-11-13 11:59   ` Christian Brauner
2026-11-14 12:03   ` sashiko-bot
2026-11-14 12:03     ` sashiko-bot
2026-11-13 11:59 ` [PATCH v3 13/33] hfs: don't set SB_RDONLY after MDB write errors Christian Brauner
2026-11-13 11:59   ` Christian Brauner
2026-11-14 12:03   ` sashiko-bot
2026-11-14 12:03     ` sashiko-bot
2026-11-13 11:59 ` [PATCH v3 14/33] hfs: use the generic emergency read-only state Christian Brauner
2026-11-13 11:59   ` Christian Brauner
2026-11-14 12:03   ` sashiko-bot
2026-11-13 11:59 ` [PATCH v3 15/33] hfsplus: don't set SB_RDONLY when creating the attributes tree Christian Brauner
2026-11-13 11:59   ` Christian Brauner
2026-11-14 12:03   ` sashiko-bot
2026-11-13 11:59 ` [PATCH v3 16/33] affs: don't set SB_RDONLY after filesystem errors Christian Brauner
2026-11-13 11:59   ` Christian Brauner
2026-11-14 12:03   ` sashiko-bot
2026-11-13 11:59 ` [PATCH v3 17/33] ufs: " Christian Brauner
2026-11-13 11:59   ` Christian Brauner
2026-11-14 12:03   ` sashiko-bot
2026-11-14 12:03     ` sashiko-bot
2026-11-13 11:59 ` [PATCH v3 18/33] hpfs: " Christian Brauner
2026-11-13 11:59   ` Christian Brauner
2026-11-14 12:03   ` sashiko-bot
2026-11-13 11:59 ` [PATCH v3 19/33] ntfs: " Christian Brauner
2026-11-13 11:59   ` Christian Brauner
2026-11-14 12:03   ` sashiko-bot
2026-11-14 12:03     ` sashiko-bot
2026-11-13 11:59 ` [PATCH v3 20/33] ntfs: use the generic emergency read-only state Christian Brauner
2026-11-13 11:59   ` Christian Brauner
2026-11-14 12:03   ` sashiko-bot
2026-11-13 11:59 ` [PATCH v3 21/33] ocfs2: keep the current mount options on remount Christian Brauner
2026-11-13 11:59   ` Christian Brauner
2026-11-14 12:03   ` sashiko-bot
2026-11-13 11:59 ` [PATCH v3 22/33] ocfs2: don't set SB_RDONLY after filesystem errors Christian Brauner
2026-11-13 11:59   ` Christian Brauner
2026-11-14 12:03   ` sashiko-bot
2026-11-13 11:59 ` [PATCH v3 23/33] zonefs: don't set SB_RDONLY after I/O errors Christian Brauner
2026-11-13 11:59   ` Christian Brauner
2026-11-14 12:03   ` sashiko-bot
2026-11-13 11:59 ` [PATCH v3 24/33] zonefs: use the generic emergency read-only state Christian Brauner
2026-11-13 11:59   ` Christian Brauner
2026-11-14 12:03   ` sashiko-bot
2026-11-13 11:59 ` [PATCH v3 25/33] btrfs: check BTRFS_FS_STATE_RO instead of SB_RDONLY at runtime Christian Brauner
2026-11-13 11:59   ` Christian Brauner
2026-11-14 12:03   ` sashiko-bot
2026-11-13 11:59 ` [PATCH v3 26/33] btrfs: don't set SB_RDONLY after filesystem errors Christian Brauner
2026-11-13 11:59   ` Christian Brauner
2026-11-14 12:03   ` sashiko-bot
2026-11-14 12:03     ` sashiko-bot
2026-11-13 11:59 ` [PATCH v3 27/33] gfs2: wait for a pending withdraw before remounting read-only Christian Brauner
2026-11-13 11:59   ` Christian Brauner
2026-11-14 12:03   ` sashiko-bot
2026-11-14 12:03     ` sashiko-bot
2026-11-13 11:59 ` [PATCH v3 28/33] gfs2: don't set SB_RDONLY on withdraw Christian Brauner
2026-11-13 11:59   ` Christian Brauner
2026-11-14 12:03   ` sashiko-bot
2026-11-13 11:59 ` [PATCH v3 29/33] efivarfs: stop using SB_RDONLY for read-only efivar ops Christian Brauner
2026-11-13 11:59   ` Christian Brauner
2026-11-14 12:03   ` sashiko-bot
2026-11-13 11:59 ` [PATCH v3 30/33] ubifs: don't set SB_RDONLY after errors Christian Brauner
2026-11-13 11:59   ` Christian Brauner
2026-11-14  2:17   ` Zhihao Cheng
2026-11-14  2:17     ` Zhihao Cheng
2026-11-14 12:03   ` sashiko-bot
2026-11-14 12:03     ` sashiko-bot
2026-11-13 11:59 ` [PATCH v3 31/33] ext4: allow remounting read-only in the emergency state Christian Brauner
2026-11-13 11:59   ` Christian Brauner
2026-11-14 12:03   ` sashiko-bot
2026-11-13 11:59 ` [PATCH v3 32/33] ext4: use the generic emergency read-only state Christian Brauner
2026-11-13 11:59   ` Christian Brauner
2026-11-14 12:03   ` sashiko-bot
2026-11-13 11:59 ` [PATCH v3 33/33] xfs: allow remounting read-only after a shutdown Christian Brauner
2026-11-13 11:59   ` Christian Brauner
2026-11-14 12:03   ` sashiko-bot

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-214456@kernel.org \
    --to=sashiko-bot@kernel.org \
    --cc=brauner@kernel.org \
    --cc=dsterba@suse.cz \
    --cc=jack@suse.com \
    --cc=jack@suse.cz \
    --cc=jlbec@evilplan.org \
    --cc=joseph.qi@linux.alibaba.com \
    --cc=linux-efi@vger.kernel.org \
    --cc=linux-ext4@vger.kernel.org \
    --cc=linux-mm@kvack.org \
    --cc=linux-mtd@lists.infradead.org \
    --cc=mark@fasheh.com \
    --cc=sashiko-reviews@lists.linux.dev \
    --cc=tytso@mit.edu \
    --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.