]> git.ipfire.org Git - thirdparty/xfsprogs-dev.git/commitdiff
xfs: xfs_defer_capture should absorb remaining transaction reservation
authorDarrick J. Wong <darrick.wong@oracle.com>
Thu, 12 Nov 2020 22:21:20 +0000 (17:21 -0500)
committerEric Sandeen <sandeen@sandeen.net>
Thu, 12 Nov 2020 22:21:20 +0000 (17:21 -0500)
Source kernel commit: 929b92f64048d90d23e40a59c47adf59f5026903

When xfs_defer_capture extracts the deferred ops and transaction state
from a transaction, it should record the transaction reservation type
from the old transaction so that when we continue the dfops chain, we
still use the same reservation parameters.

Doing this means that the log item recovery functions get to determine
the transaction reservation instead of abusing tr_itruncate in yet
another part of xfs.

Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com>
Reviewed-by: Brian Foster <bfoster@redhat.com>
Reviewed-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Eric Sandeen <sandeen@sandeen.net>
libxfs/xfs_defer.c
libxfs/xfs_defer.h

index fc5c860e5d56918d12ff3d61e6fe2623da6ea385..8e660f1a6cfcf0e321042d2beaf3602d7624cf0c 100644 (file)
@@ -577,6 +577,9 @@ xfs_defer_ops_capture(
        dfc->dfc_blkres = tp->t_blk_res - tp->t_blk_res_used;
        dfc->dfc_rtxres = tp->t_rtx_res - tp->t_rtx_res_used;
 
+       /* Preserve the log reservation size. */
+       dfc->dfc_logres = tp->t_log_res;
+
        return dfc;
 }
 
index 5c0e59b69ffa9fbc498bfae3951a6945f9e55144..6cde6f0713f738ed70df3231be742f29b3161b8a 100644 (file)
@@ -79,6 +79,9 @@ struct xfs_defer_capture {
        /* Block reservations for the data and rt devices. */
        unsigned int            dfc_blkres;
        unsigned int            dfc_rtxres;
+
+       /* Log reservation saved from the transaction. */
+       unsigned int            dfc_logres;
 };
 
 /*