Whamcloud - gitweb
Clean up resize inode routines in ext2fs library. We no longer print
authorTheodore Ts'o <tytso@mit.edu>
Thu, 23 Dec 2004 12:45:04 +0000 (07:45 -0500)
committerTheodore Ts'o <tytso@mit.edu>
Thu, 23 Dec 2004 12:45:04 +0000 (07:45 -0500)
any debugging statements from within library code (always a bad idea), and
ext2fs_create_resize_inode() will return a proper error code if the
resize inode is corrupt, instead of returning -1.

lib/ext2fs/ChangeLog
lib/ext2fs/ext2_err.et.in
lib/ext2fs/initialize.c
lib/ext2fs/res_gdt.c

index 4e96b6b..2df731a 100644 (file)
@@ -1,3 +1,15 @@
+2004-12-23  Theodore Ts'o  <tytso@mit.edu>
+
+       * initialize.c (calc_reserved_gdt_blocks): #ifdef out all
+               debugging printf statements.
+       
+       * res_gdt.c (ext2fs_create_resize_inode): Return
+               EXT2_ET_RESIZE_INODE_CORRUPT if the resize inode is not
+               what we expect.  #ifdef out all debugging printf
+               statements.
+
+       * ext2_err.et.in (EXT2_ET_RESIZE_INODE_CORRUPT): Add new error code.
+
 2004-12-22  Theodore Ts'o  <tytso@mit.edu>
 
        * swapfs.c (ext2fs_swap_super): Byteswap the reserved_gdt_blocks
index 99ffa2e..5314c6c 100644 (file)
@@ -290,5 +290,8 @@ ec  EXT2_ET_NOT_IMAGE_FILE,
 ec     EXT2_ET_RES_GDT_BLOCKS,
        "Too many reserved group descriptor blocks"
 
+ec     EXT2_ET_RESIZE_INODE_CORRUPT,
+       "Resize inode is corrupt"
+
        end
 
index 3b80f46..82cd9f1 100644 (file)
@@ -81,8 +81,10 @@ static int calc_reserved_gdt_blocks(ext2_filsys fs)
        rsv_gdb = (rsv_groups + gdpb - 1) / gdpb - fs->desc_blocks;
        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",
               max_blocks, rsv_groups, rsv_gdb);
+#endif
 
        return rsv_gdb;
 }
index e926242..4706589 100644 (file)
@@ -88,7 +88,9 @@ errcode_t ext2fs_create_resize_inode(ext2_filsys fs)
        apb = EXT2_ADDR_PER_BLOCK(sb);
        rsv_add = fs->blocksize / 512;
        if ((dindir_blk = inode.i_block[EXT2_DIND_BLOCK])) {
+#ifdef RES_GDT_DEBUG
                printf("reading GDT dindir %u\n", dindir_blk);
+#endif
                retval = io_channel_read_blk(fs->io, dindir_blk, 1, dindir_buf);
                if (retval)
                        goto out_inode;
@@ -120,7 +122,7 @@ errcode_t ext2fs_create_resize_inode(ext2_filsys fs)
        }
 
        for (rsv_off = 0, gdt_off = fs->desc_blocks,
-            gdt_blk = sb->s_first_data_block + 1 + gdt_off;
+            gdt_blk = sb->s_first_data_block + 1 + fs->desc_blocks;
             rsv_off < sb->s_reserved_gdt_blocks;
             rsv_off++, gdt_off++, gdt_blk++) {
                unsigned int three = 1, five = 5, seven = 7;
@@ -149,14 +151,18 @@ errcode_t ext2fs_create_resize_inode(ext2_filsys fs)
                               gdt_blk, dindir_blk, gdt_off);
 #endif
                } else if (dindir_buf[gdt_off] == gdt_blk) {
+#ifdef RES_GDT_DEBUG
                        printf("reading primary GDT block %u\n", gdt_blk);
+#endif
                        retval = io_channel_read_blk(fs->io,gdt_blk,1,gdt_buf);
                        if (retval)
                                goto out_dindir;
                } else {
+#ifdef RES_GDT_DEBUG
                        printf("bad primary GDT %u != %u at %u[%u]\n",
                               dindir_buf[gdt_off], gdt_blk,dindir_blk,gdt_off);
-                       retval = -1; // XXX
+#endif
+                       retval = EXT2_ET_RESIZE_INODE_CORRUPT;
                        goto out_dindir;
                }
 
@@ -173,9 +179,11 @@ errcode_t ext2fs_create_resize_inode(ext2_filsys fs)
                                inode.i_blocks += rsv_add;
                                gdt_dirty = inode_dirty = 1;
                        } else if (gdt_buf[last] != expect) {
+#ifdef RES_GDT_DEBUG
                                printf("bad backup GDT %u != %u at %u[%u]\n",
                                       gdt_buf[last], expect, gdt_blk, last);
-                               retval = -1; // XXX
+#endif
+                               retval = EXT2_ET_RESIZE_INODE_CORRUPT;
                                goto out_dindir;
                        }
                        last++;
@@ -197,8 +205,10 @@ out_dindir:
                        retval = retval2;
        }
 out_inode:
+#ifdef RES_GDT_DEBUG
        printf("inode.i_blocks = %u, i_size = %u\n", inode.i_blocks,
               inode.i_size);
+#endif
        if (inode_dirty) {
                inode.i_atime = inode.i_mtime = time(0);
                retval2 = ext2fs_write_inode(fs, EXT2_RESIZE_INO, &inode);