]> git.ipfire.org Git - thirdparty/xfsprogs-dev.git/commitdiff
xfs: try to idiot-proof the allocators
authorDarrick J. Wong <djwong@kernel.org>
Thu, 16 Mar 2023 17:28:56 +0000 (10:28 -0700)
committerDarrick J. Wong <djwong@kernel.org>
Thu, 6 Apr 2023 00:05:55 +0000 (17:05 -0700)
Source kernel commit: 6de4b1ab470fe52351415217ac6dffddee571c45

In porting his development branch to 6.3-rc1, yours truly has
repeatedly screwed up the args->pag being fed to the xfs_alloc_vextent*
functions.  Add some debugging assertions to test the preconditions
required of the callers.

Signed-off-by: Darrick J. Wong <djwong@kernel.org>
Reviewed-by: Dave Chinner <dchinner@redhat.com>
libxfs/xfs_alloc.c

index 645c73f92d1a4e2f75eee45da6d4fdbec9b05822..1e3079af56d979ded979f7888506cdb94851b818 100644 (file)
@@ -3275,6 +3275,9 @@ xfs_alloc_vextent_this_ag(
        xfs_agnumber_t          minimum_agno;
        int                     error;
 
+       ASSERT(args->pag != NULL);
+       ASSERT(args->pag->pag_agno == agno);
+
        args->agno = agno;
        args->agbno = 0;
        error = xfs_alloc_vextent_check_args(args, XFS_AGB_TO_FSB(mp, agno, 0),
@@ -3390,6 +3393,8 @@ xfs_alloc_vextent_start_ag(
        bool                    bump_rotor = false;
        int                     error;
 
+       ASSERT(args->pag == NULL);
+
        args->agno = NULLAGNUMBER;
        args->agbno = NULLAGBLOCK;
        error = xfs_alloc_vextent_check_args(args, target, &minimum_agno);
@@ -3438,6 +3443,8 @@ xfs_alloc_vextent_first_ag(
        xfs_agnumber_t          start_agno;
        int                     error;
 
+       ASSERT(args->pag == NULL);
+
        args->agno = NULLAGNUMBER;
        args->agbno = NULLAGBLOCK;
        error = xfs_alloc_vextent_check_args(args, target, &minimum_agno);
@@ -3466,6 +3473,9 @@ xfs_alloc_vextent_exact_bno(
        xfs_agnumber_t          minimum_agno;
        int                     error;
 
+       ASSERT(args->pag != NULL);
+       ASSERT(args->pag->pag_agno == XFS_FSB_TO_AGNO(mp, target));
+
        args->agno = XFS_FSB_TO_AGNO(mp, target);
        args->agbno = XFS_FSB_TO_AGBNO(mp, target);
        error = xfs_alloc_vextent_check_args(args, target, &minimum_agno);
@@ -3498,6 +3508,9 @@ xfs_alloc_vextent_near_bno(
        bool                    needs_perag = args->pag == NULL;
        int                     error;
 
+       if (!needs_perag)
+               ASSERT(args->pag->pag_agno == XFS_FSB_TO_AGNO(mp, target));
+
        args->agno = XFS_FSB_TO_AGNO(mp, target);
        args->agbno = XFS_FSB_TO_AGBNO(mp, target);
        error = xfs_alloc_vextent_check_args(args, target, &minimum_agno);