From: DaeMyung Kang <charsyam@gmail.com>
To: linkinjeon@kernel.org, hyc.lee@gmail.com
Cc: linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org,
DaeMyung Kang <charsyam@gmail.com>
Subject: [PATCH 3/3] ntfs: mark quotas out of date on initial rw mount
Date: Tue, 12 May 2026 01:06:25 +0900 [thread overview]
Message-ID: <20260511160626.1268612-4-charsyam@gmail.com> (raw)
In-Reply-To: <20260511160626.1268612-1-charsyam@gmail.com>
The remount read-write path marks quotas out of date after emptying the
logfile, but initial read-write mount only loads $Quota and never calls
ntfs_mark_quotas_out_of_date().
That leaves quota tracking metadata looking up to date even though the
driver can modify the volume. Call the same helper after $Quota is loaded
during initial read-write mount. If marking quotas out of date fails and
the mount policy is on_errors=remount-ro, convert the mount to read-only
and set the volume error state, matching the nearby $Quota load failure
handling.
This intentionally follows the initial mount error policy rather than the
remount-rw path, where a quota marking failure rejects the remount with
-EROFS.
Move the load/mark/policy handling into a small helper,
ntfs_init_quota_for_mount(), which captures each call result in a local,
derives the failure reason, and gates the read-only downgrade on policy
in one place. This avoids calling helpers inside compound if conditions
and keeps ntfs_load_system_files() flat.
Signed-off-by: DaeMyung Kang <charsyam@gmail.com>
---
fs/ntfs/super.c | 46 +++++++++++++++++++++++++++++++++--------------
1 file changed, 35 insertions(+), 11 deletions(-)
diff --git a/fs/ntfs/super.c b/fs/ntfs/super.c
index 22dc786..8fa298f 100644
--- a/fs/ntfs/super.c
+++ b/fs/ntfs/super.c
@@ -1221,6 +1221,39 @@ static bool load_and_init_quota(struct ntfs_volume *vol)
return true;
}
+/*
+ * ntfs_init_quota_for_mount - finish quota setup at mount time
+ * @sb: super block of the volume being mounted
+ * @vol: ntfs volume to set up
+ *
+ * Load $Quota and, on a read-write mount, mark quotas out of date so that
+ * Windows rescans them on next boot. On failure, downgrade the mount to
+ * read-only when on_errors=remount-ro, matching the volume error policy.
+ */
+static void ntfs_init_quota_for_mount(struct super_block *sb,
+ struct ntfs_volume *vol)
+{
+ bool quota_loaded, quota_marked = true;
+ const char *reason = NULL;
+
+ quota_loaded = load_and_init_quota(vol);
+ if (quota_loaded && !sb_rdonly(sb))
+ quota_marked = ntfs_mark_quotas_out_of_date(vol);
+
+ if (!quota_loaded)
+ reason = "Failed to load $Quota";
+ else if (!quota_marked)
+ reason = "Failed to mark quotas out of date";
+
+ if (!reason || vol->on_errors != ON_ERRORS_REMOUNT_RO)
+ return;
+
+ sb->s_flags |= SB_RDONLY;
+ ntfs_error(sb, "%s. Mounting read-only. Run chkdsk.", reason);
+ /* This will prevent a read-write remount. */
+ NVolSetErrors(vol);
+}
+
/*
* load_and_init_attrdef - load the attribute definitions table for a volume
* @vol: ntfs super block describing device whose attrdef to load
@@ -1638,16 +1671,7 @@ get_ctx_vol_failed:
ntfs_error(sb, "Failed to load $Extend.");
goto iput_sec_err_out;
}
- /* Find the quota file, load it if present, and set it up. */
- if (!load_and_init_quota(vol) &&
- vol->on_errors == ON_ERRORS_REMOUNT_RO) {
- static const char *es1 = "Failed to load $Quota";
- static const char *es2 = ". Run chkdsk.";
-
- sb->s_flags |= SB_RDONLY;
- ntfs_error(sb, "%s. Mounting read-only%s", es1, es2);
- /* This will prevent a read-write remount. */
- NVolSetErrors(vol);
- }
+ /* Find the quota file, load it if present, and set it up. */
+ ntfs_init_quota_for_mount(sb, vol);
return true;
--
2.43.0
next prev parent reply other threads:[~2026-05-11 16:06 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-05-11 16:06 [PATCH 0/3] ntfs: fix quota out-of-date marking DaeMyung Kang
2026-05-11 16:06 ` [PATCH 1/3] ntfs: return view index entry data from lookup DaeMyung Kang
2026-05-13 2:14 ` Hyunchul Lee
2026-05-11 16:06 ` [PATCH 2/3] ntfs: use $Q when marking quotas out of date DaeMyung Kang
2026-05-13 14:53 ` Namjae Jeon
2026-05-11 16:06 ` DaeMyung Kang [this message]
2026-05-13 23:46 ` [PATCH 3/3] ntfs: mark quotas out of date on initial rw mount Hyunchul Lee
2026-05-14 13:25 ` CharSyam
2026-05-14 23:50 ` Hyunchul Lee
2026-05-15 0:35 ` CharSyam
2026-05-15 1:13 ` Hyunchul Lee
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=20260511160626.1268612-4-charsyam@gmail.com \
--to=charsyam@gmail.com \
--cc=hyc.lee@gmail.com \
--cc=linkinjeon@kernel.org \
--cc=linux-fsdevel@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
/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.