]> git.ipfire.org Git - thirdparty/xfsprogs-dev.git/commitdiff
xfs: libxfs: move xfs_perag_put late
authorPan Bian <bianpan2016@163.com>
Wed, 27 Feb 2019 23:13:44 +0000 (17:13 -0600)
committerEric Sandeen <sandeen@redhat.com>
Wed, 27 Feb 2019 23:13:44 +0000 (17:13 -0600)
Source kernel commit: fe5ed6c22e94b131ed5608d66ebce1efc39a7edb

The function xfs_alloc_get_freelist calls xfs_perag_put to drop the
reference. However, pag->pagf_btreeblks is read and written after the
put operation. This patch moves the put operation later.

Signed-off-by: Pan Bian <bianpan2016@163.com>
Reviewed-by: Carlos Maiolino <cmaiolino@redhat.com>
[darrick: minor changelog edits]
Reviewed-by: Darrick J. Wong <darrick.wong@oracle.com>
Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com>
Signed-off-by: Eric Sandeen <sandeen@sandeen.net>
libxfs/xfs_alloc.c

index e6d0a702f9ff640d617f73d0eced83a439bc9bd6..02694cde635180c5ca60341628d49867dc710743 100644 (file)
@@ -2431,7 +2431,6 @@ xfs_alloc_get_freelist(
        be32_add_cpu(&agf->agf_flcount, -1);
        xfs_trans_agflist_delta(tp, -1);
        pag->pagf_flcount--;
-       xfs_perag_put(pag);
 
        logflags = XFS_AGF_FLFIRST | XFS_AGF_FLCOUNT;
        if (btreeblk) {
@@ -2439,6 +2438,7 @@ xfs_alloc_get_freelist(
                pag->pagf_btreeblks++;
                logflags |= XFS_AGF_BTREEBLKS;
        }
+       xfs_perag_put(pag);
 
        xfs_alloc_log_agf(tp, agbp, logflags);
        *bnop = bno;