]> git.ipfire.org Git - thirdparty/xfsprogs-dev.git/commitdiff
xfs: assert that we don't enter agfl freeing with a non-permanent transaction
authorBrian Foster <bfoster@redhat.com>
Wed, 24 Jul 2019 19:54:06 +0000 (15:54 -0400)
committerEric Sandeen <sandeen@redhat.com>
Wed, 24 Jul 2019 19:54:06 +0000 (15:54 -0400)
Source kernel commit: 362f5e745ae2ee2be9cf181b3a22917d619b81a1

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>
Signed-off-by: Eric Sandeen <sandeen@sandeen.net>
libxfs/xfs_alloc.c

index d440e4195cb254c3a8069893b9574a08ba4f09c5..e21c788531a0ed1264b5951d48aa43411fd1f618 100644 (file)
@@ -2239,6 +2239,9 @@ xfs_alloc_fix_freelist(
        xfs_extlen_t            need;   /* total blocks needed in freelist */
        int                     error = 0;
 
+       /* deferred ops (AGFL block frees) require permanent transactions */
+       ASSERT(tp->t_flags & XFS_TRANS_PERM_LOG_RES);
+
        if (!pag->pagf_init) {
                error = xfs_alloc_read_agf(mp, tp, args->agno, flags, &agbp);
                if (error)