diff options
author | Darrick J. Wong <darrick.wong@oracle.com> | 2020-10-25 17:16:18 -0700 |
---|---|---|
committer | Darrick J. Wong <darrick.wong@oracle.com> | 2020-10-26 18:32:36 -0700 |
commit | c1bbd7ed124391796b92e0c33b19cb248869fc3b (patch) | |
tree | 1338504d6729f6e8b014e030473bd95d62c045a1 | |
parent | 28b0e24a0a55b991cf5a6c4bbf6376669de5fb5a (diff) |
xfs: widen per-ag reservation structures to 64-bits
Widen all of the fields in the per-ag reservation structure to be
64-bit fields in preparation for using it with the rt metadata btrees.
Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com>
-rw-r--r-- | fs/xfs/libxfs/xfs_ag_resv.c | 31 | ||||
-rw-r--r-- | fs/xfs/libxfs/xfs_ag_resv.h | 4 | ||||
-rw-r--r-- | fs/xfs/xfs_mount.h | 6 | ||||
-rw-r--r-- | fs/xfs/xfs_trace.h | 12 |
4 files changed, 27 insertions, 26 deletions
diff --git a/fs/xfs/libxfs/xfs_ag_resv.c b/fs/xfs/libxfs/xfs_ag_resv.c index 3dcc87629478..d01e9234e512 100644 --- a/fs/xfs/libxfs/xfs_ag_resv.c +++ b/fs/xfs/libxfs/xfs_ag_resv.c @@ -70,8 +70,8 @@ xfs_ag_resv_critical( struct xfs_perag *pag, enum xfs_ag_resv_type type) { - xfs_extlen_t avail; - xfs_extlen_t orig; + xfs_filblks_t avail; + xfs_filblks_t orig; switch (type) { case XFS_AG_RESV_METADATA: @@ -91,20 +91,21 @@ xfs_ag_resv_critical( trace_xfs_ag_resv_critical(pag, type, avail); /* Critically low if less than 10% or max btree height remains. */ - return XFS_TEST_ERROR(avail < orig / 10 || avail < XFS_BTREE_MAXLEVELS, - pag->pag_mount, XFS_ERRTAG_AG_RESV_CRITICAL); + return XFS_TEST_ERROR(avail < div_u64(orig, 10) || + avail < XFS_BTREE_MAXLEVELS, + pag->pag_mount, XFS_ERRTAG_AG_RESV_CRITICAL); } /* * How many blocks are reserved but not used, and therefore must not be * allocated away? */ -xfs_extlen_t +xfs_filblks_t xfs_ag_resv_needed( struct xfs_perag *pag, enum xfs_ag_resv_type type) { - xfs_extlen_t len; + xfs_filblks_t len; len = pag->pag_meta_resv.ar_reserved + pag->pag_rmapbt_resv.ar_reserved; switch (type) { @@ -131,7 +132,7 @@ __xfs_ag_resv_free( enum xfs_ag_resv_type type) { struct xfs_ag_resv *resv; - xfs_extlen_t oldresv; + xfs_filblks_t oldresv; int error; trace_xfs_ag_resv_free(pag, type, 0); @@ -178,13 +179,13 @@ static int __xfs_ag_resv_init( struct xfs_perag *pag, enum xfs_ag_resv_type type, - xfs_extlen_t ask, - xfs_extlen_t used) + xfs_filblks_t ask, + xfs_filblks_t used) { struct xfs_mount *mp = pag->pag_mount; struct xfs_ag_resv *resv; int error; - xfs_extlen_t hidden_space; + xfs_filblks_t hidden_space; if (used > ask) ask = used; @@ -324,7 +325,7 @@ xfs_ag_resv_alloc_extent( struct xfs_alloc_arg *args) { struct xfs_ag_resv *resv; - xfs_extlen_t len; + xfs_filblks_t len; uint field; trace_xfs_ag_resv_alloc_extent(pag, type, args->len); @@ -346,7 +347,7 @@ xfs_ag_resv_alloc_extent( return; } - len = min_t(xfs_extlen_t, args->len, resv->ar_reserved); + len = min_t(xfs_filblks_t, args->len, resv->ar_reserved); resv->ar_reserved -= len; if (type == XFS_AG_RESV_RMAPBT) return; @@ -364,9 +365,9 @@ xfs_ag_resv_free_extent( struct xfs_perag *pag, enum xfs_ag_resv_type type, struct xfs_trans *tp, - xfs_extlen_t len) + xfs_filblks_t len) { - xfs_extlen_t leftover; + xfs_filblks_t leftover; struct xfs_ag_resv *resv; trace_xfs_ag_resv_free_extent(pag, type, len); @@ -388,7 +389,7 @@ xfs_ag_resv_free_extent( return; } - leftover = min_t(xfs_extlen_t, len, resv->ar_asked - resv->ar_reserved); + leftover = min_t(xfs_filblks_t, len, resv->ar_asked - resv->ar_reserved); resv->ar_reserved += leftover; if (type == XFS_AG_RESV_RMAPBT) return; diff --git a/fs/xfs/libxfs/xfs_ag_resv.h b/fs/xfs/libxfs/xfs_ag_resv.h index 8a8eb4bc48bb..d851510e01de 100644 --- a/fs/xfs/libxfs/xfs_ag_resv.h +++ b/fs/xfs/libxfs/xfs_ag_resv.h @@ -10,13 +10,13 @@ int xfs_ag_resv_free(struct xfs_perag *pag); int xfs_ag_resv_init(struct xfs_perag *pag, struct xfs_trans *tp); bool xfs_ag_resv_critical(struct xfs_perag *pag, enum xfs_ag_resv_type type); -xfs_extlen_t xfs_ag_resv_needed(struct xfs_perag *pag, +xfs_filblks_t xfs_ag_resv_needed(struct xfs_perag *pag, enum xfs_ag_resv_type type); void xfs_ag_resv_alloc_extent(struct xfs_perag *pag, enum xfs_ag_resv_type type, struct xfs_alloc_arg *args); void xfs_ag_resv_free_extent(struct xfs_perag *pag, enum xfs_ag_resv_type type, - struct xfs_trans *tp, xfs_extlen_t len); + struct xfs_trans *tp, xfs_filblks_t len); /* * RMAPBT reservation accounting wrappers. Since rmapbt blocks are sourced from diff --git a/fs/xfs/xfs_mount.h b/fs/xfs/xfs_mount.h index be355c5a1414..b9e6c8e7f85b 100644 --- a/fs/xfs/xfs_mount.h +++ b/fs/xfs/xfs_mount.h @@ -315,11 +315,11 @@ xfs_daddr_to_agbno(struct xfs_mount *mp, xfs_daddr_t d) /* per-AG block reservation data structures*/ struct xfs_ag_resv { /* number of blocks originally reserved here */ - xfs_extlen_t ar_orig_reserved; + xfs_filblks_t ar_orig_reserved; /* number of blocks reserved here */ - xfs_extlen_t ar_reserved; + xfs_filblks_t ar_reserved; /* number of blocks originally asked for */ - xfs_extlen_t ar_asked; + xfs_filblks_t ar_asked; }; /* diff --git a/fs/xfs/xfs_trace.h b/fs/xfs/xfs_trace.h index f2a8f370d7cb..589ac8106db9 100644 --- a/fs/xfs/xfs_trace.h +++ b/fs/xfs/xfs_trace.h @@ -2737,7 +2737,7 @@ DEFINE_BMAP_DEFERRED_EVENT(xfs_bmap_deferred); /* per-AG reservation */ DECLARE_EVENT_CLASS(xfs_ag_resv_class, TP_PROTO(struct xfs_perag *pag, enum xfs_ag_resv_type resv, - xfs_extlen_t len), + unsigned long long len), TP_ARGS(pag, resv, len), TP_STRUCT__entry( __field(dev_t, dev) @@ -2745,9 +2745,9 @@ DECLARE_EVENT_CLASS(xfs_ag_resv_class, __field(int, resv) __field(xfs_extlen_t, freeblks) __field(xfs_extlen_t, flcount) - __field(xfs_extlen_t, reserved) - __field(xfs_extlen_t, asked) - __field(xfs_extlen_t, len) + __field(unsigned long long, reserved) + __field(unsigned long long, asked) + __field(unsigned long long, len) ), TP_fast_assign( struct xfs_ag_resv *r = xfs_perag_resv(pag, resv); @@ -2762,7 +2762,7 @@ DECLARE_EVENT_CLASS(xfs_ag_resv_class, __entry->len = len; ), TP_printk("dev %d:%d agno %u resv %d freeblks %u flcount %u " - "resv %u ask %u len %u", + "resv %llu ask %llu len %llu", MAJOR(__entry->dev), MINOR(__entry->dev), __entry->agno, __entry->resv, @@ -2775,7 +2775,7 @@ DECLARE_EVENT_CLASS(xfs_ag_resv_class, #define DEFINE_AG_RESV_EVENT(name) \ DEFINE_EVENT(xfs_ag_resv_class, name, \ TP_PROTO(struct xfs_perag *pag, enum xfs_ag_resv_type type, \ - xfs_extlen_t len), \ + unsigned long long len), \ TP_ARGS(pag, type, len)) /* per-AG reservation tracepoints */ |