xfs: add a xfs_qm_unmount_rt helper
authorChristoph Hellwig <hch@lst.de>
Mon, 4 Nov 2024 04:19:07 +0000 (20:19 -0800)
committerDarrick J. Wong <djwong@kernel.org>
Tue, 5 Nov 2024 21:38:36 +0000 (13:38 -0800)
RT group enabled file systems fix the bug where we pointlessly attach
quotas to the RT bitmap and summary files.  Split the code to detach the
quotas into a helper, make it conditional and document the differing
behavior for RT group and pre-RT group file systems.

Signed-off-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: Darrick J. Wong <djwong@kernel.org>
Signed-off-by: Darrick J. Wong <djwong@kernel.org>
fs/xfs/xfs_qm.c

index b94d6f1..3663c4f 100644 (file)
@@ -29,6 +29,7 @@
 #include "xfs_health.h"
 #include "xfs_da_format.h"
 #include "xfs_metafile.h"
+#include "xfs_rtgroup.h"
 
 /*
  * The global quota manager. There is only one of these for the entire
@@ -210,6 +211,16 @@ xfs_qm_unmount(
        }
 }
 
+static void
+xfs_qm_unmount_rt(
+       struct xfs_mount        *mp)
+{
+       if (mp->m_rbmip)
+               xfs_qm_dqdetach(mp->m_rbmip);
+       if (mp->m_rsumip)
+               xfs_qm_dqdetach(mp->m_rsumip);
+}
+
 /*
  * Called from the vfsops layer.
  */
@@ -223,10 +234,13 @@ xfs_qm_unmount_quotas(
         */
        ASSERT(mp->m_rootip);
        xfs_qm_dqdetach(mp->m_rootip);
-       if (mp->m_rbmip)
-               xfs_qm_dqdetach(mp->m_rbmip);
-       if (mp->m_rsumip)
-               xfs_qm_dqdetach(mp->m_rsumip);
+
+       /*
+        * For pre-RTG file systems, the RT inodes have quotas attached,
+        * detach them now.
+        */
+       if (!xfs_has_rtgroups(mp))
+               xfs_qm_unmount_rt(mp);
 
        /*
         * Release the quota inodes.