* Fri Apr 24 2009 Eric Sandeen <sandeen@redhat.com> 1.41.5-1

- New upstream version
This commit is contained in:
Eric Sandeen 2009-04-24 15:41:36 +00:00
parent 41218bb72d
commit 740dfcb267
9 changed files with 40 additions and 467 deletions

View File

@ -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

View File

@ -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) ||

View File

@ -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 = &current_fs->group_desc[0];
for (i = 0; i < current_fs->group_desc_count; i++, gdp++) {
fprintf(out, " Group %2d: block bitmap at %u, "

View File

@ -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);

View File

@ -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

View File

@ -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
*/

View File

@ -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)
{

View File

@ -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

View File

@ -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