]> git.ipfire.org Git - thirdparty/xfsprogs-dev.git/commitdiff
xfs_repair: fix block reservation in mk_rsumino
authorDarrick J. Wong <darrick.wong@oracle.com>
Thu, 4 Oct 2018 19:18:01 +0000 (14:18 -0500)
committerEric Sandeen <sandeen@redhat.com>
Thu, 4 Oct 2018 19:18:01 +0000 (14:18 -0500)
The functions mk_rsumino and rtinit both allocate transactions to create
the realtime summary inode.  In order to allocate and map blocks to the
rtsummary file, these transactions require a block reservation.
However, despite the comments in mk_rsumino about lifting the code from
mkfs, it doesn't actually copy the same reservation calculation that
mkfs uses in rtinit().  Practically speaking this has no effect since
userspace doesn't care about transaction block reservations, but fix
this logic bomb anyway.

[sandeen: tweaks to backport before libxfs updates]
Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com>
Reviewed-by: Eric Sandeen <sandeen@redhat.com>
Signed-off-by: Eric Sandeen <sandeen@sandeen.net>
repair/phase6.c

index 19ad54d3ed5324508ed3429f4dd5d0e0d2e72ab1..eb59108b688d9a4781d88f9618b5f409b128b50f 100644 (file)
@@ -836,7 +836,7 @@ mk_rsumino(xfs_mount_t *mp)
        tres.tr_logcount = XFS_DEFAULT_PERM_LOG_COUNT;
        tres.tr_logflags = XFS_TRANS_PERM_LOG_RES;
        error = -libxfs_trans_alloc(mp, &tres,
-               mp->m_sb.sb_rbmblocks + (XFS_BM_MAXLEVELS(mp,XFS_DATA_FORK) - 1),
+               nsumblocks + (XFS_BM_MAXLEVELS(mp, XFS_DATA_FORK) - 1),
                                    0, 0, &tp);
        if (error)
                res_failed(error);