@@ -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__ */
@@ -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)
@@ -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 */
@@ -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);