xfs: idiotproof defer op type configuration
Recently, we forgot to port a new defer op type to xfsprogs, which caused us some userspace pain. Reorganize the way we make libxfs clients supply defer op type information so that all type information has to be provided at build time instead of risky runtime dynamic configuration. Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com> Reviewed-by: Eric Sandeen <sandeen@redhat.com> Reviewed-by: Brian Foster <bfoster@redhat.com>
This commit is contained in:
@@ -172,7 +172,13 @@
|
||||
* reoccur.
|
||||
*/
|
||||
|
||||
static const struct xfs_defer_op_type *defer_op_types[XFS_DEFER_OPS_TYPE_MAX];
|
||||
static const struct xfs_defer_op_type *defer_op_types[] = {
|
||||
[XFS_DEFER_OPS_TYPE_BMAP] = &xfs_bmap_update_defer_type,
|
||||
[XFS_DEFER_OPS_TYPE_REFCOUNT] = &xfs_refcount_update_defer_type,
|
||||
[XFS_DEFER_OPS_TYPE_RMAP] = &xfs_rmap_update_defer_type,
|
||||
[XFS_DEFER_OPS_TYPE_FREE] = &xfs_extent_free_defer_type,
|
||||
[XFS_DEFER_OPS_TYPE_AGFL_FREE] = &xfs_agfl_free_defer_type,
|
||||
};
|
||||
|
||||
/*
|
||||
* For each pending item in the intake list, log its intent item and the
|
||||
@@ -488,6 +494,7 @@ xfs_defer_add(
|
||||
struct xfs_defer_pending *dfp = NULL;
|
||||
|
||||
ASSERT(tp->t_flags & XFS_TRANS_PERM_LOG_RES);
|
||||
BUILD_BUG_ON(ARRAY_SIZE(defer_op_types) != XFS_DEFER_OPS_TYPE_MAX);
|
||||
|
||||
/*
|
||||
* Add the item to a pending item at the end of the intake list.
|
||||
@@ -517,14 +524,6 @@ xfs_defer_add(
|
||||
dfp->dfp_count++;
|
||||
}
|
||||
|
||||
/* Initialize a deferred operation list. */
|
||||
void
|
||||
xfs_defer_init_op_type(
|
||||
const struct xfs_defer_op_type *type)
|
||||
{
|
||||
defer_op_types[type->type] = type;
|
||||
}
|
||||
|
||||
/*
|
||||
* Move deferred ops from one transaction to another and reset the source to
|
||||
* initial state. This is primarily used to carry state forward across
|
||||
|
Reference in New Issue
Block a user