All of lore.kernel.org
 help / color / mirror / Atom feed
From: Jeff Mahoney <jeffm@suse.com>
To: vs@namesys.com
Cc: ReiserFS Mailing List <reiserfs-devel@vger.kernel.org>
Subject: Re: [PATCH] reiserfsprogs: enforce 2^32-1 block limit
Date: Mon, 13 Aug 2007 15:57:20 -0400	[thread overview]
Message-ID: <46C0B7A0.3090605@suse.com> (raw)
In-Reply-To: <46C0C6D2.4020700@namesys.com>

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Vladimir V. Saveliev wrote:
> Hello
> 
> Jeff Mahoney wrote:
>>  Currently, mkreiserfs on a block device >= 16 TiB will fail with this error:
>>  reiserfs_create_journal: cannot create a journal of 8193 blocks with
>>  18 offset on 0 blocks
>>
>>  The message doesn't adequately describe that the problem is that reiserfs
>>  supports file system sizes up to 2^32-1 blocks, and it silently overflows.
>>
>>  This patch treats the block device size, as well as the <blocks> command
>>  line parameter as __u64's, so that they can be safely compared to UINT_MAX.
>>
>>  If the block device is too large, we warn the user, offer to truncate the
>>  file system to 2^32-1 blocks, and confirm. This is overridable by the -f
>>  option, which will elect to truncate automatically.
>>
>>  If the user has specified a block count that is too large, we fail always
>>  since the user has provided invalid input.
>>
>>  Please apply.
>>
>> Signed-off-by: Jeff Mahoney <jeffm@suse.com>
>>
>> --- a/utils/mkfs/mkreiserfs.c	2007-08-13 13:34:15.000000000 -0400
>> +++ b/utils/mkfs/mkreiserfs.c	2007-08-13 14:42:02.000000000 -0400
> 
> What did you diff against?

reiserfsprogs 3.6.20, though I think it was my development tree since a
patch to a fresh tree comes up with offset -2, but otherwise applies.

- -Jeff


>> @@ -29,6 +29,7 @@
>>  #include <time.h>
>>  #include <unistd.h>
>>  #include <errno.h>
>> +#include <limits.h>
>>  
>>  #ifdef HAVE_UNAME
>>  # include <sys/utsname.h>
>> @@ -438,6 +439,21 @@
>>      return val;
>>  }
>>  
>> +static __u64 str2u64 (char *str)
>> +{
>> +    __u64 val;
>> +    char *tmp;
>> +
>> +    val = (__u64)strtoll(str, &tmp, 0);
>> +
>> +    if (*tmp) {
>> +	reiserfs_exit (1, "%s: strtoll is unable to make an integer of %s\n",
>> +		       program_name, str);
>> +    }
>> +
>> +    return val;
>> +}
>> +
>>  
>>  static void set_block_size (char * str, int *b_size)
>>  {
>> @@ -575,7 +591,7 @@
>>      int force = 0;
>>      char * device_name = NULL;
>>      char * jdevice_name = NULL;
>> -    unsigned long fs_size = 0;
>> +    __u64 fs_size = 0;
>>      int c;
>>      static int flag;
>>  
>> @@ -710,7 +726,7 @@
>>      
>>      if (optind == argc - 2) {
>>          /* number of blocks for filesystem is specified */
>> -        fs_size = str2int (argv[optind + 1]);
>> +        fs_size = str2u64 (argv[optind + 1]);
>>      } else if (optind == argc - 1) {
>>          /* number of blocks is not specified */
>>          if (!(fs_size = misc_device_count_blocks (device_name, Block_size)))
>> @@ -719,6 +735,27 @@
>>          print_usage_and_exit ();
>>      }
>>  
>> +    if (fs_size >= UINT_MAX) {
>> +	fprintf(stderr, ">>> ReiserFS supports file systems of up to %u "
>> +	        "blocks.\n>>> The maximum size with a block size of %u bytes "
>> +		"is about %Lu MiB.\n>>> This file system would occupy %Lu "
>> +		"blocks. ", UINT_MAX, Block_size,
>> +		((__u64)UINT_MAX * Block_size) / (1024 * 1024), fs_size);
>> +
>> +	if (optind == argc - 1) {
>> +	    if (!force &&
>> +		!util_user_confirmed (stderr, "Truncate? (y/N): ", "y\n")) {
>> +		fprintf(stderr, "\nExiting.\n\n");
>> +		exit(1);
>> +	    }
>> +	    fprintf(stderr, "Truncating.\n\n");
>> +	    fs_size = UINT_MAX;
>> +	} else {
>> +	    fprintf(stderr, "Exiting.\n\n");
>> +	    exit(1);
>> +	}
>> +    }
>> +
>>      if (is_journal_default (device_name, jdevice_name, Block_size))
>>          Create_default_journal = 1;
>>      
>>
> 


- --
Jeff Mahoney
SUSE Labs
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v2.0.4-svn0 (GNU/Linux)
Comment: Using GnuPG with SUSE - http://enigmail.mozdev.org

iD8DBQFGwLegLPWxlyuTD7IRAsDFAJ9QQ4OKUcyTeoW5b0DdS7+1vG7EzwCfUz1+
XARDrvF4WzwYY2T58F9FEwk=
=me8b
-----END PGP SIGNATURE-----

  reply	other threads:[~2007-08-13 19:57 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2007-08-13 18:45 [PATCH] reiserfsprogs: enforce 2^32-1 block limit Jeff Mahoney
2007-08-13 21:02 ` Vladimir V. Saveliev
2007-08-13 19:57   ` Jeff Mahoney [this message]
2007-08-13 21:16     ` Vladimir V. Saveliev
2007-08-13 20:10       ` Jeff Mahoney

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=46C0B7A0.3090605@suse.com \
    --to=jeffm@suse.com \
    --cc=reiserfs-devel@vger.kernel.org \
    --cc=vs@namesys.com \
    /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.