* [patch] allow mkfs to make larger logs
@ 2008-05-22 6:12 David Chinner
2008-05-22 13:23 ` Christoph Hellwig
2008-07-10 22:44 ` Dave Chinner
0 siblings, 2 replies; 4+ messages in thread
From: David Chinner @ 2008-05-22 6:12 UTC (permalink / raw)
To: xfs-dev; +Cc: xfs-oss
Increase the maximum log size supported by mkfs.
The log size can be increased easily in mkfs by changing a few
defines and a couple of types to allow the log size to increase to
just under 2GB. Theoretically, the log size can be made much, much
larger than this (up to 2^32 sectors), but going beyond 2^31
*bytes* causes integer overflow issues in the kernel log code.
We use a maximum size of just under 2GB as exactly 2GB will cause
overflow issues on the first transaction reservation.
Maximum log size is now reached at a fs size of ~4TB.
Signed-off-by: Dave Chinner <dgc@sgi.com>
---
xfsprogs/include/xfs_fs.h | 11 +++++++----
xfsprogs/mkfs/xfs_mkfs.c | 14 +++++++-------
2 files changed, 14 insertions(+), 11 deletions(-)
Index: xfs-cmds/xfsprogs/include/xfs_fs.h
===================================================================
--- xfs-cmds.orig/xfsprogs/include/xfs_fs.h 2008-05-15 16:32:52.929462025 +1000
+++ xfs-cmds/xfsprogs/include/xfs_fs.h 2008-05-15 18:50:19.494520368 +1000
@@ -248,10 +248,13 @@ typedef struct xfs_fsop_resblks {
* Minimum and maximum sizes need for growth checks
*/
#define XFS_MIN_AG_BLOCKS 64
-#define XFS_MIN_LOG_BLOCKS 512
-#define XFS_MAX_LOG_BLOCKS (64 * 1024)
-#define XFS_MIN_LOG_BYTES (256 * 1024)
-#define XFS_MAX_LOG_BYTES (128 * 1024 * 1024)
+#define XFS_MIN_LOG_BLOCKS 512ULL
+#define XFS_MAX_LOG_BLOCKS (1024 * 1024ULL)
+#define XFS_MIN_LOG_BYTES (10 * 1024 * 1024ULL)
+
+/* keep the maximum size under 2^31 by a small amount */
+#define XFS_MAX_LOG_BYTES \
+ ((2 * 1024 * 1024 * 1024ULL) - XFS_MIN_LOG_BYTES)
/*
* Structures for XFS_IOC_FSGROWFSDATA, XFS_IOC_FSGROWFSLOG & XFS_IOC_FSGROWFSRT
Index: xfs-cmds/xfsprogs/mkfs/xfs_mkfs.c
===================================================================
--- xfs-cmds.orig/xfsprogs/mkfs/xfs_mkfs.c 2008-05-15 16:32:53.013451121 +1000
+++ xfs-cmds/xfsprogs/mkfs/xfs_mkfs.c 2008-05-15 18:47:54.093343349 +1000
@@ -362,13 +362,13 @@ validate_log_size(__uint64_t logblocks,
}
if (logblocks > XFS_MAX_LOG_BLOCKS) {
fprintf(stderr,
- _("log size %lld blocks too large, maximum size is %d blocks\n"),
+ _("log size %lld blocks too large, maximum size is %lld blocks\n"),
(long long)logblocks, XFS_MAX_LOG_BLOCKS);
usage();
}
if ((logblocks << blocklog) > XFS_MAX_LOG_BYTES) {
fprintf(stderr,
- _("log size %lld bytes too large, maximum size is %d bytes\n"),
+ _("log size %lld bytes too large, maximum size is %lld bytes\n"),
(long long)(logblocks << blocklog), XFS_MAX_LOG_BYTES);
usage();
}
@@ -1724,7 +1724,7 @@ reported by the device (%u).\n"),
min_logblocks = max_tr_res * XFS_MIN_LOG_FACTOR;
min_logblocks = MAX(XFS_MIN_LOG_BLOCKS, min_logblocks);
if (!logsize && dblocks >= (1024*1024*1024) >> blocklog)
- min_logblocks = MAX(min_logblocks, (10*1024*1024)>>blocklog);
+ min_logblocks = MAX(min_logblocks, XFS_MIN_LOG_BYTES>>blocklog);
if (logsize && xi.logBBsize > 0 && logblocks > DTOBT(xi.logBBsize)) {
fprintf(stderr,
_("size %s specified for log subvolume is too large, maximum is %lld blocks\n"),
@@ -1744,10 +1744,10 @@ _("size %s specified for log subvolume i
logblocks = 0;
} else if (loginternal && !logsize) {
/*
- * logblocks grows from min_logblocks to XFS_MAX_LOG_BLOCKS
- * at 128GB
- *
- * 2048 = 128GB / MAX_LOG_BYTES
+ * With a 2GB max log size, default to maximum size
+ * at 4TB. This keeps the same ratio from the older
+ * max log size of 128M at 256GB fs size. IOWs,
+ * the ratio of fs size to log size is 2048:1.
*/
logblocks = (dblocks << blocklog) / 2048;
logblocks = logblocks >> blocklog;
^ permalink raw reply [flat|nested] 4+ messages in thread* Re: [patch] allow mkfs to make larger logs
2008-05-22 6:12 [patch] allow mkfs to make larger logs David Chinner
@ 2008-05-22 13:23 ` Christoph Hellwig
2009-05-10 19:35 ` Christoph Hellwig
2008-07-10 22:44 ` Dave Chinner
1 sibling, 1 reply; 4+ messages in thread
From: Christoph Hellwig @ 2008-05-22 13:23 UTC (permalink / raw)
To: David Chinner; +Cc: xfs-dev, xfs-oss
On Thu, May 22, 2008 at 04:12:22PM +1000, David Chinner wrote:
> ===================================================================
> --- xfs-cmds.orig/xfsprogs/include/xfs_fs.h 2008-05-15 16:32:52.929462025 +1000
> +++ xfs-cmds/xfsprogs/include/xfs_fs.h 2008-05-15 18:50:19.494520368 +1000
> @@ -248,10 +248,13 @@ typedef struct xfs_fsop_resblks {
> * Minimum and maximum sizes need for growth checks
> */
> #define XFS_MIN_AG_BLOCKS 64
> -#define XFS_MIN_LOG_BLOCKS 512
> -#define XFS_MAX_LOG_BLOCKS (64 * 1024)
> -#define XFS_MIN_LOG_BYTES (256 * 1024)
> -#define XFS_MAX_LOG_BYTES (128 * 1024 * 1024)
> +#define XFS_MIN_LOG_BLOCKS 512ULL
> +#define XFS_MAX_LOG_BLOCKS (1024 * 1024ULL)
> +#define XFS_MIN_LOG_BYTES (10 * 1024 * 1024ULL)
> +
> +/* keep the maximum size under 2^31 by a small amount */
> +#define XFS_MAX_LOG_BYTES \
> + ((2 * 1024 * 1024 * 1024ULL) - XFS_MIN_LOG_BYTES)
This file is a copy for the kernel, so please update it there aswell,
once we get changes to these files in both xfs-cmds and the kernel tree
merging will become a complete nightmare.
Except for that the patch looks good to me.
^ permalink raw reply [flat|nested] 4+ messages in thread* Re: [patch] allow mkfs to make larger logs
2008-05-22 6:12 [patch] allow mkfs to make larger logs David Chinner
2008-05-22 13:23 ` Christoph Hellwig
@ 2008-07-10 22:44 ` Dave Chinner
1 sibling, 0 replies; 4+ messages in thread
From: Dave Chinner @ 2008-07-10 22:44 UTC (permalink / raw)
To: xfs
ping?
On Thu, May 22, 2008 at 04:12:22PM +1000, David Chinner wrote:
>
> Increase the maximum log size supported by mkfs.
>
> The log size can be increased easily in mkfs by changing a few
> defines and a couple of types to allow the log size to increase to
> just under 2GB. Theoretically, the log size can be made much, much
> larger than this (up to 2^32 sectors), but going beyond 2^31
> *bytes* causes integer overflow issues in the kernel log code.
>
> We use a maximum size of just under 2GB as exactly 2GB will cause
> overflow issues on the first transaction reservation.
>
> Maximum log size is now reached at a fs size of ~4TB.
>
> Signed-off-by: Dave Chinner <dgc@sgi.com>
> ---
> xfsprogs/include/xfs_fs.h | 11 +++++++----
> xfsprogs/mkfs/xfs_mkfs.c | 14 +++++++-------
> 2 files changed, 14 insertions(+), 11 deletions(-)
>
> Index: xfs-cmds/xfsprogs/include/xfs_fs.h
> ===================================================================
> --- xfs-cmds.orig/xfsprogs/include/xfs_fs.h 2008-05-15 16:32:52.929462025 +1000
> +++ xfs-cmds/xfsprogs/include/xfs_fs.h 2008-05-15 18:50:19.494520368 +1000
> @@ -248,10 +248,13 @@ typedef struct xfs_fsop_resblks {
> * Minimum and maximum sizes need for growth checks
> */
> #define XFS_MIN_AG_BLOCKS 64
> -#define XFS_MIN_LOG_BLOCKS 512
> -#define XFS_MAX_LOG_BLOCKS (64 * 1024)
> -#define XFS_MIN_LOG_BYTES (256 * 1024)
> -#define XFS_MAX_LOG_BYTES (128 * 1024 * 1024)
> +#define XFS_MIN_LOG_BLOCKS 512ULL
> +#define XFS_MAX_LOG_BLOCKS (1024 * 1024ULL)
> +#define XFS_MIN_LOG_BYTES (10 * 1024 * 1024ULL)
> +
> +/* keep the maximum size under 2^31 by a small amount */
> +#define XFS_MAX_LOG_BYTES \
> + ((2 * 1024 * 1024 * 1024ULL) - XFS_MIN_LOG_BYTES)
>
> /*
> * Structures for XFS_IOC_FSGROWFSDATA, XFS_IOC_FSGROWFSLOG & XFS_IOC_FSGROWFSRT
> Index: xfs-cmds/xfsprogs/mkfs/xfs_mkfs.c
> ===================================================================
> --- xfs-cmds.orig/xfsprogs/mkfs/xfs_mkfs.c 2008-05-15 16:32:53.013451121 +1000
> +++ xfs-cmds/xfsprogs/mkfs/xfs_mkfs.c 2008-05-15 18:47:54.093343349 +1000
> @@ -362,13 +362,13 @@ validate_log_size(__uint64_t logblocks,
> }
> if (logblocks > XFS_MAX_LOG_BLOCKS) {
> fprintf(stderr,
> - _("log size %lld blocks too large, maximum size is %d blocks\n"),
> + _("log size %lld blocks too large, maximum size is %lld blocks\n"),
> (long long)logblocks, XFS_MAX_LOG_BLOCKS);
> usage();
> }
> if ((logblocks << blocklog) > XFS_MAX_LOG_BYTES) {
> fprintf(stderr,
> - _("log size %lld bytes too large, maximum size is %d bytes\n"),
> + _("log size %lld bytes too large, maximum size is %lld bytes\n"),
> (long long)(logblocks << blocklog), XFS_MAX_LOG_BYTES);
> usage();
> }
> @@ -1724,7 +1724,7 @@ reported by the device (%u).\n"),
> min_logblocks = max_tr_res * XFS_MIN_LOG_FACTOR;
> min_logblocks = MAX(XFS_MIN_LOG_BLOCKS, min_logblocks);
> if (!logsize && dblocks >= (1024*1024*1024) >> blocklog)
> - min_logblocks = MAX(min_logblocks, (10*1024*1024)>>blocklog);
> + min_logblocks = MAX(min_logblocks, XFS_MIN_LOG_BYTES>>blocklog);
> if (logsize && xi.logBBsize > 0 && logblocks > DTOBT(xi.logBBsize)) {
> fprintf(stderr,
> _("size %s specified for log subvolume is too large, maximum is %lld blocks\n"),
> @@ -1744,10 +1744,10 @@ _("size %s specified for log subvolume i
> logblocks = 0;
> } else if (loginternal && !logsize) {
> /*
> - * logblocks grows from min_logblocks to XFS_MAX_LOG_BLOCKS
> - * at 128GB
> - *
> - * 2048 = 128GB / MAX_LOG_BYTES
> + * With a 2GB max log size, default to maximum size
> + * at 4TB. This keeps the same ratio from the older
> + * max log size of 128M at 256GB fs size. IOWs,
> + * the ratio of fs size to log size is 2048:1.
> */
> logblocks = (dblocks << blocklog) / 2048;
> logblocks = logblocks >> blocklog;
>
>
--
Dave Chinner
david@fromorbit.com
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2009-05-10 19:35 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2008-05-22 6:12 [patch] allow mkfs to make larger logs David Chinner
2008-05-22 13:23 ` Christoph Hellwig
2009-05-10 19:35 ` Christoph Hellwig
2008-07-10 22:44 ` Dave Chinner
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox