mirror of https://github.com/vitalif/e2fsprogs
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@mit.edu>bitmap-optimize
parent
2be8fe4397
commit
8ade268cf2
|
@ -310,9 +310,6 @@ retry:
|
||||||
if (new > (int) fs->blocksize/4)
|
if (new > (int) fs->blocksize/4)
|
||||||
new = fs->blocksize/4;
|
new = fs->blocksize/4;
|
||||||
fs->super->s_reserved_gdt_blocks = new;
|
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;
|
struct ext2_inode inode;
|
||||||
errcode_t retval;
|
errcode_t retval;
|
||||||
char * block_buf;
|
char * block_buf;
|
||||||
|
blk_t blk;
|
||||||
|
|
||||||
if (!(fs->super->s_feature_compat &
|
if (!(fs->super->s_feature_compat &
|
||||||
EXT2_FEATURE_COMPAT_RESIZE_INODE))
|
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);
|
retval = ext2fs_read_inode(fs, EXT2_RESIZE_INO, &inode);
|
||||||
if (retval) goto errout;
|
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);
|
ext2fs_iblk_set(fs, &inode, 1);
|
||||||
|
|
||||||
retval = ext2fs_write_inode(fs, EXT2_RESIZE_INO, &inode);
|
retval = ext2fs_write_inode(fs, EXT2_RESIZE_INO, &inode);
|
||||||
|
|
Loading…
Reference in New Issue