Bug 491385
Summary: | after resize2fs, e2fsck reports wrong block count for resize inode | ||
---|---|---|---|
Product: | Red Hat Enterprise Linux 5 | Reporter: | Valerie Aurora Henson <vaurora> |
Component: | e2fsprogs | Assignee: | Lukáš Czerner <lczerner> |
Status: | CLOSED ERRATA | QA Contact: | BaseOS QE <qe-baseos-auto> |
Severity: | low | Docs Contact: | |
Priority: | low | ||
Version: | 5.2 | CC: | bnater, esandeen, rwheeler, sct |
Target Milestone: | --- | ||
Target Release: | --- | ||
Hardware: | All | ||
OS: | Linux | ||
Whiteboard: | |||
Fixed In Version: | e2fsprogs-1.39-29.el5 | Doc Type: | Bug Fix |
Doc Text: | Story Points: | --- | |
Clone Of: | Environment: | ||
Last Closed: | 2011-07-21 09:07:53 UTC | Type: | --- |
Regression: | --- | Mount Type: | --- |
Documentation: | --- | CRM: | |
Verified Versions: | Category: | --- | |
oVirt Team: | --- | RHEL 7.3 requirements from Atomic Host: | |
Cloudforms Team: | --- | Target Upstream Version: | |
Embargoed: |
Description
Valerie Aurora Henson
2009-03-20 17:59:25 UTC
This might be the fix: commit 8ade268cf2fde8629b51bfd1c044a83db88234cd Author: Theodore Ts'o <tytso> Date: Thu Jul 10 14:18:41 2008 -0400 resize2fs: Clean up the resize inode properly if necessary If the filesystem is grown to the point where the resize_inode is no longer needed, clean it up properly so e2fsck doesn't have to. Signed-off-by: "Theodore Ts'o" <tytso> diff --git a/resize/resize2fs.c b/resize/resize2fs.c index 05650a8..84db121 100644 --- a/resize/resize2fs.c +++ b/resize/resize2fs.c @@ -310,9 +310,6 @@ retry: if (new > (int) fs->blocksize/4) new = fs->blocksize/4; fs->super->s_reserved_gdt_blocks = new; - if (new == 0) - fs->super->s_feature_compat &= - ~EXT2_FEATURE_COMPAT_RESIZE_INODE; } /* @@ -1536,6 +1533,7 @@ static errcode_t fix_resize_inode(ext2_filsys fs) struct ext2_inode inode; errcode_t retval; char * block_buf; + blk_t blk; if (!(fs->super->s_feature_compat & EXT2_FEATURE_COMPAT_RESIZE_INODE)) @@ -1547,6 +1545,20 @@ static errcode_t fix_resize_inode(ext2_filsys fs) retval = ext2fs_read_inode(fs, EXT2_RESIZE_INO, &inode); if (retval) goto errout; + if (fs->super->s_reserved_gdt_blocks == 0) { + fs->super->s_feature_compat &= + ~EXT2_FEATURE_COMPAT_RESIZE_INODE; + ext2fs_mark_super_dirty(fs); + + if ((blk = inode.i_block[EXT2_DIND_BLOCK]) != 0) + ext2fs_block_alloc_stats(fs, blk, -1); + + memset(&inode, 0, sizeof(inode)); + + retval = ext2fs_write_inode(fs, EXT2_RESIZE_INO, &inode); + goto errout; + } + ext2fs_iblk_set(fs, &inode, 1); retval = ext2fs_write_inode(fs, EXT2_RESIZE_INO, &inode); Retested with e4fsprogs 1.41.4-2.el5 and it's fixed: [root@bear-05 ~]# resize4fs -fp /mnt/test/16TB_minus_4KB_exactly resize4fs 1.41.4 (27-Jan-2009) Resizing the filesystem on /mnt/test/16TB_minus_4KB_exactly to 4294967295 (4k) blocks. Begin pass 1 (max = 65536) Extending the inode table XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX The filesystem on /mnt/test/16TB_minus_4KB_exactly is now 4294967295 blocks long. [root@bear-05 ~]# e4fsck -fn /mnt/test/16TB_minus_4KB_exactly e4fsck 1.41.4 (27-Jan-2009) Pass 1: Checking inodes, blocks, and sizes [... not finished but would have barfed immediately on this bug] If the commit in comment #1 goes in, need to look at this one too: commit d16db7d9ded85f4a7f8d91562246cc2f59bf204d Author: Eric Sandeen <sandeen> Date: Tue Dec 21 15:32:05 2010 -0600 resize2fs: do not clear resize inode for 0 resvd blocks I ran into odd behavior where mkfs.ext4 of a 16T filesystem would create a resize inode with 0 reserved blocks, and mark the resize_inode feature. A subsequent slight downward resize of the filesystem would remove the resize inode, making any further offline resizing impossible. This is especially odd in light of the fact that a large downward resize (say, to 8T) will actually add blocks to the resize inode - so a small resize removes it, a large resize expands it ... commit 8ade268cf2fde8629b51bfd1c044a83db88234cd had added this: If the filesystem is grown to the point where the resize_inode is no longer needed, clean it up properly so e2fsck doesn't have to. but, it seems e2fsck does not care about this situation, either. So, simply leave the resize_inode intact in this case, and everything seems to be happy. Note, this is for the 1.41.xx branch. Signed-off-by: Eric Sandeen <sandeen> Signed-off-by: Theodore Ts'o <tytso> which... takes most of it back out ;) Hope I didn't regress -this- case again. It has been fixed with upstream commits 8ade268cf2fde8629b51bfd1c044a83db88234cd d16db7d9ded85f4a7f8d91562246cc2f59bf204d committed and built as e2fsprogs-1.39-29.el5 An advisory has been issued which should help the problem described in this bug report. This report is therefore being closed with a resolution of ERRATA. For more information on therefore solution and/or where to find the updated files, please follow the link below. You may reopen this bug report if the solution does not work for you. http://rhn.redhat.com/errata/RHBA-2011-1080.html An advisory has been issued which should help the problem described in this bug report. This report is therefore being closed with a resolution of ERRATA. For more information on therefore solution and/or where to find the updated files, please follow the link below. You may reopen this bug report if the solution does not work for you. http://rhn.redhat.com/errata/RHBA-2011-1080.html |