[e2fsprogs] More mmp fixes

Eric Sandeen sandeen at fedoraproject.org
Thu Nov 10 23:05:29 UTC 2011


commit ef8f64dfa875add3e1c428a4be3701e021062171
Author: Eric Sandeen <sandeen at redhat.com>
Date:   Thu Nov 10 17:05:12 2011 -0600

    More mmp fixes

 e2fsprogs-1.42-bigendian-fix.patch |  297 ++++++++++++++++++++++++++++++++++--
 e2fsprogs.spec                     |    5 +-
 2 files changed, 289 insertions(+), 13 deletions(-)
---
diff --git a/e2fsprogs-1.42-bigendian-fix.patch b/e2fsprogs-1.42-bigendian-fix.patch
index b938a0b..b873d09 100644
--- a/e2fsprogs-1.42-bigendian-fix.patch
+++ b/e2fsprogs-1.42-bigendian-fix.patch
@@ -1,8 +1,3 @@
-Date:	Tue, 08 Nov 2011 16:26:35 -0600
-From: Eric Sandeen <sandeen at redhat.com>
-To: ext4 development <linux-ext4 at vger.kernel.org>
-Subject: [PATCH] libext2: advance group in ext2fs_open2 during swapping
-
 Without this change, we go back to getting group descriptor
 "0" each time we go around the "for i" loop.  It must properly
 advance through the filesystem.
@@ -37,10 +32,288 @@ index 0cefe3f..40a52c5 100644
  			ext2fs_swap_group_desc2(fs, gdp);
  		}
  #endif
