diff options
author | Brian Foster <bfoster@redhat.com> | 2019-04-23 10:54:06 -0400 |
---|---|---|
committer | Darrick J. Wong <darrick.wong@oracle.com> | 2019-04-23 11:36:23 -0400 |
commit | 362f5e745ae2ee2be9cf181b3a22917d619b81a1 (patch) | |
tree | 15677f6a8309569104233403e19b77cdc3f095dd | |
parent | 945c941fcd82bac3a8ea2b89c635651f323bd609 (diff) |
xfs: assert that we don't enter agfl freeing with a non-permanent transaction
Block allocation requires a permanent transaction for deferred AGFL
frees. Add an assert in the block allocation path to make explicit and
obvious to future callers the requirement of a transaction with a
permanent reservation.
Reported-by: Darrick J. Wong <darrick.wong@oracle.com>
Signed-off-by: Brian Foster <bfoster@redhat.com>
Reviewed-by: Darrick J. Wong <darrick.wong@oracle.com>
[darrick: split this out from the previous patch per hch request]
Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com>
-rw-r--r-- | fs/xfs/libxfs/xfs_alloc.c | 3 |
1 files changed, 3 insertions, 0 deletions
diff --git a/fs/xfs/libxfs/xfs_alloc.c b/fs/xfs/libxfs/xfs_alloc.c index 857a53e58b94..a9ff3cf82cce 100644 --- a/fs/xfs/libxfs/xfs_alloc.c +++ b/fs/xfs/libxfs/xfs_alloc.c | |||
@@ -2243,6 +2243,9 @@ xfs_alloc_fix_freelist( | |||
2243 | xfs_extlen_t need; /* total blocks needed in freelist */ | 2243 | xfs_extlen_t need; /* total blocks needed in freelist */ |
2244 | int error = 0; | 2244 | int error = 0; |
2245 | 2245 | ||
2246 | /* deferred ops (AGFL block frees) require permanent transactions */ | ||
2247 | ASSERT(tp->t_flags & XFS_TRANS_PERM_LOG_RES); | ||
2248 | |||
2246 | if (!pag->pagf_init) { | 2249 | if (!pag->pagf_init) { |
2247 | error = xfs_alloc_read_agf(mp, tp, args->agno, flags, &agbp); | 2250 | error = xfs_alloc_read_agf(mp, tp, args->agno, flags, &agbp); |
2248 | if (error) | 2251 | if (error) |