* [PATCHSET 1/2] xfsprogs: various bug fixes for 7.3
@ 2026-09-21 6:13 Darrick J. Wong
2026-09-21 6:13 ` [PATCH 1/3] xfs_scrub: terminate systemd services if the sysadmin unmounts Darrick J. Wong
` (2 more replies)
0 siblings, 3 replies; 8+ messages in thread
From: Darrick J. Wong @ 2026-09-21 6:13 UTC (permalink / raw)
To: aalbersh, djwong; +Cc: linux-xfs, linux-xfs
Hi all,
This series contains miscellaneous bugfixes.
If you're going to start using this code, I strongly recommend pulling
from my git trees, which are linked below.
With a bit of luck, this should all go splendidly.
Comments and questions are, as always, welcome.
--D
kernel git tree:
https://git.kernel.org/cgit/linux/kernel/git/djwong/xfs-linux.git/log/?h=random-fixes
xfsprogs git tree:
https://git.kernel.org/cgit/linux/kernel/git/djwong/xfsprogs-dev.git/log/?h=random-fixes
fstests git tree:
https://git.kernel.org/cgit/linux/kernel/git/djwong/xfstests-dev.git/log/?h=random-fixes
---
Commits in this patchset:
* xfs_scrub: terminate systemd services if the sysadmin unmounts
* mkfs: allow disabling quota flags
* xfs_quota: fix XFS_GETQSTAT parameter pointer
---
mkfs/xfs_mkfs.c | 42 ++++++++++++++++++++++++++-----------
quota/state.c | 2 +-
scrub/xfs_scrub@.service.in | 3 +++
scrub/xfs_scrub_media@.service.in | 3 +++
4 files changed, 37 insertions(+), 13 deletions(-)
^ permalink raw reply [flat|nested] 8+ messages in thread* [PATCH 1/3] xfs_scrub: terminate systemd services if the sysadmin unmounts 2026-09-21 6:13 [PATCHSET 1/2] xfsprogs: various bug fixes for 7.3 Darrick J. Wong @ 2026-09-21 6:13 ` Darrick J. Wong 2026-09-21 8:25 ` Christoph Hellwig 2026-09-21 6:14 ` [PATCH 2/3] mkfs: allow disabling quota flags Darrick J. Wong 2026-09-21 6:14 ` [PATCH 3/3] xfs_quota: fix XFS_GETQSTAT parameter pointer Darrick J. Wong 2 siblings, 1 reply; 8+ messages in thread From: Darrick J. Wong @ 2026-09-21 6:13 UTC (permalink / raw) To: aalbersh, djwong; +Cc: linux-xfs, linux-xfs From: Darrick J. Wong <djwong@kernel.org> We should make sure that any systemd services started on behalf of an XFS mount are torn down when the mount goes away. On a modern system, calling umount(8) while there's an xfs_scrub service running on that mount point will successfully remove the mount from the caller's mount namespace, but the filesystem remains mounted in the service's private mount namespace, with the effect that the filesystem stays mounted. This is probably not what the user wants. Per cks' blog, the way to fix this is through a BindTo= clause. Note: This isn't needed for xfs_healer because it only maintains a soft reference to the mounted filesystem and can reconnect to a filesystem if its mounts move. Link: https://utcc.utoronto.ca/~cks/space/blog/linux/SystemdStopOnFSUnmount Cc: <linux-xfs@vger.kernel.org> # v6.10.0 Fixes: 0109639eede4dc ("xfs_scrub: tighten up the security on the background systemd service") Signed-off-by: "Darrick J. Wong" <djwong@kernel.org> Reviewed-by: Andrey Albershteyn <aalbersh@kernel.org> --- scrub/xfs_scrub@.service.in | 3 +++ scrub/xfs_scrub_media@.service.in | 3 +++ 2 files changed, 6 insertions(+) diff --git a/scrub/xfs_scrub@.service.in b/scrub/xfs_scrub@.service.in index fb38319e95c148..3e4e79fe6a1913 100644 --- a/scrub/xfs_scrub@.service.in +++ b/scrub/xfs_scrub@.service.in @@ -19,6 +19,9 @@ ConditionCapability=CAP_SYS_RAWIO ConditionPathIsMountPoint=%f RequiresMountsFor=%f +# Terminate service if someone unmounts the filesystem +BindsTo=%i.mount + [Service] Type=oneshot Environment=SERVICE_MODE=1 diff --git a/scrub/xfs_scrub_media@.service.in b/scrub/xfs_scrub_media@.service.in index 98cd1ac44fbebd..954b8e92a1ce53 100644 --- a/scrub/xfs_scrub_media@.service.in +++ b/scrub/xfs_scrub_media@.service.in @@ -19,6 +19,9 @@ ConditionCapability=CAP_SYS_RAWIO ConditionPathIsMountPoint=%f RequiresMountsFor=%f +# Terminate service if someone unmounts the filesystem +BindsTo=%i.mount + [Service] Type=oneshot Environment=SERVICE_MODE=1 ^ permalink raw reply related [flat|nested] 8+ messages in thread
* Re: [PATCH 1/3] xfs_scrub: terminate systemd services if the sysadmin unmounts 2026-09-21 6:13 ` [PATCH 1/3] xfs_scrub: terminate systemd services if the sysadmin unmounts Darrick J. Wong @ 2026-09-21 8:25 ` Christoph Hellwig 0 siblings, 0 replies; 8+ messages in thread From: Christoph Hellwig @ 2026-09-21 8:25 UTC (permalink / raw) To: Darrick J. Wong; +Cc: aalbersh, linux-xfs Looks good: Reviewed-by: Christoph Hellwig <hch@lst.de> ^ permalink raw reply [flat|nested] 8+ messages in thread
* [PATCH 2/3] mkfs: allow disabling quota flags 2026-09-21 6:13 [PATCHSET 1/2] xfsprogs: various bug fixes for 7.3 Darrick J. Wong 2026-09-21 6:13 ` [PATCH 1/3] xfs_scrub: terminate systemd services if the sysadmin unmounts Darrick J. Wong @ 2026-09-21 6:14 ` Darrick J. Wong 2026-09-21 8:28 ` Christoph Hellwig 2026-09-21 6:14 ` [PATCH 3/3] xfs_quota: fix XFS_GETQSTAT parameter pointer Darrick J. Wong 2 siblings, 1 reply; 8+ messages in thread From: Darrick J. Wong @ 2026-09-21 6:14 UTC (permalink / raw) To: aalbersh, djwong; +Cc: linux-xfs, linux-xfs From: Darrick J. Wong <djwong@kernel.org> LOLLM noticed that with the new defaults= option, it's possible for the mkfs input validation code to allow the defaults file to turn on quotas and a cli option to turn off quotas. However, the qflags modification code doesn't clear flags correctly because previously it didn't have to; qflags is zero by default, so uquota=0 wouldn't change anything. Fix this by introducing a little more logic to clear a mask of quota flags and (if the value is 1) OR'ing a flag back in. Cc: <linux-xfs@vger.kernel.org> # v6.13.0 Fixes: 525f826429a868 ("mkfs: add quota flags when setting up filesystem") Signed-off-by: "Darrick J. Wong" <djwong@kernel.org> Assisted-by: LOLLM # finding obvious bugs --- mkfs/xfs_mkfs.c | 42 ++++++++++++++++++++++++++++++------------ 1 file changed, 30 insertions(+), 12 deletions(-) diff --git a/mkfs/xfs_mkfs.c b/mkfs/xfs_mkfs.c index 334367b81555ec..aa87951db0d041 100644 --- a/mkfs/xfs_mkfs.c +++ b/mkfs/xfs_mkfs.c @@ -2055,6 +2055,21 @@ log_opts_parser( return 0; } +static void +toggle_qflag( + struct opt_params *opts, + int subopt, + const char *value, + struct cli_params *cli, + uint16_t flag, + uint16_t mask) +{ + cli->sb_feat.qflags &= ~mask; + + if (getnum(value, opts, subopt)) + cli->sb_feat.qflags |= flag; +} + static int meta_opts_parser( struct opt_params *opts, @@ -2107,28 +2122,31 @@ meta_opts_parser( cli->sb_feat.metadir = getnum(value, opts, subopt); break; case M_UQUOTA: - if (getnum(value, opts, subopt)) - cli->sb_feat.qflags |= XFS_UQUOTA_ACCT | XFS_UQUOTA_ENFD; + toggle_qflag(opts, subopt, value, cli, + XFS_UQUOTA_ACCT | XFS_UQUOTA_ENFD, + XFS_UQUOTA_ACCT | XFS_UQUOTA_ENFD); break; case M_GQUOTA: - if (getnum(value, opts, subopt)) - cli->sb_feat.qflags |= XFS_GQUOTA_ACCT | XFS_GQUOTA_ENFD; + toggle_qflag(opts, subopt, value, cli, + XFS_GQUOTA_ACCT | XFS_GQUOTA_ENFD, + XFS_GQUOTA_ACCT | XFS_GQUOTA_ENFD); break; case M_PQUOTA: - if (getnum(value, opts, subopt)) - cli->sb_feat.qflags |= XFS_PQUOTA_ACCT | XFS_PQUOTA_ENFD; + toggle_qflag(opts, subopt, value, cli, + XFS_PQUOTA_ACCT | XFS_PQUOTA_ENFD, + XFS_PQUOTA_ACCT | XFS_PQUOTA_ENFD); break; case M_UQNOENFORCE: - if (getnum(value, opts, subopt)) - cli->sb_feat.qflags |= XFS_UQUOTA_ACCT; + toggle_qflag(opts, subopt, value, cli, XFS_UQUOTA_ACCT, + XFS_UQUOTA_ACCT | XFS_UQUOTA_ENFD); break; case M_GQNOENFORCE: - if (getnum(value, opts, subopt)) - cli->sb_feat.qflags |= XFS_GQUOTA_ACCT; + toggle_qflag(opts, subopt, value, cli, XFS_GQUOTA_ACCT, + XFS_GQUOTA_ACCT | XFS_GQUOTA_ENFD); break; case M_PQNOENFORCE: - if (getnum(value, opts, subopt)) - cli->sb_feat.qflags |= XFS_PQUOTA_ACCT; + toggle_qflag(opts, subopt, value, cli, XFS_PQUOTA_ACCT, + XFS_PQUOTA_ACCT | XFS_PQUOTA_ENFD); break; default: return -EINVAL; ^ permalink raw reply related [flat|nested] 8+ messages in thread
* Re: [PATCH 2/3] mkfs: allow disabling quota flags 2026-09-21 6:14 ` [PATCH 2/3] mkfs: allow disabling quota flags Darrick J. Wong @ 2026-09-21 8:28 ` Christoph Hellwig 0 siblings, 0 replies; 8+ messages in thread From: Christoph Hellwig @ 2026-09-21 8:28 UTC (permalink / raw) To: Darrick J. Wong; +Cc: aalbersh, linux-xfs Looks good: Reviewed-by: Christoph Hellwig <hch@lst.de> ^ permalink raw reply [flat|nested] 8+ messages in thread
* [PATCH 3/3] xfs_quota: fix XFS_GETQSTAT parameter pointer 2026-09-21 6:13 [PATCHSET 1/2] xfsprogs: various bug fixes for 7.3 Darrick J. Wong 2026-09-21 6:13 ` [PATCH 1/3] xfs_scrub: terminate systemd services if the sysadmin unmounts Darrick J. Wong 2026-09-21 6:14 ` [PATCH 2/3] mkfs: allow disabling quota flags Darrick J. Wong @ 2026-09-21 6:14 ` Darrick J. Wong 2026-09-21 8:29 ` Christoph Hellwig 2 siblings, 1 reply; 8+ messages in thread From: Darrick J. Wong @ 2026-09-21 6:14 UTC (permalink / raw) To: aalbersh, djwong; +Cc: linux-xfs, linux-xfs From: Darrick J. Wong <djwong@kernel.org> LOLLM noticed that XFS_GETQSTAT is supposed to take a pointer to a struct fs_quota_stat, not a struct fs_quota_statv. However, quotactl call throws away all such nuance by accepting any void pointer, so this got broken by the recent refactoring. Fix all that. Cc: <linux-xfs@vger.kernel.org> # v7.2.0 Fixes: 500da05860c792 ("libfrog: try to pass struct fs_path objects to quotactl wrapper") Signed-off-by: "Darrick J. Wong" <djwong@kernel.org> Assisted-by: LOLLM # Finding stupid bugs --- quota/state.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/quota/state.c b/quota/state.c index 3679c247ea6204..239b513125518d 100644 --- a/quota/state.c +++ b/quota/state.c @@ -206,7 +206,7 @@ state_quotafile_stat( ret = xfrog_quotactl(mount, XFS_GETQSTATV, type, 0, sv); if (ret < 0) { - ret = xfrog_quotactl(mount, XFS_GETQSTAT, type, 0, sv); + ret = xfrog_quotactl(mount, XFS_GETQSTAT, type, 0, s); if (ret < 0) { if (flags & VERBOSE_FLAG) fprintf(fp, ^ permalink raw reply related [flat|nested] 8+ messages in thread
* Re: [PATCH 3/3] xfs_quota: fix XFS_GETQSTAT parameter pointer 2026-09-21 6:14 ` [PATCH 3/3] xfs_quota: fix XFS_GETQSTAT parameter pointer Darrick J. Wong @ 2026-09-21 8:29 ` Christoph Hellwig 2026-09-21 22:43 ` Darrick J. Wong 0 siblings, 1 reply; 8+ messages in thread From: Christoph Hellwig @ 2026-09-21 8:29 UTC (permalink / raw) To: Darrick J. Wong; +Cc: aalbersh, linux-xfs On Sun, Sep 20, 2026 at 11:14:27PM -0700, Darrick J. Wong wrote: > From: Darrick J. Wong <djwong@kernel.org> > > LOLLM noticed that XFS_GETQSTAT is supposed to take a pointer to a > struct fs_quota_stat, not a struct fs_quota_statv. However, quotactl > call throws away all such nuance by accepting any void pointer, so this > got broken by the recent refactoring. Fix all that. Heh. Should we replace xfrog_quotactl with typed variants for each argument? For now this fix itself looks good, though: Reviewed-by: Christoph Hellwig <hch@lst.de> ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH 3/3] xfs_quota: fix XFS_GETQSTAT parameter pointer 2026-09-21 8:29 ` Christoph Hellwig @ 2026-09-21 22:43 ` Darrick J. Wong 0 siblings, 0 replies; 8+ messages in thread From: Darrick J. Wong @ 2026-09-21 22:43 UTC (permalink / raw) To: Christoph Hellwig; +Cc: aalbersh, linux-xfs On Mon, Sep 21, 2026 at 01:29:17AM -0700, Christoph Hellwig wrote: > On Sun, Sep 20, 2026 at 11:14:27PM -0700, Darrick J. Wong wrote: > > From: Darrick J. Wong <djwong@kernel.org> > > > > LOLLM noticed that XFS_GETQSTAT is supposed to take a pointer to a > > struct fs_quota_stat, not a struct fs_quota_statv. However, quotactl > > call throws away all such nuance by accepting any void pointer, so this > > got broken by the recent refactoring. Fix all that. > > Heh. Should we replace xfrog_quotactl with typed variants for each > argument? That sounds like a good idea. I think these are the only quota commands? #define Q_XQUOTAON XQM_CMD(1) /* enable accounting/enforcement */ #define Q_XQUOTAOFF XQM_CMD(2) /* disable accounting/enforcement */ #define Q_XGETQUOTA XQM_CMD(3) /* get disk limits and usage */ #define Q_XSETQLIM XQM_CMD(4) /* set disk limits */ #define Q_XGETQSTAT XQM_CMD(5) /* get quota subsystem status */ #define Q_XQUOTARM XQM_CMD(6) /* free disk space used by dquots */ #define Q_XQUOTASYNC XQM_CMD(7) /* delalloc flush, updates dquots */ #define Q_XGETQSTATV XQM_CMD(8) /* newer version of get quota */ #define Q_XGETNEXTQUOTA XQM_CMD(9) /* get disk limits and usage */ > For now this fix itself looks good, though: > > Reviewed-by: Christoph Hellwig <hch@lst.de> Thanks! --D ^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2026-09-21 22:43 UTC | newest] Thread overview: 8+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2026-09-21 6:13 [PATCHSET 1/2] xfsprogs: various bug fixes for 7.3 Darrick J. Wong 2026-09-21 6:13 ` [PATCH 1/3] xfs_scrub: terminate systemd services if the sysadmin unmounts Darrick J. Wong 2026-09-21 8:25 ` Christoph Hellwig 2026-09-21 6:14 ` [PATCH 2/3] mkfs: allow disabling quota flags Darrick J. Wong 2026-09-21 8:28 ` Christoph Hellwig 2026-09-21 6:14 ` [PATCH 3/3] xfs_quota: fix XFS_GETQSTAT parameter pointer Darrick J. Wong 2026-09-21 8:29 ` Christoph Hellwig 2026-09-21 22:43 ` Darrick J. Wong
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox