Commit f6b428a4 authored by Brian Foster's avatar Brian Foster Committed by Darrick J. Wong

xfs: track active state of allocation btree cursors

The upcoming allocation algorithm update searches multiple
allocation btree cursors concurrently. As such, it requires an
active state to track when a particular cursor should continue
searching. While active state will be modified based on higher level
logic, we can define base functionality based on the result of
allocation btree lookups.

Define an active flag in the private area of the btree cursor.
Update it based on the result of lookups in the existing allocation
btree helpers. Finally, provide a new helper to query the current
state.
Signed-off-by: default avatarBrian Foster <bfoster@redhat.com>
Reviewed-by: default avatarDarrick J. Wong <darrick.wong@oracle.com>
Signed-off-by: default avatarDarrick J. Wong <darrick.wong@oracle.com>
parent bdb2ed2d
...@@ -146,9 +146,13 @@ xfs_alloc_lookup_eq( ...@@ -146,9 +146,13 @@ xfs_alloc_lookup_eq(
xfs_extlen_t len, /* length of extent */ xfs_extlen_t len, /* length of extent */
int *stat) /* success/failure */ int *stat) /* success/failure */
{ {
int error;
cur->bc_rec.a.ar_startblock = bno; cur->bc_rec.a.ar_startblock = bno;
cur->bc_rec.a.ar_blockcount = len; cur->bc_rec.a.ar_blockcount = len;
return xfs_btree_lookup(cur, XFS_LOOKUP_EQ, stat); error = xfs_btree_lookup(cur, XFS_LOOKUP_EQ, stat);
cur->bc_private.a.priv.abt.active = (*stat == 1);
return error;
} }
/* /*
...@@ -162,9 +166,13 @@ xfs_alloc_lookup_ge( ...@@ -162,9 +166,13 @@ xfs_alloc_lookup_ge(
xfs_extlen_t len, /* length of extent */ xfs_extlen_t len, /* length of extent */
int *stat) /* success/failure */ int *stat) /* success/failure */
{ {
int error;
cur->bc_rec.a.ar_startblock = bno; cur->bc_rec.a.ar_startblock = bno;
cur->bc_rec.a.ar_blockcount = len; cur->bc_rec.a.ar_blockcount = len;
return xfs_btree_lookup(cur, XFS_LOOKUP_GE, stat); error = xfs_btree_lookup(cur, XFS_LOOKUP_GE, stat);
cur->bc_private.a.priv.abt.active = (*stat == 1);
return error;
} }
/* /*
...@@ -178,9 +186,19 @@ xfs_alloc_lookup_le( ...@@ -178,9 +186,19 @@ xfs_alloc_lookup_le(
xfs_extlen_t len, /* length of extent */ xfs_extlen_t len, /* length of extent */
int *stat) /* success/failure */ int *stat) /* success/failure */
{ {
int error;
cur->bc_rec.a.ar_startblock = bno; cur->bc_rec.a.ar_startblock = bno;
cur->bc_rec.a.ar_blockcount = len; cur->bc_rec.a.ar_blockcount = len;
return xfs_btree_lookup(cur, XFS_LOOKUP_LE, stat); error = xfs_btree_lookup(cur, XFS_LOOKUP_LE, stat);
cur->bc_private.a.priv.abt.active = (*stat == 1);
return error;
}
static inline bool
xfs_alloc_cur_active(
struct xfs_btree_cur *cur)
{
return cur && cur->bc_private.a.priv.abt.active;
} }
/* /*
......
...@@ -507,6 +507,7 @@ xfs_allocbt_init_cursor( ...@@ -507,6 +507,7 @@ xfs_allocbt_init_cursor(
cur->bc_private.a.agbp = agbp; cur->bc_private.a.agbp = agbp;
cur->bc_private.a.agno = agno; cur->bc_private.a.agno = agno;
cur->bc_private.a.priv.abt.active = false;
if (xfs_sb_version_hascrc(&mp->m_sb)) if (xfs_sb_version_hascrc(&mp->m_sb))
cur->bc_flags |= XFS_BTREE_CRC_BLOCKS; cur->bc_flags |= XFS_BTREE_CRC_BLOCKS;
......
...@@ -183,6 +183,9 @@ union xfs_btree_cur_private { ...@@ -183,6 +183,9 @@ union xfs_btree_cur_private {
unsigned long nr_ops; /* # record updates */ unsigned long nr_ops; /* # record updates */
int shape_changes; /* # of extent splits */ int shape_changes; /* # of extent splits */
} refc; } refc;
struct {
bool active; /* allocation cursor state */
} abt;
}; };
/* /*
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment