cluster: RHEL511 - gfs2-utils: patch to update gfs1 superblock correctly

Abhijith Das adas at fedoraproject.org
Mon Apr 14 20:00:38 UTC 2014


Gitweb:        http://git.fedorahosted.org/git/?p=cluster.git;a=commitdiff;h=34ec3fa0784072b323aa46e23d1193a90b3cd59d
Commit:        34ec3fa0784072b323aa46e23d1193a90b3cd59d
Parent:        700ec50c22d2135d2cdbd93eaa90c4b6983dc7ca
Author:        Abhi Das <adas at redhat.com>
AuthorDate:    Mon Apr 14 14:58:06 2014 -0500
Committer:     Abhi Das <adas at redhat.com>
CommitterDate: Mon Apr 14 14:58:06 2014 -0500

gfs2-utils: patch to update gfs1 superblock correctly

gfs2-utils uses the gfs2_sb structure as a template to operate on
both gfs1 and gfs2 superblocks. Some fields of the gfs1 superblock
are not in gfs2 and are replaced by padded fields. These padded
fields were not being written out after modification and were
instead being zeroed out, thereby causing corruption.
This patch fixes gfs2_sb_out() to write out the padded fields.

This is a port of the upstream patch here:
https://git.fedorahosted.org/cgit/gfs2-utils.git/commit/?id=f8d4e5711ab545af5ec577386e4e2ce0c111cea1

Resolves: rhbz#1084140
Signed-off-by: Abhi Das <adas at redhat.com>
---
 gfs2/fsck/ondisk.c    |    5 +++++
 gfs2/libgfs2/ondisk.c |    5 +++++
 2 files changed, 10 insertions(+), 0 deletions(-)

diff --git a/gfs2/fsck/ondisk.c b/gfs2/fsck/ondisk.c
index e43cd26..028c035 100644
--- a/gfs2/fsck/ondisk.c
+++ b/gfs2/fsck/ondisk.c
@@ -125,15 +125,20 @@ void gfs2_sb_out(struct gfs2_sb *sb, struct gfs2_buffer_head *bh)
 
 	CPOUT_32(sb, str, sb_fs_format);
 	CPOUT_32(sb, str, sb_multihost_format);
+	CPOUT_32(sb, str, __pad0);
 
 	CPOUT_32(sb, str, sb_bsize);
 	CPOUT_32(sb, str, sb_bsize_shift);
+	CPOUT_32(sb, str, __pad1);
 
 	gfs2_inum_out(&sb->sb_master_dir, (char *)&str->sb_master_dir);
 	gfs2_inum_out(&sb->sb_root_dir, (char *)&str->sb_root_dir);
 
 	CPOUT_08(sb, str, sb_lockproto, GFS2_LOCKNAME_LEN);
 	CPOUT_08(sb, str, sb_locktable, GFS2_LOCKNAME_LEN);
+	gfs2_inum_out(&sb->__pad2, (char *)&str->__pad2); /* gfs rindex */
+	gfs2_inum_out(&sb->__pad3, (char *)&str->__pad3); /* gfs quota */
+	gfs2_inum_out(&sb->__pad4, (char *)&str->__pad4); /* gfs license */
 #ifdef GFS2_HAS_UUID
 	memcpy(str->sb_uuid, sb->sb_uuid, 16);
 #endif
diff --git a/gfs2/libgfs2/ondisk.c b/gfs2/libgfs2/ondisk.c
index 8a2868b..197c428 100644
--- a/gfs2/libgfs2/ondisk.c
+++ b/gfs2/libgfs2/ondisk.c
@@ -134,15 +134,20 @@ void gfs2_sb_out(struct gfs2_sb *sb, struct gfs2_buffer_head *bh)
 
 	CPOUT_32(sb, str, sb_fs_format);
 	CPOUT_32(sb, str, sb_multihost_format);
+	CPOUT_32(sb, str, __pad0);
 
 	CPOUT_32(sb, str, sb_bsize);
 	CPOUT_32(sb, str, sb_bsize_shift);
+	CPOUT_32(sb, str, __pad1);
 
 	gfs2_inum_out(&sb->sb_master_dir, (char *)&str->sb_master_dir);
 	gfs2_inum_out(&sb->sb_root_dir, (char *)&str->sb_root_dir);
 
 	CPOUT_08(sb, str, sb_lockproto, GFS2_LOCKNAME_LEN);
 	CPOUT_08(sb, str, sb_locktable, GFS2_LOCKNAME_LEN);
+	gfs2_inum_out(&sb->__pad2, (char *)&str->__pad2); /* gfs rindex */
+	gfs2_inum_out(&sb->__pad3, (char *)&str->__pad3); /* gfs quota */
+	gfs2_inum_out(&sb->__pad4, (char *)&str->__pad4); /* gfs license */
 #ifdef GFS2_HAS_UUID
 	CPOUT_08(sb, str, sb_uuid, sizeof(sb->sb_uuid));
 #endif


More information about the cluster-commits mailing list