tags 346580 +pending
thanks

On Sun, Jan 08, 2006 at 11:56:19PM +0100, Tore Anderson wrote:
>     [EMAIL PROTECTED] :) sudo mke2fs -O resize_inode -j /dev/pride/rt
>     mke2fs 1.39-WIP (31-Dec-2005)
>     /dev/pride/rt: Too many reserved group descriptor blocks while setting up 
> superblock
>     [EMAIL PROTECTED] :( 

Thanks for reporting this bug.  It was a signed vs unsigned problem
which only shows up on large filesystem.  It will be fixed with the
following patch.

                                                - Ted

# HG changeset patch
# User [EMAIL PROTECTED]
# Node ID 47163421072881af2b98f7d659cfd663fbfb7ba5
# Parent  8539debc19fe0f295e53a78f21c6b701b3a31e2c
Fix a signed vs unsigned bug in calc_reserved_gdt_blocks()

This fixes mke2fs -O resize_inode for very large filesystems (i.e., 20GB).
Addresses Debian Bug #346580

Signed-off-by: "Theodore Ts'o" <[EMAIL PROTECTED]>

diff -r 8539debc19fe -r 471634210728 lib/ext2fs/ChangeLog
--- a/lib/ext2fs/ChangeLog      Fri Mar 17 19:45:45 2006 -0500
+++ b/lib/ext2fs/ChangeLog      Fri Mar 17 20:39:52 2006 -0500
@@ -1,4 +1,9 @@
 2006-03-17  Theodore Ts'o  <[EMAIL PROTECTED]>
+
+       * initialize.c (calc_reserved_gdt_blocks): Fix a signed vs
+               unsigned problem which caused mke2fs -O resize_inode to
+               bomb out on large filesystems.  (Addresses Debian Bug
+               #346580)
 
        * ext2_fs.h (EXT2_IOC_GETVERSION_NEW, EXT2_IOC_SETVERSION_NEW,
                EXT2_IOC_GROUP_EXTEND, EXT2_IOC_GROUP_ADD): Add ioctl
diff -r 8539debc19fe -r 471634210728 lib/ext2fs/initialize.c
--- a/lib/ext2fs/initialize.c   Fri Mar 17 19:45:45 2006 -0500
+++ b/lib/ext2fs/initialize.c   Fri Mar 17 20:39:52 2006 -0500
@@ -63,14 +63,14 @@
  * The absolute maximum number of GDT blocks we can reserve is determined by
  * the number of block pointers that can fit into a single block.
  */
-static int calc_reserved_gdt_blocks(ext2_filsys fs)
+static unsigned int calc_reserved_gdt_blocks(ext2_filsys fs)
 {
        struct ext2_super_block *sb = fs->super;
        unsigned long bpg = sb->s_blocks_per_group;
        unsigned int gdpb = fs->blocksize / sizeof(struct ext2_group_desc);
        unsigned long max_blocks = 0xffffffff;
        unsigned long rsv_groups;
-       int rsv_gdb;
+       unsigned int rsv_gdb;
 
        /* We set it at 1024x the current filesystem size, or
         * the upper block count limit (2^32), whichever is lower.
@@ -79,10 +79,10 @@
                max_blocks = sb->s_blocks_count * 1024;
        rsv_groups = (max_blocks - sb->s_first_data_block + bpg - 1) / bpg;
        rsv_gdb = (rsv_groups + gdpb - 1) / gdpb - fs->desc_blocks;
-       if (rsv_gdb > (int) EXT2_ADDR_PER_BLOCK(sb))
+       if (rsv_gdb > EXT2_ADDR_PER_BLOCK(sb))
                rsv_gdb = EXT2_ADDR_PER_BLOCK(sb);
 #ifdef RES_GDT_DEBUG
-       printf("max_blocks %lu, rsv_groups = %lu, rsv_gdb = %lu\n",
+       printf("max_blocks %lu, rsv_groups = %lu, rsv_gdb = %u\n",
               max_blocks, rsv_groups, rsv_gdb);
 #endif
 


-- 
To UNSUBSCRIBE, email to [EMAIL PROTECTED]
with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED]

Reply via email to