-
---
-To unsubscribe from this list: send the line "unsubscribe linux-ext4" in
-the body of a message to majordomo at vger.kernel.org
-More majordomo info at  http://vger.kernel.org/majordomo-info.html
-
-
+diff --git a/debugfs/debugfs.c b/debugfs/debugfs.c
+index eba3b69..1fb8f44 100644
+--- a/debugfs/debugfs.c
++++ b/debugfs/debugfs.c
+@@ -2165,11 +2165,15 @@ void do_punch(int argc, char *argv[])
+ 
+ void do_dump_mmp(int argc, char *argv[])
+ {
+-	struct ext2_super_block *sb = current_fs->super;
++	struct ext2_super_block *sb;
+ 	struct mmp_struct *mmp_s;
+ 	time_t t;
+ 	errcode_t retval = 0;
+ 
++	if (check_fs_open(argv[0]))
++		return;
++
++	sb  = current_fs->super;
+ 	if (sb->s_mmp_block <= sb->s_first_data_block ||
+ 	    sb->s_mmp_block >= ext2fs_blocks_count(sb)) {
+ 		com_err(argv[0], EXT2_ET_MMP_BAD_BLOCK, "while dumping it.\n");
+@@ -2203,6 +2207,7 @@ void do_dump_mmp(int argc, char *argv[])
+ 	fprintf(stdout, "time: %lld -- %s", mmp_s->mmp_time, ctime(&t));
+ 	fprintf(stdout, "node_name: %s\n", mmp_s->mmp_nodename);
+ 	fprintf(stdout, "device_name: %s\n", mmp_s->mmp_bdevname);
++	fprintf(stdout, "magic: 0x%x\n", mmp_s->mmp_magic);
+ }
+ 
+ static int source_file(const char *cmd_file, int sci_idx)
+diff --git a/debugfs/set_fields.c b/debugfs/set_fields.c
+index d461275..0041160 100644
+--- a/debugfs/set_fields.c
++++ b/debugfs/set_fields.c
+@@ -242,6 +242,9 @@ static struct field_set_info ext4_bg_fields[] = {
+ 	{ 0, 0, 0, 0 }
+ };
+ 
++/* forward declaration */
++static struct field_set_info mmp_fields[];
++
+ static int check_suffix(const char *field)
+ {
+ 	int len = strlen(field);
+@@ -561,6 +564,9 @@ static void print_possible_fields(struct field_set_info *fields)
+ 	} else if (fields == inode_fields) {
+ 		type = "Inode";
+ 		cmd = "set_inode";
++	} else if (fields == mmp_fields) {
++		type = "MMP";
++		cmd = "set_mmp_value";
+ 	} else {
+ 		type = "Block group descriptor";
+ 		cmd = "set_block_group";
+@@ -768,6 +774,9 @@ void do_set_mmp_value(int argc, char *argv[])
+ 		return;
+ 	}
+ 
++	if (check_fs_open(argv[0]))
++		return;
++
+ 	if (current_fs->super->s_mmp_block == 0) {
+ 		com_err(argv[0], 0, "no MMP block allocated\n");
+ 		return;
+diff --git a/lib/ext2fs/mmp.c b/lib/ext2fs/mmp.c
+index 91f4fb2..b27d9a4 100644
+--- a/lib/ext2fs/mmp.c
++++ b/lib/ext2fs/mmp.c
+@@ -127,7 +127,7 @@ errcode_t ext2fs_mmp_write(ext2_filsys fs, blk64_t mmp_blk, void *buf)
+ 
+ 	/* I was tempted to make this use O_DIRECT and the mmp_fd, but
+ 	 * this caused no end of grief, while leaving it as-is works. */
+-	retval = io_channel_write_blk64(fs->io, mmp_blk, -fs->blocksize, buf);
++	retval = io_channel_write_blk64(fs->io, mmp_blk, -(int)sizeof(struct mmp_struct), buf);
+ 
+ #ifdef WORDS_BIGENDIAN
+ 	ext2fs_swap_mmp(mmp_s);
+diff --git a/tests/f_mmp/script b/tests/f_mmp/script
+index 548734a..4aca447 100644
+--- a/tests/f_mmp/script
++++ b/tests/f_mmp/script
+@@ -12,7 +12,7 @@ if [ $? == 0 ]; then
+ fi
+ 
+ echo "make the test image ..." > $test_name.log
+-$MKE2FS -q -F -o Linux -b 1024 -O mmp -E mmp_update_interval=1 $TMPFILE 100 >> $test_name.log 2>&1
++$MKE2FS -q -F -o Linux -b 4096 -O mmp -E mmp_update_interval=1 $TMPFILE 100 >> $test_name.log 2>&1
+ status=$?
+ if [ "$status" != 0 ] ; then
+ 	echo "mke2fs -O mmp failed" > $test_name.failed
+diff --git a/tests/f_mmp_garbage/expect.1 b/tests/f_mmp_garbage/expect.1
+index 4ee5cfb..a8add10 100644
+--- a/tests/f_mmp_garbage/expect.1
++++ b/tests/f_mmp_garbage/expect.1
+@@ -5,5 +5,5 @@ Pass 2: Checking directory structure
+ Pass 3: Checking directory connectivity
+ Pass 4: Checking reference counts
+ Pass 5: Checking group summary information
+-test_filesys: 11/16 files (0.0% non-contiguous), 22/100 blocks
++test_filesys: 11/64 files (0.0% non-contiguous), 13/100 blocks
+ Exit status is 0
+diff --git a/tests/f_mmp_garbage/expect.2 b/tests/f_mmp_garbage/expect.2
+index 3bf3869..6630002 100644
+--- a/tests/f_mmp_garbage/expect.2
++++ b/tests/f_mmp_garbage/expect.2
+@@ -3,5 +3,5 @@ Pass 2: Checking directory structure
+ Pass 3: Checking directory connectivity
+ Pass 4: Checking reference counts
+ Pass 5: Checking group summary information
+-test_filesys: 11/16 files (0.0% non-contiguous), 22/100 blocks
++test_filesys: 11/64 files (0.0% non-contiguous), 13/100 blocks
+ Exit status is 0
+diff --git a/tests/f_mmp_garbage/script b/tests/f_mmp_garbage/script
+index 3c80032..8b5a22a 100644
+--- a/tests/f_mmp_garbage/script
++++ b/tests/f_mmp_garbage/script
+@@ -12,7 +12,7 @@ if [ $? == 0 ] ; then
+ fi
+ 
+ echo "make the test image ..." > $test_name.log
+-$MKE2FS -q -F -o Linux -b 1024 -O mmp -E mmp_update_interval=1 $TMPFILE 100 >> $test_name.log 2>&1
++$MKE2FS -q -F -o Linux -b 4096 -O mmp -E mmp_update_interval=1 $TMPFILE 100 >> $test_name.log 2>&1
+ status=$?
+ if [ "$status" != 0 ] ; then
+ 	echo "mke2fs -O mmp failed" > $test_name.failed
+diff --git a/tests/m_mmp/expect.1 b/tests/m_mmp/expect.1
+index 3a00815..d3319b3 100644
+--- a/tests/m_mmp/expect.1
++++ b/tests/m_mmp/expect.1
+@@ -1,55 +1,55 @@
+ Filesystem label=
+ OS type: Linux
+-Block size=2048 (log=1)
+-Fragment size=2048 (log=1)
++Block size=4096 (log=2)
++Fragment size=4096 (log=2)
+ Stride=0 blocks, Stripe width=0 blocks
+-16384 inodes, 32768 blocks
+-1638 blocks (5.00%) reserved for the super user
++65536 inodes, 65536 blocks
++3276 blocks (5.00%) reserved for the super user
+ First data block=0
+-Maximum filesystem blocks=33554432
++Maximum filesystem blocks=67108864
+ 2 block groups
+-16384 blocks per group, 16384 fragments per group
+-8192 inodes per group
++32768 blocks per group, 32768 fragments per group
++32768 inodes per group
+ Superblock backups stored on blocks: 
+-	16384
++	32768
+ 
+ Allocating group tables: 0/21/2   done                            
+ Writing inode tables: 0/21/2   done                            
+ Multiple mount protection is enabled with update interval 5 seconds.
+ Writing superblocks and filesystem accounting information: 0/21/2   done
+ 
+-Filesystem features: ext_attr resize_inode dir_index filetype mmp sparse_super
++Filesystem features: ext_attr resize_inode dir_index filetype mmp sparse_super large_file
+  
+ Pass 1: Checking inodes, blocks, and sizes
+ Pass 2: Checking directory structure
+ Pass 3: Checking directory connectivity
+ Pass 4: Checking reference counts
+ Pass 5: Checking group summary information
+-test_filesys: 11/16384 files (0.0% non-contiguous), 1105/32768 blocks
++test_filesys: 11/65536 files (0.0% non-contiguous), 2093/65536 blocks
+ Exit status is 0
+ 
+ Filesystem volume name:   <none>
+ Last mounted on:          <not available>
+ Filesystem magic number:  0xEF53
+ Filesystem revision #:    1 (dynamic)
+-Filesystem features:      ext_attr resize_inode dir_index filetype mmp sparse_super
++Filesystem features:      ext_attr resize_inode dir_index filetype mmp sparse_super large_file
+ Default mount options:    (none)
+ Filesystem state:         clean
+ Errors behavior:          Continue
+ Filesystem OS type:       Linux
+-Inode count:              16384
+-Block count:              32768
+-Reserved block count:     1638
+-Free blocks:              31663
+-Free inodes:              16373
++Inode count:              65536
++Block count:              65536
++Reserved block count:     3276
++Free blocks:              63443
++Free inodes:              65525
+ First block:              0
+-Block size:               2048
+-Fragment size:            2048
+-Reserved GDT blocks:      31
+-Blocks per group:         16384
+-Fragments per group:      16384
+-Inodes per group:         8192
+-Inode blocks per group:   512
++Block size:               4096
++Fragment size:            4096
++Reserved GDT blocks:      15
++Blocks per group:         32768
++Fragments per group:      32768
++Inodes per group:         32768
++Inode blocks per group:   1024
+ Mount count:              0
+ Check interval:           15552000 (6 months)
+ Reserved blocks uid:      0
+@@ -57,23 +57,23 @@ Reserved blocks gid:      0
+ First inode:              11
+ Inode size:	          128
+ Default directory hash:   half_md4
+-MMP block number:         557
++MMP block number:         1049
+ MMP update interval:      5
+ 
+ 
+-Group 0: (Blocks 0-16383)
++Group 0: (Blocks 0-32767)
+   Primary superblock at 0, Group descriptors at 1-1
+-  Reserved GDT blocks at 2-32
+-  Block bitmap at 33 (+33), Inode bitmap at 34 (+34)
+-  Inode table at 35-546 (+35)
+-  15826 free blocks, 8181 free inodes, 2 directories
+-  Free blocks: 558-16383
+-  Free inodes: 12-8192
+-Group 1: (Blocks 16384-32767)
+-  Backup superblock at 16384, Group descriptors at 16385-16385
+-  Reserved GDT blocks at 16386-16416
+-  Block bitmap at 16417 (+33), Inode bitmap at 16418 (+34)
+-  Inode table at 16419-16930 (+35)
+-  15837 free blocks, 8192 free inodes, 0 directories
+-  Free blocks: 16931-32767
+-  Free inodes: 8193-16384
++  Reserved GDT blocks at 2-16
++  Block bitmap at 17 (+17), Inode bitmap at 18 (+18)
++  Inode table at 19-1042 (+19)
++  31718 free blocks, 32757 free inodes, 2 directories
++  Free blocks: 1050-32767
++  Free inodes: 12-32768
++Group 1: (Blocks 32768-65535)
++  Backup superblock at 32768, Group descriptors at 32769-32769
++  Reserved GDT blocks at 32770-32784
++  Block bitmap at 32785 (+17), Inode bitmap at 32786 (+18)
++  Inode table at 32787-33810 (+19)
++  31725 free blocks, 32768 free inodes, 0 directories
++  Free blocks: 33811-65535
++  Free inodes: 32769-65536
+diff --git a/tests/m_mmp/script b/tests/m_mmp/script
+index 1547463..b3e206a 100644
+--- a/tests/m_mmp/script
++++ b/tests/m_mmp/script
+@@ -10,6 +10,6 @@ if [ $? == 0 ]; then
+ 	echo "skipped for tmpfs (no O_DIRECT support)"
+ 	return 0
+ fi
+-MKE2FS_OPTS="-O mmp"
++MKE2FS_OPTS="-b 4096 -O mmp"
+ . $cmd_dir/run_mke2fs
+ unset MKE2FS_DEVICE_SECTSIZE
+diff --git a/tests/t_mmp_1on/script b/tests/t_mmp_1on/script
+index ee9884f..3b0a376 100644
+--- a/tests/t_mmp_1on/script
++++ b/tests/t_mmp_1on/script
+@@ -11,7 +11,7 @@ if [ $? == 0 ] ; then
+ 	return 0
+ fi
+ 
+-$MKE2FS -q -F -o Linux -b 1024 $TMPFILE 100 > $test_name.log 2>&1
++$MKE2FS -q -F -o Linux -b 4096 $TMPFILE 100 > $test_name.log 2>&1
+ status=$?
+ if [ "$status" != 0 ] ; then
+ 	echo "mke2fs failed" > $test_name.failed
+diff --git a/tests/t_mmp_2off/script b/tests/t_mmp_2off/script
+index ec9f71e..56c6bed 100644
+--- a/tests/t_mmp_2off/script
++++ b/tests/t_mmp_2off/script
+@@ -11,7 +11,7 @@ if [ $? == 0 ]; then
+ 	return 0
+ fi
+ 
+-$MKE2FS -q -F -o Linux -b 1024 -O mmp $TMPFILE 100 > $test_name.log 2>&1
++$MKE2FS -q -F -o Linux -b 4096 -O mmp $TMPFILE 100 > $test_name.log 2>&1
+ status=$?
+ if [ "$status" != 0 ] ; then
+ 	echo "mke2fs -O mmp failed" > $test_name.failed
diff --git a/e2fsprogs.spec b/e2fsprogs.spec
index cc88478..10d8deb 100644
--- a/e2fsprogs.spec
+++ b/e2fsprogs.spec
@@ -4,7 +4,7 @@
 Summary: Utilities for managing ext2, ext3, and ext4 filesystems
 Name: e2fsprogs
 Version: 1.42
-Release: 0.6.WIP.1016%{?dist}
+Release: 0.7.WIP.1016%{?dist}
 
 # License tags based on COPYING file distinctions for various components
 License: GPLv2
@@ -322,6 +322,9 @@ exit 0
 %{_libdir}/pkgconfig/ss.pc
 
 %changelog
+* Thu Nov 10 2011 Eric Sandeen <sandeen at redhat.com> 1.42-0.7.WIP.1016
+- Several mmp-related fixes
+
 * Tue Nov 08 2011 Eric Sandeen <sandeen at redhat.com> 1.42-0.6.WIP.1016
 - Fix e2fsck / make check on big endian arch
 


More information about the scm-commits mailing list