]> git.ipfire.org Git - thirdparty/xfsprogs-dev.git/commitdiff
mkfs: factor finobt changes into min log size when formatting
authorDarrick J. Wong <darrick.wong@oracle.com>
Thu, 4 Feb 2016 21:41:42 +0000 (08:41 +1100)
committerDave Chinner <david@fromorbit.com>
Thu, 4 Feb 2016 21:41:42 +0000 (08:41 +1100)
Since the finobt affects the size of the log reservations, we need to
be able to include its effects in the calculation of the minimum log
size.

(Not really a problem now, but adding rmapbt will give this one some
bite.)

Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com>
Reviewed-by: Brian Foster <bfoster@redhat.com>
Signed-off-by: Dave Chinner <david@fromorbit.com>
mkfs/maxtrres.c
mkfs/xfs_mkfs.c
mkfs/xfs_mkfs.h

index e1d5ee97a7c87a46fb6a45fc1a42be1b5bdec851..b97d020a68a9575f2adc41f114e715da0c5d47ed 100644 (file)
@@ -36,7 +36,8 @@ max_trans_res(
        int             inodelog,
        int             dirblocklog,
        int             logversion,
-       int             log_sunit)
+       int             log_sunit,
+       int             finobt)
 {
        xfs_sb_t        *sbp;
        xfs_mount_t     mount;
@@ -68,6 +69,8 @@ max_trans_res(
                        (dirversion == 2 ? XFS_SB_VERSION_DIRV2BIT : 0) |
                        (logversion > 1 ? XFS_SB_VERSION_LOGV2BIT : 0) |
                        XFS_DFL_SB_VERSION_BITS;
+       if (finobt)
+               sbp->sb_features_ro_compat |= XFS_SB_FEAT_RO_COMPAT_FINOBT;
 
        libxfs_mount(&mount, sbp, 0,0,0,0);
        maxfsb = xfs_log_calc_minimum_size(&mount);
index 700d12c85d61399bb2cb54051138546f4729ce1b..4c3a802627046ce5860b1bccd3e6320f3108925a 100644 (file)
@@ -2406,7 +2406,7 @@ an AG size that is one stripe unit smaller, for example %llu.\n"),
 
        min_logblocks = max_trans_res(crcs_enabled, dirversion,
                                   sectorlog, blocklog, inodelog, dirblocklog,
-                                  logversion, lsunit);
+                                  logversion, lsunit, finobt);
        ASSERT(min_logblocks);
        min_logblocks = MAX(XFS_MIN_LOG_BLOCKS, min_logblocks);
        if (!logsize && dblocks >= (1024*1024*1024) >> blocklog)
index 9df5f376051aae0bd57cd6f3b59c42a668b04e49..128068e8bb65bebf167fdfcc914f10d41eb75844 100644 (file)
@@ -84,6 +84,6 @@ extern void res_failed (int err);
 /* maxtrres.c */
 extern int max_trans_res (int crcs_enabled, int dirversion,
                int sectorlog, int blocklog, int inodelog, int dirblocklog,
-               int logversion, int log_sunit);
+               int logversion, int log_sunit, int finobt);
 
 #endif /* __XFS_MKFS_H__ */