* Fri Apr 24 2009 Eric Sandeen <sandeen@redhat.com> 1.41.5-1
- New upstream version
This commit is contained in:
parent
41218bb72d
commit
740dfcb267
@ -1,7 +1,7 @@
|
|||||||
Index: e2fsprogs-1.41.1/doc/libblkid.txt
|
Index: e2fsprogs-1.41.5/doc/libblkid.txt
|
||||||
===================================================================
|
===================================================================
|
||||||
--- e2fsprogs-1.41.1.orig/doc/libblkid.txt 2007-06-30 07:58:34.000000000 -0500
|
--- e2fsprogs-1.41.5.orig/doc/libblkid.txt
|
||||||
+++ e2fsprogs-1.41.1/doc/libblkid.txt 2008-10-01 13:20:34.303063944 -0500
|
+++ e2fsprogs-1.41.5/doc/libblkid.txt
|
||||||
@@ -58,7 +58,7 @@ type, or label, or uuid for a particular
|
@@ -58,7 +58,7 @@ type, or label, or uuid for a particular
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -20,10 +20,10 @@ Index: e2fsprogs-1.41.1/doc/libblkid.txt
|
|||||||
|
|
||||||
If you have called blkid_get_cache(), you should call blkid_put_cache()
|
If you have called blkid_get_cache(), you should call blkid_put_cache()
|
||||||
when you are done using the blkid library functions. This will save the
|
when you are done using the blkid library functions. This will save the
|
||||||
Index: e2fsprogs-1.41.1/misc/blkid.8.in
|
Index: e2fsprogs-1.41.5/misc/blkid.8.in
|
||||||
===================================================================
|
===================================================================
|
||||||
--- e2fsprogs-1.41.1.orig/misc/blkid.8.in 2008-08-24 23:19:56.000000000 -0500
|
--- e2fsprogs-1.41.5.orig/misc/blkid.8.in
|
||||||
+++ e2fsprogs-1.41.1/misc/blkid.8.in 2008-10-01 13:20:34.303063944 -0500
|
+++ e2fsprogs-1.41.5/misc/blkid.8.in
|
||||||
@@ -55,7 +55,7 @@ more devices.
|
@@ -55,7 +55,7 @@ more devices.
|
||||||
Read from
|
Read from
|
||||||
.I cachefile
|
.I cachefile
|
||||||
@ -42,10 +42,10 @@ Index: e2fsprogs-1.41.1/misc/blkid.8.in
|
|||||||
If you don't want to save the cache to the default file, specify
|
If you don't want to save the cache to the default file, specify
|
||||||
.IR /dev/null.
|
.IR /dev/null.
|
||||||
If not specified it will be the same file as that given by the
|
If not specified it will be the same file as that given by the
|
||||||
Index: e2fsprogs-1.41.1/misc/blkid.c
|
Index: e2fsprogs-1.41.5/misc/blkid.c
|
||||||
===================================================================
|
===================================================================
|
||||||
--- e2fsprogs-1.41.1.orig/misc/blkid.c 2008-08-28 09:26:31.000000000 -0500
|
--- e2fsprogs-1.41.5.orig/misc/blkid.c
|
||||||
+++ e2fsprogs-1.41.1/misc/blkid.c 2008-10-01 13:20:54.787002093 -0500
|
+++ e2fsprogs-1.41.5/misc/blkid.c
|
||||||
@@ -52,7 +52,7 @@ static void usage(int error)
|
@@ -52,7 +52,7 @@ static void usage(int error)
|
||||||
fprintf(out,
|
fprintf(out,
|
||||||
"usage:\t%s [-c <file>] [-ghlLv] [-o format] "
|
"usage:\t%s [-c <file>] [-ghlLv] [-o format] "
|
||||||
@ -55,10 +55,10 @@ Index: e2fsprogs-1.41.1/misc/blkid.c
|
|||||||
"\t-h\tprint this usage message and exit\n"
|
"\t-h\tprint this usage message and exit\n"
|
||||||
"\t-g\tgarbage collect the blkid cache\n"
|
"\t-g\tgarbage collect the blkid cache\n"
|
||||||
"\t-s\tshow specified tag(s) (default show all tags)\n"
|
"\t-s\tshow specified tag(s) (default show all tags)\n"
|
||||||
Index: e2fsprogs-1.41.1/lib/blkid/Makefile.in
|
Index: e2fsprogs-1.41.5/lib/blkid/Makefile.in
|
||||||
===================================================================
|
===================================================================
|
||||||
--- e2fsprogs-1.41.1.orig/lib/blkid/Makefile.in 2008-08-28 09:26:31.000000000 -0500
|
--- e2fsprogs-1.41.5.orig/lib/blkid/Makefile.in
|
||||||
+++ e2fsprogs-1.41.1/lib/blkid/Makefile.in 2008-10-01 13:20:34.338002746 -0500
|
+++ e2fsprogs-1.41.5/lib/blkid/Makefile.in
|
||||||
@@ -142,9 +142,10 @@ blkid.pc: $(srcdir)/blkid.pc.in $(top_bu
|
@@ -142,9 +142,10 @@ blkid.pc: $(srcdir)/blkid.pc.in $(top_bu
|
||||||
@cd $(top_builddir); CONFIG_FILES=lib/blkid/blkid.pc ./config.status
|
@cd $(top_builddir); CONFIG_FILES=lib/blkid/blkid.pc ./config.status
|
||||||
|
|
||||||
@ -80,10 +80,10 @@ Index: e2fsprogs-1.41.1/lib/blkid/Makefile.in
|
|||||||
for i in $(SMANPAGES); do \
|
for i in $(SMANPAGES); do \
|
||||||
$(RM) -f $(DESTDIR)$(man3dir)/$$i; \
|
$(RM) -f $(DESTDIR)$(man3dir)/$$i; \
|
||||||
done
|
done
|
||||||
Index: e2fsprogs-1.41.1/lib/blkid/libblkid.3.in
|
Index: e2fsprogs-1.41.5/lib/blkid/libblkid.3.in
|
||||||
===================================================================
|
===================================================================
|
||||||
--- e2fsprogs-1.41.1.orig/lib/blkid/libblkid.3.in 2008-08-24 23:19:56.000000000 -0500
|
--- e2fsprogs-1.41.5.orig/lib/blkid/libblkid.3.in
|
||||||
+++ e2fsprogs-1.41.1/lib/blkid/libblkid.3.in 2008-10-01 13:21:23.992001339 -0500
|
+++ e2fsprogs-1.41.5/lib/blkid/libblkid.3.in
|
||||||
@@ -24,7 +24,7 @@ A common use is to allow use of LABEL= a
|
@@ -24,7 +24,7 @@ A common use is to allow use of LABEL= a
|
||||||
specific block device names into configuration files.
|
specific block device names into configuration files.
|
||||||
.P
|
.P
|
||||||
@ -102,10 +102,10 @@ Index: e2fsprogs-1.41.1/lib/blkid/libblkid.3.in
|
|||||||
Caches data extracted from each recognized block device.
|
Caches data extracted from each recognized block device.
|
||||||
.SH AVAILABILITY
|
.SH AVAILABILITY
|
||||||
.B libblkid
|
.B libblkid
|
||||||
Index: e2fsprogs-1.41.1/lib/blkid/blkidP.h
|
Index: e2fsprogs-1.41.5/lib/blkid/blkidP.h
|
||||||
===================================================================
|
===================================================================
|
||||||
--- e2fsprogs-1.41.1.orig/lib/blkid/blkidP.h 2008-08-28 09:26:31.000000000 -0500
|
--- e2fsprogs-1.41.5.orig/lib/blkid/blkidP.h
|
||||||
+++ e2fsprogs-1.41.1/lib/blkid/blkidP.h 2008-10-01 13:21:39.192001091 -0500
|
+++ e2fsprogs-1.41.5/lib/blkid/blkidP.h
|
||||||
@@ -104,7 +104,7 @@ struct blkid_struct_cache
|
@@ -104,7 +104,7 @@ struct blkid_struct_cache
|
||||||
extern char *blkid_strdup(const char *s);
|
extern char *blkid_strdup(const char *s);
|
||||||
extern char *blkid_strndup(const char *s, const int length);
|
extern char *blkid_strndup(const char *s, const int length);
|
||||||
@ -115,11 +115,11 @@ Index: e2fsprogs-1.41.1/lib/blkid/blkidP.h
|
|||||||
|
|
||||||
#define BLKID_ERR_IO 5
|
#define BLKID_ERR_IO 5
|
||||||
#define BLKID_ERR_PROC 9
|
#define BLKID_ERR_PROC 9
|
||||||
Index: e2fsprogs-1.41.1/RELEASE-NOTES
|
Index: e2fsprogs-1.41.5/RELEASE-NOTES
|
||||||
===================================================================
|
===================================================================
|
||||||
--- e2fsprogs-1.41.1.orig/RELEASE-NOTES 2008-09-01 15:01:14.000000000 -0500
|
--- e2fsprogs-1.41.5.orig/RELEASE-NOTES
|
||||||
+++ e2fsprogs-1.41.1/RELEASE-NOTES 2008-10-01 13:20:34.383001892 -0500
|
+++ e2fsprogs-1.41.5/RELEASE-NOTES
|
||||||
@@ -2460,7 +2460,7 @@ label.
|
@@ -2829,7 +2829,7 @@ label.
|
||||||
|
|
||||||
Fixed a bug in the blkid library wihch could avoid an infinite loop
|
Fixed a bug in the blkid library wihch could avoid an infinite loop
|
||||||
in blkid_find_dev_with_tag() if /proc is not mounted and there the
|
in blkid_find_dev_with_tag() if /proc is not mounted and there the
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
Index: e2fsprogs-1.40.5/e2fsck/super.c
|
Index: e2fsprogs-1.41.5/e2fsck/super.c
|
||||||
===================================================================
|
===================================================================
|
||||||
--- e2fsprogs-1.40.5.orig/e2fsck/super.c
|
--- e2fsprogs-1.41.5.orig/e2fsck/super.c
|
||||||
+++ e2fsprogs-1.40.5/e2fsck/super.c
|
+++ e2fsprogs-1.41.5/e2fsck/super.c
|
||||||
@@ -793,7 +793,11 @@ void check_super_block(e2fsck_t ctx)
|
@@ -869,7 +869,11 @@ void check_super_block(e2fsck_t ctx)
|
||||||
* unfortunately, we shouldn't ignore it since if it's not set in the
|
* unfortunately, we shouldn't ignore it since if it's not set in the
|
||||||
* backup, the extended attributes in the filesystem will be stripped
|
* backup, the extended attributes in the filesystem will be stripped
|
||||||
* away.
|
* away.
|
||||||
@ -13,20 +13,20 @@ Index: e2fsprogs-1.40.5/e2fsck/super.c
|
|||||||
+#define FEATURE_COMPAT_IGNORE (EXT2_FEATURE_COMPAT_EXT_ATTR)
|
+#define FEATURE_COMPAT_IGNORE (EXT2_FEATURE_COMPAT_EXT_ATTR)
|
||||||
#define FEATURE_RO_COMPAT_IGNORE (EXT2_FEATURE_RO_COMPAT_LARGE_FILE| \
|
#define FEATURE_RO_COMPAT_IGNORE (EXT2_FEATURE_RO_COMPAT_LARGE_FILE| \
|
||||||
EXT4_FEATURE_RO_COMPAT_DIR_NLINK)
|
EXT4_FEATURE_RO_COMPAT_DIR_NLINK)
|
||||||
#define FEATURE_INCOMPAT_IGNORE (EXT3_FEATURE_INCOMPAT_EXTENTS)
|
#define FEATURE_INCOMPAT_IGNORE (EXT3_FEATURE_INCOMPAT_EXTENTS| \
|
||||||
@@ -837,6 +841,9 @@ int check_backup_super_block(e2fsck_t ct
|
@@ -921,6 +925,9 @@ int check_backup_super_block(e2fsck_t ct
|
||||||
|
(EXT2_INODE_SIZE(backup_sb) < EXT2_GOOD_OLD_INODE_SIZE))
|
||||||
continue;
|
continue;
|
||||||
}
|
|
||||||
|
|
||||||
+#define SUPER_COMPAT_DIFFERENT(x) \
|
+#define SUPER_COMPAT_DIFFERENT(x) \
|
||||||
+ ((fs->super->x & ~FEATURE_COMPAT_IGNORE) != \
|
+ ((fs->super->x & ~FEATURE_COMPAT_IGNORE) != \
|
||||||
+ (tfs->super->x & ~FEATURE_COMPAT_IGNORE))
|
+ (backup_sb->x & ~FEATURE_COMPAT_IGNORE))
|
||||||
#define SUPER_INCOMPAT_DIFFERENT(x) \
|
#define SUPER_INCOMPAT_DIFFERENT(x) \
|
||||||
((fs->super->x & ~FEATURE_INCOMPAT_IGNORE) != \
|
((fs->super->x & ~FEATURE_INCOMPAT_IGNORE) != \
|
||||||
(tfs->super->x & ~FEATURE_INCOMPAT_IGNORE))
|
(backup_sb->x & ~FEATURE_INCOMPAT_IGNORE))
|
||||||
@@ -846,7 +853,7 @@ int check_backup_super_block(e2fsck_t ct
|
@@ -930,7 +937,7 @@ int check_backup_super_block(e2fsck_t ct
|
||||||
#define SUPER_DIFFERENT(x) \
|
#define SUPER_DIFFERENT(x) \
|
||||||
(fs->super->x != tfs->super->x)
|
(fs->super->x != backup_sb->x)
|
||||||
|
|
||||||
- if (SUPER_DIFFERENT(s_feature_compat) ||
|
- if (SUPER_DIFFERENT(s_feature_compat) ||
|
||||||
+ if (SUPER_COMPAT_DIFFERENT(s_feature_compat) ||
|
+ if (SUPER_COMPAT_DIFFERENT(s_feature_compat) ||
|
||||||
|
@ -1,23 +0,0 @@
|
|||||||
Index: e2fsprogs/debugfs/debugfs.c
|
|
||||||
===================================================================
|
|
||||||
--- e2fsprogs.orig/debugfs/debugfs.c 2008-09-12 10:37:52.000000000 -0500
|
|
||||||
+++ e2fsprogs/debugfs/debugfs.c 2009-01-29 16:36:04.748574864 -0600
|
|
||||||
@@ -291,9 +291,6 @@ void do_show_super_stats(int argc, char
|
|
||||||
int c, header_only = 0;
|
|
||||||
int numdirs = 0, first, gdt_csum;
|
|
||||||
|
|
||||||
- gdt_csum = EXT2_HAS_RO_COMPAT_FEATURE(current_fs->super,
|
|
||||||
- EXT4_FEATURE_RO_COMPAT_GDT_CSUM);
|
|
||||||
-
|
|
||||||
reset_getopt();
|
|
||||||
while ((c = getopt (argc, argv, "h")) != EOF) {
|
|
||||||
switch (c) {
|
|
||||||
@@ -321,6 +318,8 @@ void do_show_super_stats(int argc, char
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
+ gdt_csum = EXT2_HAS_RO_COMPAT_FEATURE(current_fs->super,
|
|
||||||
+ EXT4_FEATURE_RO_COMPAT_GDT_CSUM);
|
|
||||||
gdp = ¤t_fs->group_desc[0];
|
|
||||||
for (i = 0; i < current_fs->group_desc_count; i++, gdp++) {
|
|
||||||
fprintf(out, " Group %2d: block bitmap at %u, "
|
|
@ -1,241 +0,0 @@
|
|||||||
3 patches from the list to address resize issues (18 Apr 2009):
|
|
||||||
|
|
||||||
When allocating a new set of block group metadata as part of growing
|
|
||||||
the filesystem, the resize2fs code assumes that the bitmap and inode
|
|
||||||
table blocks are in their own block group; an assumption which is
|
|
||||||
changed by the flex_bg feature. This commit works around the problem
|
|
||||||
by temporarily turning off flex_bg while allocating the new block
|
|
||||||
group metadata, to avoid potentially overwriting previously allocated
|
|
||||||
data blocks.
|
|
||||||
|
|
||||||
Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
|
|
||||||
---
|
|
||||||
|
|
||||||
If we need to shrink the inode table, we need to make sure the inodes
|
|
||||||
contained in the part of the inode table we are vacating don't get
|
|
||||||
reused as part of the filesystem shrink operation. This wasn't a
|
|
||||||
problem with ext3 filesystems, since the inode table was located in
|
|
||||||
the block group that was going away, so that location was not eligible
|
|
||||||
for reallocation.
|
|
||||||
|
|
||||||
However with ext4 filesystems with flex_bg enabled, it's possible for
|
|
||||||
a portion of the inode table in the last flex_bg group to be
|
|
||||||
deallocated, but in a part of the filesystem which could be used as
|
|
||||||
data blocks. So we must mark those blocks as reserved to prevent
|
|
||||||
their reuse, and adjust the minimum filesystem size calculation to
|
|
||||||
assure that we don't shrink a filesystem too small for the resize
|
|
||||||
operation to succeed.
|
|
||||||
|
|
||||||
Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
|
|
||||||
---
|
|
||||||
|
|
||||||
Due to a fencepost bug, when skipping a block group whose block bitmap
|
|
||||||
was uninitialized (and hence could not contain any blocks eligible for
|
|
||||||
relaocation), the block immediately following the block group wasn't
|
|
||||||
checked as well. If it was in use and required relocation, it
|
|
||||||
wouldn't get properly relocated, with the result that an inode using
|
|
||||||
such a block would end up, post resize, with a pointer to a block now
|
|
||||||
outside the bounds of the filesystem.
|
|
||||||
|
|
||||||
This commit fixes this fencepost error.
|
|
||||||
|
|
||||||
Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
|
|
||||||
---
|
|
||||||
|
|
||||||
Index: e2fsprogs-1.41.4/resize/resize2fs.c
|
|
||||||
===================================================================
|
|
||||||
--- e2fsprogs-1.41.4.orig/resize/resize2fs.c
|
|
||||||
+++ e2fsprogs-1.41.4/resize/resize2fs.c
|
|
||||||
@@ -233,20 +233,29 @@ static void fix_uninit_block_bitmaps(ext
|
|
||||||
|
|
||||||
/*
|
|
||||||
* If the group descriptor's bitmap and inode table blocks are valid,
|
|
||||||
- * release them in the specified filesystem data structure
|
|
||||||
+ * release them in the new filesystem data structure, and mark them as
|
|
||||||
+ * reserved so the old inode table blocks don't get overwritten.
|
|
||||||
*/
|
|
||||||
-static void free_gdp_blocks(ext2_filsys fs, struct ext2_group_desc *gdp)
|
|
||||||
+static void free_gdp_blocks(ext2_filsys fs,
|
|
||||||
+ ext2fs_block_bitmap reserve_blocks,
|
|
||||||
+ struct ext2_group_desc *gdp)
|
|
||||||
{
|
|
||||||
blk_t blk;
|
|
||||||
int j;
|
|
||||||
|
|
||||||
if (gdp->bg_block_bitmap &&
|
|
||||||
- (gdp->bg_block_bitmap < fs->super->s_blocks_count))
|
|
||||||
+ (gdp->bg_block_bitmap < fs->super->s_blocks_count)) {
|
|
||||||
ext2fs_block_alloc_stats(fs, gdp->bg_block_bitmap, -1);
|
|
||||||
+ ext2fs_mark_block_bitmap(reserve_blocks,
|
|
||||||
+ gdp->bg_block_bitmap);
|
|
||||||
+ }
|
|
||||||
|
|
||||||
if (gdp->bg_inode_bitmap &&
|
|
||||||
- (gdp->bg_inode_bitmap < fs->super->s_blocks_count))
|
|
||||||
+ (gdp->bg_inode_bitmap < fs->super->s_blocks_count)) {
|
|
||||||
ext2fs_block_alloc_stats(fs, gdp->bg_inode_bitmap, -1);
|
|
||||||
+ ext2fs_mark_block_bitmap(reserve_blocks,
|
|
||||||
+ gdp->bg_inode_bitmap);
|
|
||||||
+ }
|
|
||||||
|
|
||||||
if (gdp->bg_inode_table == 0 ||
|
|
||||||
(gdp->bg_inode_table >= fs->super->s_blocks_count))
|
|
||||||
@@ -257,14 +266,19 @@ static void free_gdp_blocks(ext2_filsys
|
|
||||||
if (blk >= fs->super->s_blocks_count)
|
|
||||||
break;
|
|
||||||
ext2fs_block_alloc_stats(fs, blk, -1);
|
|
||||||
+ ext2fs_mark_block_bitmap(reserve_blocks, blk);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* This routine is shared by the online and offline resize routines.
|
|
||||||
* All of the information which is adjusted in memory is done here.
|
|
||||||
+ *
|
|
||||||
+ * The reserve_blocks parameter is only needed when shrinking the
|
|
||||||
+ * filesystem.
|
|
||||||
*/
|
|
||||||
-errcode_t adjust_fs_info(ext2_filsys fs, ext2_filsys old_fs, blk_t new_size)
|
|
||||||
+errcode_t adjust_fs_info(ext2_filsys fs, ext2_filsys old_fs,
|
|
||||||
+ ext2fs_block_bitmap reserve_blocks, blk_t new_size)
|
|
||||||
{
|
|
||||||
errcode_t retval;
|
|
||||||
int overhead = 0;
|
|
||||||
@@ -399,8 +413,8 @@ retry:
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
- * If we are shrinking the number block groups, we're done and
|
|
||||||
- * can exit now.
|
|
||||||
+ * If we are shrinking the number of block groups, we're done
|
|
||||||
+ * and can exit now.
|
|
||||||
*/
|
|
||||||
if (old_fs->group_desc_count > fs->group_desc_count) {
|
|
||||||
/*
|
|
||||||
@@ -409,7 +423,8 @@ retry:
|
|
||||||
*/
|
|
||||||
for (i = fs->group_desc_count;
|
|
||||||
i < old_fs->group_desc_count; i++) {
|
|
||||||
- free_gdp_blocks(fs, &old_fs->group_desc[i]);
|
|
||||||
+ free_gdp_blocks(fs, reserve_blocks,
|
|
||||||
+ &old_fs->group_desc[i]);
|
|
||||||
}
|
|
||||||
retval = 0;
|
|
||||||
goto errout;
|
|
||||||
@@ -550,7 +565,12 @@ static errcode_t adjust_superblock(ext2_
|
|
||||||
ext2fs_mark_bb_dirty(fs);
|
|
||||||
ext2fs_mark_ib_dirty(fs);
|
|
||||||
|
|
||||||
- retval = adjust_fs_info(fs, rfs->old_fs, new_size);
|
|
||||||
+ retval = ext2fs_allocate_block_bitmap(fs, _("reserved blocks"),
|
|
||||||
+ &rfs->reserve_blocks);
|
|
||||||
+ if (retval)
|
|
||||||
+ return retval;
|
|
||||||
+
|
|
||||||
+ retval = adjust_fs_info(fs, rfs->old_fs, rfs->reserve_blocks, new_size);
|
|
||||||
if (retval)
|
|
||||||
goto errout;
|
|
||||||
|
|
||||||
@@ -746,17 +766,13 @@ static errcode_t blocks_to_move(ext2_res
|
|
||||||
errcode_t retval;
|
|
||||||
ext2_filsys fs, old_fs;
|
|
||||||
ext2fs_block_bitmap meta_bmap;
|
|
||||||
+ __u32 save_incompat_flag;
|
|
||||||
|
|
||||||
fs = rfs->new_fs;
|
|
||||||
old_fs = rfs->old_fs;
|
|
||||||
if (old_fs->super->s_blocks_count > fs->super->s_blocks_count)
|
|
||||||
fs = rfs->old_fs;
|
|
||||||
|
|
||||||
- retval = ext2fs_allocate_block_bitmap(fs, _("reserved blocks"),
|
|
||||||
- &rfs->reserve_blocks);
|
|
||||||
- if (retval)
|
|
||||||
- return retval;
|
|
||||||
-
|
|
||||||
retval = ext2fs_allocate_block_bitmap(fs, _("blocks to be moved"),
|
|
||||||
&rfs->move_blocks);
|
|
||||||
if (retval)
|
|
||||||
@@ -788,7 +804,7 @@ static errcode_t blocks_to_move(ext2_res
|
|
||||||
* to the next block group.
|
|
||||||
*/
|
|
||||||
blk = ((g+1) * fs->super->s_blocks_per_group) +
|
|
||||||
- fs->super->s_first_data_block;
|
|
||||||
+ fs->super->s_first_data_block - 1;
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
if (ext2fs_test_block_bitmap(old_fs->block_map, blk) &&
|
|
||||||
@@ -890,9 +906,29 @@ static errcode_t blocks_to_move(ext2_res
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Allocate the missing data structures
|
|
||||||
+ *
|
|
||||||
+ * XXX We have a problem with FLEX_BG and off-line
|
|
||||||
+ * resizing where we are growing the size of the
|
|
||||||
+ * filesystem. ext2fs_allocate_group_table() will try
|
|
||||||
+ * to reserve the inode table in the desired flex_bg
|
|
||||||
+ * location. However, passing rfs->reserve_blocks
|
|
||||||
+ * doesn't work since it only has reserved the blocks
|
|
||||||
+ * that will be used in the new block group -- and
|
|
||||||
+ * with flex_bg, we can and will allocate the tables
|
|
||||||
+ * outside of the block group. And we can't pass in
|
|
||||||
+ * the fs->block_map because it doesn't handle
|
|
||||||
+ * overlapping inode table movements right. So for
|
|
||||||
+ * now, we temporarily disable flex_bg to force
|
|
||||||
+ * ext2fs_allocate_group_tables() to allocate the bg
|
|
||||||
+ * metadata in side the block group, and the restore
|
|
||||||
+ * it afterwards. Ugly, until we can fix this up
|
|
||||||
+ * right later.
|
|
||||||
*/
|
|
||||||
+ save_incompat_flag = fs->super->s_feature_incompat;
|
|
||||||
+ fs->super->s_feature_incompat &= ~EXT4_FEATURE_INCOMPAT_FLEX_BG;
|
|
||||||
retval = ext2fs_allocate_group_table(fs, i,
|
|
||||||
rfs->reserve_blocks);
|
|
||||||
+ fs->super->s_feature_incompat = save_incompat_flag;
|
|
||||||
if (retval)
|
|
||||||
goto errout;
|
|
||||||
|
|
||||||
@@ -1857,6 +1893,19 @@ blk_t calculate_minimum_resize_size(ext2
|
|
||||||
data_needed -= SUPER_OVERHEAD(fs) * num_of_superblocks;
|
|
||||||
data_needed -= META_OVERHEAD(fs) * fs->group_desc_count;
|
|
||||||
|
|
||||||
+ if (fs->super->s_feature_incompat & EXT4_FEATURE_INCOMPAT_FLEX_BG) {
|
|
||||||
+ /*
|
|
||||||
+ * For ext4 we need to allow for up to a flex_bg worth
|
|
||||||
+ * of inode tables of slack space so the resize
|
|
||||||
+ * operation can be guaranteed to finish.
|
|
||||||
+ */
|
|
||||||
+ int flexbg_size = 1 << fs->super->s_log_groups_per_flex;
|
|
||||||
+ int extra_groups;
|
|
||||||
+
|
|
||||||
+ extra_groups = flexbg_size - (groups & (flexbg_size - 1));
|
|
||||||
+ data_needed += META_OVERHEAD(fs) * extra_groups;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
/*
|
|
||||||
* figure out how many data blocks we have given the number of groups
|
|
||||||
* we need for our inodes
|
|
||||||
Index: e2fsprogs-1.41.4/resize/online.c
|
|
||||||
===================================================================
|
|
||||||
--- e2fsprogs-1.41.4.orig/resize/online.c
|
|
||||||
+++ e2fsprogs-1.41.4/resize/online.c
|
|
||||||
@@ -104,7 +104,7 @@ errcode_t online_resize_fs(ext2_filsys f
|
|
||||||
* but at least it allows on-line resizing to function.
|
|
||||||
*/
|
|
||||||
new_fs->super->s_feature_incompat &= ~EXT4_FEATURE_INCOMPAT_FLEX_BG;
|
|
||||||
- retval = adjust_fs_info(new_fs, fs, *new_size);
|
|
||||||
+ retval = adjust_fs_info(new_fs, fs, 0, *new_size);
|
|
||||||
if (retval)
|
|
||||||
return retval;
|
|
||||||
|
|
||||||
Index: e2fsprogs-1.41.4/resize/resize2fs.h
|
|
||||||
===================================================================
|
|
||||||
--- e2fsprogs-1.41.4.orig/resize/resize2fs.h
|
|
||||||
+++ e2fsprogs-1.41.4/resize/resize2fs.h
|
|
||||||
@@ -128,6 +128,7 @@ extern errcode_t resize_fs(ext2_filsys f
|
|
||||||
unsigned long max));
|
|
||||||
|
|
||||||
extern errcode_t adjust_fs_info(ext2_filsys fs, ext2_filsys old_fs,
|
|
||||||
+ ext2fs_block_bitmap reserve_blocks,
|
|
||||||
blk_t new_size);
|
|
||||||
extern blk_t calculate_minimum_resize_size(ext2_filsys fs);
|
|
||||||
|
|
@ -1,56 +0,0 @@
|
|||||||
The coverity scanner found this one.
|
|
||||||
|
|
||||||
If a line in modules.dep has a ":" but no "/" then:
|
|
||||||
|
|
||||||
if ((cp = strchr(buf, ':')) != NULL)
|
|
||||||
*cp = 0;
|
|
||||||
else
|
|
||||||
continue;
|
|
||||||
if ((cp = strrchr(buf, '/')) != NULL)
|
|
||||||
cp++;
|
|
||||||
/* XXX else cp is still null */
|
|
||||||
i = strlen(cp);
|
|
||||||
|
|
||||||
... we will deref a null pointer (cp). This can be
|
|
||||||
demonstrated by putting a line like:
|
|
||||||
|
|
||||||
foo.ko:
|
|
||||||
|
|
||||||
into modules.dep. The below change just says that if no "/" is
|
|
||||||
found, treat the whole string as the module name.
|
|
||||||
|
|
||||||
Signed-off-by: Eric Sandeen <sandeen@redhat.com>
|
|
||||||
---
|
|
||||||
|
|
||||||
Index: e2fsprogs/e2fsck/util.c
|
|
||||||
===================================================================
|
|
||||||
--- e2fsprogs.orig/e2fsck/util.c
|
|
||||||
+++ e2fsprogs/e2fsck/util.c
|
|
||||||
@@ -663,6 +663,8 @@ int check_for_modules(const char *fs_nam
|
|
||||||
continue;
|
|
||||||
if ((cp = strrchr(buf, '/')) != NULL)
|
|
||||||
cp++;
|
|
||||||
+ else
|
|
||||||
+ cp = buf;
|
|
||||||
i = strlen(cp);
|
|
||||||
if (i > 3) {
|
|
||||||
t = cp + i - 3;
|
|
||||||
Index: e2fsprogs/lib/blkid/probe.c
|
|
||||||
===================================================================
|
|
||||||
--- e2fsprogs.orig/lib/blkid/probe.c
|
|
||||||
+++ e2fsprogs/lib/blkid/probe.c
|
|
||||||
@@ -227,6 +227,8 @@ static int check_for_modules(const char
|
|
||||||
continue;
|
|
||||||
if ((cp = strrchr(buf, '/')) != NULL)
|
|
||||||
cp++;
|
|
||||||
+ else
|
|
||||||
+ cp = buf;
|
|
||||||
i = strlen(cp);
|
|
||||||
if (i > 3) {
|
|
||||||
t = cp + i - 3;
|
|
||||||
|
|
||||||
--
|
|
||||||
To unsubscribe from this list: send the line "unsubscribe linux-ext4" in
|
|
||||||
the body of a message to majordomo@vger.kernel.org
|
|
||||||
More majordomo info at http://vger.kernel.org/majordomo-info.html
|
|
||||||
|
|
@ -1,42 +0,0 @@
|
|||||||
From: Theodore Ts'o <tytso@mit.edu>
|
|
||||||
Date: Tue, 17 Mar 2009 02:16:44 +0000 (-0400)
|
|
||||||
Subject: libext2fs: external journal devices should not cause ext2fs_open2 to fail
|
|
||||||
X-Git-Url: http://git.kernel.org/?p=fs%2Fext2%2Fe2fsprogs.git;a=commitdiff_plain;h=341b52dfa8c2afc11d8410de9bd381b03e75c6af
|
|
||||||
|
|
||||||
libext2fs: external journal devices should not cause ext2fs_open2 to fail
|
|
||||||
|
|
||||||
This fixes a regression introduced in commit 79a9ab14 which caused
|
|
||||||
attempts to open external journals to fail due to overly strict
|
|
||||||
filesystem consistency checks.
|
|
||||||
|
|
||||||
Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
|
|
||||||
---
|
|
||||||
|
|
||||||
diff --git a/lib/ext2fs/openfs.c b/lib/ext2fs/openfs.c
|
|
||||||
index cdfeaec..f6fe3f0 100644
|
|
||||||
--- a/lib/ext2fs/openfs.c
|
|
||||||
+++ b/lib/ext2fs/openfs.c
|
|
||||||
@@ -243,10 +243,6 @@ errcode_t ext2fs_open2(const char *name, const char *io_options,
|
|
||||||
goto cleanup;
|
|
||||||
}
|
|
||||||
fs->fragsize = EXT2_FRAG_SIZE(fs->super);
|
|
||||||
- if (EXT2_INODES_PER_GROUP(fs->super) == 0) {
|
|
||||||
- retval = EXT2_ET_CORRUPT_SUPERBLOCK;
|
|
||||||
- goto cleanup;
|
|
||||||
- }
|
|
||||||
fs->inode_blocks_per_group = ((EXT2_INODES_PER_GROUP(fs->super) *
|
|
||||||
EXT2_INODE_SIZE(fs->super) +
|
|
||||||
EXT2_BLOCK_SIZE(fs->super) - 1) /
|
|
||||||
@@ -273,6 +269,11 @@ errcode_t ext2fs_open2(const char *name, const char *io_options,
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
+ if (EXT2_INODES_PER_GROUP(fs->super) == 0) {
|
|
||||||
+ retval = EXT2_ET_CORRUPT_SUPERBLOCK;
|
|
||||||
+ goto cleanup;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
/*
|
|
||||||
* Read group descriptors
|
|
||||||
*/
|
|
||||||
|
|
@ -1,37 +0,0 @@
|
|||||||
This is for RH bugzilla 471925 - Complete scan of filesystems expanded online
|
|
||||||
|
|
||||||
When we resize online, the primary superblock gets copied to all
|
|
||||||
the backups, and of course since we're mounted the NEEDS_RECOVERY
|
|
||||||
flag is set. A subsequent fsck will find the backups have the
|
|
||||||
NEEDS_RECOVERY flag set while the primary does not, and this
|
|
||||||
forces a full fsck pass.
|
|
||||||
|
|
||||||
I think this flag can be safely ignored in the flag comparisons.
|
|
||||||
|
|
||||||
Signed-off-by: Eric Sandeen <sandeen@redhat.com>
|
|
||||||
---
|
|
||||||
|
|
||||||
Index: e2fsprogs-1.41.4/e2fsck/super.c
|
|
||||||
===================================================================
|
|
||||||
--- e2fsprogs-1.41.4.orig/e2fsck/super.c
|
|
||||||
+++ e2fsprogs-1.41.4/e2fsck/super.c
|
|
||||||
@@ -864,7 +864,8 @@ void check_super_block(e2fsck_t ctx)
|
|
||||||
* try to discourage it in the future. In particular, for the newer
|
|
||||||
* ext4 files, especially EXT4_FEATURE_RO_COMPAT_DIR_NLINK and
|
|
||||||
* EXT3_FEATURE_INCOMPAT_EXTENTS. So some of these may go away in the
|
|
||||||
- * future.
|
|
||||||
+ * future. EXT3_FEATURE_INCOMPAT_RECOVER may also get set when
|
|
||||||
+ * copying the primary superblock during online resize.
|
|
||||||
*
|
|
||||||
* The kernel will set EXT2_FEATURE_COMPAT_EXT_ATTR, but
|
|
||||||
* unfortunately, we shouldn't ignore it since if it's not set in the
|
|
||||||
@@ -877,7 +878,8 @@ void check_super_block(e2fsck_t ctx)
|
|
||||||
#define FEATURE_COMPAT_IGNORE (EXT2_FEATURE_COMPAT_EXT_ATTR)
|
|
||||||
#define FEATURE_RO_COMPAT_IGNORE (EXT2_FEATURE_RO_COMPAT_LARGE_FILE| \
|
|
||||||
EXT4_FEATURE_RO_COMPAT_DIR_NLINK)
|
|
||||||
-#define FEATURE_INCOMPAT_IGNORE (EXT3_FEATURE_INCOMPAT_EXTENTS)
|
|
||||||
+#define FEATURE_INCOMPAT_IGNORE (EXT3_FEATURE_INCOMPAT_EXTENTS| \
|
|
||||||
+ EXT3_FEATURE_INCOMPAT_RECOVER)
|
|
||||||
|
|
||||||
int check_backup_super_block(e2fsck_t ctx)
|
|
||||||
{
|
|
@ -1,13 +0,0 @@
|
|||||||
Index: e2fsprogs/doc/libext2fs.texinfo
|
|
||||||
===================================================================
|
|
||||||
--- e2fsprogs.orig/doc/libext2fs.texinfo 2009-01-28 20:56:26.000000000 -0600
|
|
||||||
+++ e2fsprogs/doc/libext2fs.texinfo 2009-01-29 16:36:53.148590911 -0600
|
|
||||||
@@ -8,7 +8,7 @@
|
|
||||||
@ifinfo
|
|
||||||
@dircategory Development
|
|
||||||
@direntry
|
|
||||||
-* libext2fs: (libext2fs.info). The EXT2FS library.
|
|
||||||
+* libext2fs: (libext2fs). The EXT2FS library.
|
|
||||||
@end direntry
|
|
||||||
@end ifinfo
|
|
||||||
|
|
@ -3,8 +3,8 @@
|
|||||||
|
|
||||||
Summary: Utilities for managing ext2, ext3, and ext4 filesystems
|
Summary: Utilities for managing ext2, ext3, and ext4 filesystems
|
||||||
Name: e2fsprogs
|
Name: e2fsprogs
|
||||||
Version: 1.41.4
|
Version: 1.41.5
|
||||||
Release: 8%{?dist}
|
Release: 1%{?dist}
|
||||||
# License based on upstream-modified COPYING file,
|
# License based on upstream-modified COPYING file,
|
||||||
# which clearly states "V2" intent.
|
# which clearly states "V2" intent.
|
||||||
License: GPLv2
|
License: GPLv2
|
||||||
@ -15,12 +15,6 @@ Source2: blkid_types-wrapper.h
|
|||||||
Source3: uuidd.init
|
Source3: uuidd.init
|
||||||
Patch1: e2fsprogs-1.38-etcblkid.patch
|
Patch1: e2fsprogs-1.38-etcblkid.patch
|
||||||
Patch2: e2fsprogs-1.40.4-sb_feature_check_ignore.patch
|
Patch2: e2fsprogs-1.40.4-sb_feature_check_ignore.patch
|
||||||
Patch3: e2fsprogs-1.41.4-debugfs-stat-segfault.patch
|
|
||||||
Patch4: e2fsprogs-1.41.4-libext2fs-info.patch
|
|
||||||
Patch5: e2fsprogs-1.41.4-fix-blkid-segfault.patch
|
|
||||||
Patch6: e2fsprogs-1.41.4-ignore-NEEDS_RECOVERY-mismatch.patch
|
|
||||||
Patch7: e2fsprogs-1.41.4-ext4-resize-fixes.patch
|
|
||||||
Patch8: e2fsprogs-1.41.4-fix-external-journals.patch
|
|
||||||
|
|
||||||
Url: http://e2fsprogs.sourceforge.net/
|
Url: http://e2fsprogs.sourceforge.net/
|
||||||
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
|
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
|
||||||
@ -98,18 +92,6 @@ SMP systems.
|
|||||||
# mildly unsafe but 'til I get something better, avoid full fsck
|
# mildly unsafe but 'til I get something better, avoid full fsck
|
||||||
# after an selinux install...
|
# after an selinux install...
|
||||||
%patch2 -p1 -b .featurecheck
|
%patch2 -p1 -b .featurecheck
|
||||||
# Fix segfault in debugfs "stat" if fs not open
|
|
||||||
%patch3 -p1 -b .statfs
|
|
||||||
# Fix up name of info file
|
|
||||||
%patch4 -p1 -b .info
|
|
||||||
# Fix blkid segfault in modules.dep scanning
|
|
||||||
%patch5 -p1 -b .info
|
|
||||||
# Ignore NEEDS_RECOVERY mismatch
|
|
||||||
%patch6 -p1 -b .recovery
|
|
||||||
# Fix ext4 resize issues
|
|
||||||
%patch7 -p1 -b .resize
|
|
||||||
# Fix external journals
|
|
||||||
%patch8 -p1 -b .ext-journal
|
|
||||||
|
|
||||||
%build
|
%build
|
||||||
%configure --enable-elf-shlibs --enable-nls --disable-e2initrd-helper --enable-blkid-devmapper --enable-blkid-selinux
|
%configure --enable-elf-shlibs --enable-nls --disable-e2initrd-helper --enable-blkid-devmapper --enable-blkid-selinux
|
||||||
@ -308,6 +290,9 @@ fi
|
|||||||
%dir %attr(2775, uuidd, uuidd) /var/lib/libuuid
|
%dir %attr(2775, uuidd, uuidd) /var/lib/libuuid
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Fri Apr 24 2009 Eric Sandeen <sandeen@redhat.com> 1.41.5-1
|
||||||
|
- New upstream version
|
||||||
|
|
||||||
* Wed Apr 22 2009 Eric Sandeen <sandeen@redhat.com> 1.41.4-8
|
* Wed Apr 22 2009 Eric Sandeen <sandeen@redhat.com> 1.41.4-8
|
||||||
- Fix support for external journals
|
- Fix support for external journals
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user