summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDarrick J. Wong <darrick.wong@oracle.com>2020-10-25 17:16:18 -0700
committerDarrick J. Wong <darrick.wong@oracle.com>2020-10-26 18:32:36 -0700
commitc1bbd7ed124391796b92e0c33b19cb248869fc3b (patch)
tree1338504d6729f6e8b014e030473bd95d62c045a1
parent28b0e24a0a55b991cf5a6c4bbf6376669de5fb5a (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.c31
-rw-r--r--fs/xfs/libxfs/xfs_ag_resv.h4
-rw-r--r--fs/xfs/xfs_mount.h6
-rw-r--r--fs/xfs/xfs_trace.h12
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 */