]> www.infradead.org Git - users/hch/xfsprogs.git/commitdiff
FIXUP: xfs: make metabtree reservations global
authorChristoph Hellwig <hch@lst.de>
Fri, 17 Jan 2025 09:39:30 +0000 (10:39 +0100)
committerChristoph Hellwig <hch@lst.de>
Mon, 14 Apr 2025 05:25:38 +0000 (07:25 +0200)
Signed-off-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: "Darrick J. Wong" <djwong@kernel.org>
include/spinlock.h
include/xfs_mount.h
libxfs/libxfs_priv.h
mkfs/xfs_mkfs.c

index 82973726b101335a717800b6de087169539ae98f..73bd8c078fea58d5c543b25868591dcb8a15583d 100644 (file)
@@ -22,4 +22,9 @@ typedef pthread_mutex_t       spinlock_t;
 #define spin_trylock(l)                (pthread_mutex_trylock(l) != EBUSY)
 #define spin_unlock(l)         pthread_mutex_unlock(l)
 
+#define mutex_init(l)          pthread_mutex_init(l, NULL)
+#define mutex_lock(l)          pthread_mutex_lock(l)
+#define mutex_trylock(l)       (pthread_mutex_trylock(l) != EBUSY)
+#define mutex_unlock(l)                pthread_mutex_unlock(l)
+
 #endif /* __LIBXFS_SPINLOCK_H__ */
index e0f72fc32b251691a237819530218b9eb6e130c9..0acf952eb9d73de7c2005b609f6b3b4f8d316265 100644 (file)
@@ -164,6 +164,10 @@ typedef struct xfs_mount {
        atomic64_t              m_allocbt_blks;
        spinlock_t              m_perag_lock;   /* lock for m_perag_tree */
 
+       pthread_mutex_t         m_metafile_resv_lock;
+       uint64_t                m_metafile_resv_target;
+       uint64_t                m_metafile_resv_used;
+       uint64_t                m_metafile_resv_avail;
 } xfs_mount_t;
 
 #define M_IGEO(mp)             (&(mp)->m_ino_geo)
index cb4800de0b1100b006ffb6cf7e9dee7416cd2a0c..82952b0db62923af255748a15682bfd8d1e033fc 100644 (file)
@@ -151,6 +151,7 @@ enum ce { CE_DEBUG, CE_CONT, CE_NOTE, CE_WARN, CE_ALERT, CE_PANIC };
 
 #define xfs_force_shutdown(d,n)                ((void) 0)
 #define xfs_mod_delalloc(a,b,c)                ((void) 0)
+#define xfs_mod_sb_delalloc(sb, d)     ((void) 0)
 
 /* stop unused var warnings by assigning mp to itself */
 
index 3f4455d4638315d233d50ff1bcda19b85dc23d15..ec82e05bf4e49d93d6e8a0818bd0d710f915156a 100644 (file)
@@ -5102,8 +5102,6 @@ check_rt_meta_prealloc(
        struct xfs_mount        *mp)
 {
        struct xfs_perag        *pag = NULL;
-       struct xfs_rtgroup      *rtg = NULL;
-       xfs_filblks_t           ask;
        int                     error;
 
        /*
@@ -5123,27 +5121,12 @@ check_rt_meta_prealloc(
                }
        }
 
-       /* Realtime metadata btree inode */
-       while ((rtg = xfs_rtgroup_next(mp, rtg))) {
-               ask = libxfs_rtrmapbt_calc_reserves(mp);
-               error = -libxfs_metafile_resv_init(rtg_rmap(rtg), ask);
-               if (error)
-                       prealloc_fail(mp, error, ask, _("realtime rmap btree"));
-
-               ask = libxfs_rtrefcountbt_calc_reserves(mp);
-               error = -libxfs_metafile_resv_init(rtg_refcount(rtg), ask);
-               if (error)
-                       prealloc_fail(mp, error, ask,
-                                       _("realtime refcount btree"));
-       }
+       error = -libxfs_metafile_resv_init(mp);
+       if (error)
+               prealloc_fail(mp, error, 0, _("metadata files"));
 
-       /* Unreserve the realtime metadata reservations. */
-       while ((rtg = xfs_rtgroup_next(mp, rtg))) {
-               libxfs_metafile_resv_free(rtg_rmap(rtg));
-               libxfs_metafile_resv_free(rtg_refcount(rtg));
-       }
+       libxfs_metafile_resv_free(mp);
 
-       /* Unreserve the per-AG reservations. */
        while ((pag = xfs_perag_next(mp, pag)))
                libxfs_ag_resv_free(pag);