From: Zheng Liu <gnehzuil.liu@gmail.com>
To: "Darrick J. Wong" <darrick.wong@oracle.com>
Cc: tytso@mit.edu, linux-ext4@vger.kernel.org
Subject: Re: [PATCH 07/25] mke2fs: load configfile blocksize setting before 64bit checks
Date: Mon, 25 Nov 2013 16:01:01 +0800 [thread overview]
Message-ID: <20131125080101.GB5964@gmail.com> (raw)
In-Reply-To: <20131018044941.7339.43212.stgit@birch.djwong.org>
On Thu, Oct 17, 2013 at 09:49:42PM -0700, Darrick J. Wong wrote:
> mke2fs has a series of checks to ensure that we don't create a
> filesystem too big for its blocksize -- if auto-64bit is on, then it
> turns on 64bit; otherwise it complains. Unfortunately, it performs
> these checks before looking in mke2fs.conf for a blocksize, which
> means that the checks are incorrect if the user specifies a non-4096
> blocksize in the config file and says nothing on the command line. It
> also has the effect of mandating a 4k block size on any block device
> larger than 4T in that situation. Therefore, read the block size from
> the config file before performing the 64bit checks.
>
> Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com>
Reviewed-by: Zheng Liu <wenqing.lz@taobao.com>
- Zheng
> ---
> misc/mke2fs.c | 132 ++++++++++++++++++++++++++++++---------------------------
> 1 file changed, 70 insertions(+), 62 deletions(-)
>
>
> diff --git a/misc/mke2fs.c b/misc/mke2fs.c
> index ce3c696..86091d7 100644
> --- a/misc/mke2fs.c
> +++ b/misc/mke2fs.c
> @@ -1298,6 +1298,21 @@ static void PRS(int argc, char *argv[])
> char * fs_type = 0;
> char * usage_types = 0;
> blk64_t dev_size;
> + /*
> + * NOTE: A few words about fs_blocks_count and blocksize:
> + *
> + * Initially, blocksize is set to zero, which implies 1024.
> + * If -b is specified, blocksize is updated to the user's value.
> + *
> + * Next, the device size or the user's "blocks" command line argument
> + * is used to set fs_blocks_count; the units are blocksize.
> + *
> + * Later, if blocksize hasn't been set and the profile specifies a
> + * blocksize, then blocksize is updated and fs_blocks_count is scaled
> + * appropriately. Note the change in units!
> + *
> + * Finally, we complain about fs_blocks_count > 2^32 on a non-64bit fs.
> + */
> blk64_t fs_blocks_count = 0;
> #ifdef __linux__
> struct utsname ut;
> @@ -1780,15 +1795,65 @@ profile_error:
> }
> }
>
> + /* Get the hardware sector sizes, if available */
> + retval = ext2fs_get_device_sectsize(device_name, &lsector_size);
> + if (retval) {
> + com_err(program_name, retval,
> + _("while trying to determine hardware sector size"));
> + exit(1);
> + }
> + retval = ext2fs_get_device_phys_sectsize(device_name, &psector_size);
> + if (retval) {
> + com_err(program_name, retval,
> + _("while trying to determine physical sector size"));
> + exit(1);
> + }
> +
> + if ((tmp = getenv("MKE2FS_DEVICE_SECTSIZE")) != NULL)
> + lsector_size = atoi(tmp);
> + if ((tmp = getenv("MKE2FS_DEVICE_PHYS_SECTSIZE")) != NULL)
> + psector_size = atoi(tmp);
> +
> + /* Older kernels may not have physical/logical distinction */
> + if (!psector_size)
> + psector_size = lsector_size;
> +
> + if (blocksize <= 0) {
> + use_bsize = get_int_from_profile(fs_types, "blocksize", 4096);
> +
> + if (use_bsize == -1) {
> + use_bsize = sys_page_size;
> + if ((linux_version_code < (2*65536 + 6*256)) &&
> + (use_bsize > 4096))
> + use_bsize = 4096;
> + }
> + if (lsector_size && use_bsize < lsector_size)
> + use_bsize = lsector_size;
> + if ((blocksize < 0) && (use_bsize < (-blocksize)))
> + use_bsize = -blocksize;
> + blocksize = use_bsize;
> + fs_blocks_count /= (blocksize / 1024);
> + } else {
> + if (blocksize < lsector_size) { /* Impossible */
> + com_err(program_name, EINVAL,
> + _("while setting blocksize; too small "
> + "for device\n"));
> + exit(1);
> + } else if ((blocksize < psector_size) &&
> + (psector_size <= sys_page_size)) { /* Suboptimal */
> + fprintf(stderr, _("Warning: specified blocksize %d is "
> + "less than device physical sectorsize %d\n"),
> + blocksize, psector_size);
> + }
> + }
> +
> + fs_param.s_log_block_size =
> + int_log2(blocksize >> EXT2_MIN_BLOCK_LOG_SIZE);
> +
> /*
> * We now need to do a sanity check of fs_blocks_count for
> * 32-bit vs 64-bit block number support.
> */
> - if ((fs_blocks_count > MAX_32_NUM) && (blocksize == 0)) {
> - fs_blocks_count /= 4; /* Try using a 4k blocksize */
> - blocksize = 4096;
> - fs_param.s_log_block_size = 2;
> - }
> if ((fs_blocks_count > MAX_32_NUM) &&
> !(fs_param.s_feature_incompat & EXT4_FEATURE_INCOMPAT_64BIT) &&
> get_bool_from_profile(fs_types, "auto_64-bit_support", 0)) {
> @@ -1889,63 +1954,6 @@ profile_error:
> if ((fs_param.s_feature_incompat & EXT2_FEATURE_INCOMPAT_META_BG) &&
> ((tmp = getenv("MKE2FS_FIRST_META_BG"))))
> fs_param.s_first_meta_bg = atoi(tmp);
> -
> - /* Get the hardware sector sizes, if available */
> - retval = ext2fs_get_device_sectsize(device_name, &lsector_size);
> - if (retval) {
> - com_err(program_name, retval,
> - _("while trying to determine hardware sector size"));
> - exit(1);
> - }
> - retval = ext2fs_get_device_phys_sectsize(device_name, &psector_size);
> - if (retval) {
> - com_err(program_name, retval,
> - _("while trying to determine physical sector size"));
> - exit(1);
> - }
> -
> - if ((tmp = getenv("MKE2FS_DEVICE_SECTSIZE")) != NULL)
> - lsector_size = atoi(tmp);
> - if ((tmp = getenv("MKE2FS_DEVICE_PHYS_SECTSIZE")) != NULL)
> - psector_size = atoi(tmp);
> -
> - /* Older kernels may not have physical/logical distinction */
> - if (!psector_size)
> - psector_size = lsector_size;
> -
> - if (blocksize <= 0) {
> - use_bsize = get_int_from_profile(fs_types, "blocksize", 4096);
> -
> - if (use_bsize == -1) {
> - use_bsize = sys_page_size;
> - if ((linux_version_code < (2*65536 + 6*256)) &&
> - (use_bsize > 4096))
> - use_bsize = 4096;
> - }
> - if (lsector_size && use_bsize < lsector_size)
> - use_bsize = lsector_size;
> - if ((blocksize < 0) && (use_bsize < (-blocksize)))
> - use_bsize = -blocksize;
> - blocksize = use_bsize;
> - ext2fs_blocks_count_set(&fs_param,
> - ext2fs_blocks_count(&fs_param) /
> - (blocksize / 1024));
> - } else {
> - if (blocksize < lsector_size) { /* Impossible */
> - com_err(program_name, EINVAL,
> - _("while setting blocksize; too small "
> - "for device\n"));
> - exit(1);
> - } else if ((blocksize < psector_size) &&
> - (psector_size <= sys_page_size)) { /* Suboptimal */
> - fprintf(stderr, _("Warning: specified blocksize %d is "
> - "less than device physical sectorsize %d\n"),
> - blocksize, psector_size);
> - }
> - }
> -
> - fs_param.s_log_block_size =
> - int_log2(blocksize >> EXT2_MIN_BLOCK_LOG_SIZE);
> if (fs_param.s_feature_ro_compat & EXT4_FEATURE_RO_COMPAT_BIGALLOC) {
> if (!cluster_size)
> cluster_size = get_int_from_profile(fs_types,
>
> --
> To unsubscribe from this list: send the line "unsubscribe linux-ext4" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at http://vger.kernel.org/majordomo-info.html
next prev parent reply other threads:[~2013-11-25 7:58 UTC|newest]
Thread overview: 73+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-10-18 4:48 [PATCH v2 00/25] e2fsprogs patchbomb 10/2013 Darrick J. Wong
2013-10-18 4:49 ` [PATCH 01/25] libext2fs: stop iterating dirents when done linking Darrick J. Wong
2013-10-23 23:39 ` Theodore Ts'o
2013-10-18 4:49 ` [PATCH 02/25] libext2fs: fix ext2fs_open2() truncation of the superblock parameter Darrick J. Wong
2013-10-18 18:32 ` Darrick J. Wong
2013-10-23 14:49 ` Lukáš Czerner
2013-10-18 4:49 ` [PATCH 03/25] mke2fs: don't let resize= turn on resize_inode when meta_bg is set Darrick J. Wong
2013-10-23 15:08 ` Lukáš Czerner
2013-10-23 23:40 ` Theodore Ts'o
2013-10-18 4:49 ` [PATCH 04/25] libext2fs: reject 64bit badblocks numbers Darrick J. Wong
2013-10-23 15:24 ` Lukáš Czerner
2013-10-23 23:58 ` Theodore Ts'o
2013-10-24 11:40 ` Lukáš Czerner
2013-10-18 4:49 ` [PATCH 05/25] libext2fs: don't overflow when punching indirect blocks with large blocks Darrick J. Wong
2013-10-24 0:08 ` Theodore Ts'o
2013-12-04 4:40 ` Darrick J. Wong
2013-10-18 4:49 ` [PATCH 06/25] libext2fs: fix tests that set LARGE_FILE Darrick J. Wong
2013-11-25 7:09 ` Zheng Liu
2013-11-25 17:57 ` Darrick J. Wong
2013-10-18 4:49 ` [PATCH 07/25] mke2fs: load configfile blocksize setting before 64bit checks Darrick J. Wong
2013-11-25 8:01 ` Zheng Liu [this message]
2013-10-18 4:49 ` [PATCH 08/25] debugfs: fix various minor bogosity Darrick J. Wong
2013-11-25 8:08 ` Zheng Liu
2013-11-25 18:05 ` Darrick J. Wong
2013-10-18 4:49 ` [PATCH 09/25] e2fsck: teach EA refcounting code to handle 64bit block addresses Darrick J. Wong
2013-10-18 18:37 ` Darrick J. Wong
2013-11-25 8:18 ` Zheng Liu
2013-10-18 4:50 ` [PATCH 10/25] debugfs: handle 64bit block numbers Darrick J. Wong
2013-10-18 18:47 ` Darrick J. Wong
2013-11-25 8:33 ` Zheng Liu
2013-11-25 17:49 ` Darrick J. Wong
2013-10-18 4:50 ` [PATCH 11/25] libext2fs: only punch complete clusters Darrick J. Wong
2013-10-18 18:55 ` Darrick J. Wong
2013-11-25 8:51 ` Zheng Liu
2013-10-18 4:50 ` [PATCH 12/25] libext2fs: don't update the summary counts when doing implied cluster allocation Darrick J. Wong
2013-11-25 9:03 ` Zheng Liu
2013-10-18 4:50 ` [PATCH 13/25] libext2fs: use ext2fs_punch() to truncate quota file Darrick J. Wong
2013-11-25 9:08 ` Zheng Liu
2013-10-18 4:50 ` [PATCH 14/25] e2fsck: only release clusters when shortening a directory during a rehash Darrick J. Wong
2013-11-25 11:09 ` Zheng Liu
2013-10-18 4:50 ` [PATCH 15/25] e2fsck: print cluster ranges when encountering bitmap errors Darrick J. Wong
2013-11-25 11:56 ` Zheng Liu
2013-10-18 4:50 ` [PATCH 16/25] resize2fs: convert fs to and from 64bit mode Darrick J. Wong
2013-10-18 18:59 ` Darrick J. Wong
2013-11-26 6:44 ` Zheng Liu
2013-11-26 18:39 ` Darrick J. Wong
2013-11-27 2:21 ` Zheng Liu
2013-10-18 4:50 ` [PATCH 17/25] resize2fs: when toggling 64bit, don't free in-use bg data clusters Darrick J. Wong
2013-10-18 4:50 ` [PATCH 18/25] resize2fs: adjust reserved_gdt_blocks when changing group descriptor size Darrick J. Wong
2013-10-18 4:51 ` [PATCH 19/25] resize2fs: during shrink, don't free in-use bg data clusters Darrick J. Wong
2013-10-18 4:51 ` [PATCH 20/25] resize2fs: don't free in-use clusters when moving blocks Darrick J. Wong
2013-10-18 4:51 ` [PATCH 21/25] misc: use the checksum predicate function, not raw flag tests Darrick J. Wong
2013-10-18 4:51 ` [PATCH 22/25] resize2fs: rewrite extent/dir/ea block checksums when migrating Darrick J. Wong
2013-10-18 4:51 ` [PATCH 23/25] libext2fs: support modifying arbitrary extended attributes Darrick J. Wong
2013-10-18 19:25 ` Darrick J. Wong
2013-10-22 1:13 ` Darrick J. Wong
2013-11-26 7:21 ` Zheng Liu
2013-11-26 19:55 ` Darrick J. Wong
2013-11-27 2:52 ` Zheng Liu
2013-11-27 3:13 ` Darrick J. Wong
2013-11-27 11:36 ` Zheng Liu
2013-11-27 1:56 ` Darrick J. Wong
2013-11-29 5:30 ` Zheng Liu
2013-11-29 8:17 ` Jan Kara
2013-11-30 20:24 ` Darrick J. Wong
2013-12-02 8:38 ` Jan Kara
2013-10-18 4:51 ` [PATCH 24/25] misc: add fuse2fs, a FUSE server for e2fsprogs Darrick J. Wong
2013-10-18 19:36 ` Darrick J. Wong
2013-10-22 1:20 ` Darrick J. Wong
2013-10-18 13:13 ` [PATCH v2 00/25] e2fsprogs patchbomb 10/2013 Lukáš Czerner
2013-10-18 18:13 ` Darrick J. Wong
2013-10-18 20:37 ` Darrick J. Wong
2013-10-18 18:39 ` Theodore Ts'o
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20131125080101.GB5964@gmail.com \
--to=gnehzuil.liu@gmail.com \
--cc=darrick.wong@oracle.com \
--cc=linux-ext4@vger.kernel.org \
--cc=tytso@mit.edu \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.