From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 31478 invoked by alias); 17 Aug 2009 16:14:40 -0000 Received: (qmail 31457 invoked by alias); 17 Aug 2009 16:14:40 -0000 X-SWARE-Spam-Status: No, hits=-1.5 required=5.0 tests=AWL,BAYES_00,SPF_HELO_PASS X-Spam-Status: No, hits=-1.5 required=5.0 tests=AWL,BAYES_00,SPF_HELO_PASS X-Spam-Check-By: sourceware.org X-Spam-Checker-Version: SpamAssassin 3.2.5 (2008-06-10) on bastion2.fedora.phx.redhat.com Subject: cluster: RHEL55 - gfs2_edit produces unaligned access To: cluster-cvs-relay@redhat.com X-Project: Cluster Project X-Git-Module: cluster.git X-Git-Refname: refs/heads/RHEL55 X-Git-Reftype: branch X-Git-Oldrev: e569d4f226eb860d7bda5198a014f249a02ba6af X-Git-Newrev: 93cd1d93eadd44ea67ff4a2e486564c0254a1105 From: Bob Peterson Message-Id: <20090817161410.9D2A712022D@lists.fedorahosted.org> Date: Mon, 17 Aug 2009 16:14:00 -0000 X-Scanned-By: MIMEDefang 2.58 on 172.16.52.254 Mailing-List: contact cluster-cvs-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Post: List-Help: , Sender: cluster-cvs-owner@sourceware.org X-SW-Source: 2009-q3/txt/msg00205.txt.bz2 Gitweb: http://git.fedorahosted.org/git/cluster.git?p=cluster.git;a=commitdiff;h=93cd1d93eadd44ea67ff4a2e486564c0254a1105 Commit: 93cd1d93eadd44ea67ff4a2e486564c0254a1105 Parent: e569d4f226eb860d7bda5198a014f249a02ba6af Author: Bob Peterson AuthorDate: Sat Jul 18 22:44:31 2009 -0500 Committer: Bob Peterson CommitterDate: Mon Aug 17 10:53:48 2009 -0500 gfs2_edit produces unaligned access This patch fixes a problem whereby gfs2_edit would give "unaligned access" errors on some architectures. rhbz#503530 --- gfs2/edit/hexedit.c | 5 ++--- gfs2/edit/savemeta.c | 10 +++++++--- 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/gfs2/edit/hexedit.c b/gfs2/edit/hexedit.c index 38274c2..5937663 100644 --- a/gfs2/edit/hexedit.c +++ b/gfs2/edit/hexedit.c @@ -872,9 +872,8 @@ void rgcount(void) /* ------------------------------------------------------------------------ */ uint64_t find_rgrp_block(struct gfs2_inode *di, int rg) { - char buf[sizeof(struct gfs2_rindex)]; int amt; - struct gfs2_rindex ri; + struct gfs2_rindex buf, ri; uint64_t offset, gfs1_adj = 0; offset = rg * risize(); @@ -889,7 +888,7 @@ uint64_t find_rgrp_block(struct gfs2_inode *di, int rg) amt = gfs2_readi(di, (void *)&buf, offset + gfs1_adj, risize()); if (!amt) /* end of file */ return 0; - gfs2_rindex_in(&ri, buf); + gfs2_rindex_in(&ri, (void *)&buf); return ri.ri_addr; } diff --git a/gfs2/edit/savemeta.c b/gfs2/edit/savemeta.c index dea57cb..4559f6d 100644 --- a/gfs2/edit/savemeta.c +++ b/gfs2/edit/savemeta.c @@ -66,12 +66,13 @@ uint64_t masterblock(const char *fn); */ int get_gfs_struct_info(char *buf, int *block_type, int *struct_len) { - struct gfs2_meta_header mh; + struct gfs2_meta_header mh, mhbuf; *block_type = 0; *struct_len = sbd.bsize; - gfs2_meta_header_in(&mh, buf); + memcpy(&mhbuf, buf, sizeof(mhbuf)); + gfs2_meta_header_in(&mh, (void *)&mhbuf); if (mh.mh_magic != GFS2_MAGIC) return -1; @@ -710,7 +711,10 @@ int restore_data(int fd, int in_fd, int printblocksonly) do_read(in_fd, savedata->buf, savedata->siglen); if (first) { - gfs2_sb_in(&sbd.sd_sb, savedata->buf); + struct gfs2_sb bufsb; + + memcpy(&bufsb, savedata->buf, sizeof(bufsb)); + gfs2_sb_in(&sbd.sd_sb, (void *)&bufsb); sbd1 = (struct gfs_sb *)&sbd.sd_sb; if (sbd1->sb_fs_format == GFS_FORMAT_FS && sbd1->sb_header.mh_type ==