cluster: RHEL510 - fsck.gfs2: Fix handling of eattr indirect blocks
Bob Peterson
rpeterso at fedoraproject.org
Fri Apr 5 13:46:41 UTC 2013
Gitweb: http://git.fedorahosted.org/git/?p=cluster.git;a=commitdiff;h=8687b393476d7b250da14e72121fd4f7f6b3737c
Commit: 8687b393476d7b250da14e72121fd4f7f6b3737c
Parent: c77cd8fe7f7cd7b96106fde4ea6a411208f3a6e5
Author: Andrew Price <anprice at redhat.com>
AuthorDate: Fri Mar 23 17:15:37 2012 +0000
Committer: Bob Peterson <rpeterso at redhat.com>
CommitterDate: Fri Apr 5 06:25:01 2013 -0700
fsck.gfs2: Fix handling of eattr indirect blocks
check_indirect_eattr() was using sizeof(struct gfs2_meta_header) as the offset
for indirect eattr blocks. This patch fixes it to use sizeof(struct
gfs_indirect) for gfs1 file systems.
rhbz#877150
---
gfs2/fsck/metawalk.c | 7 +++----
1 files changed, 3 insertions(+), 4 deletions(-)
diff --git a/gfs2/fsck/metawalk.c b/gfs2/fsck/metawalk.c
index 31ceca9..15e1b9f 100644
--- a/gfs2/fsck/metawalk.c
+++ b/gfs2/fsck/metawalk.c
@@ -957,6 +957,7 @@ static int check_indirect_eattr(struct gfs2_inode *ip, uint64_t indirect,
struct gfs2_sbd *sdp = ip->i_sbd;
int first_ea_is_bad = 0;
uint64_t di_eattr_save = ip->i_di.di_eattr;
+ uint64_t offset = ip->i_sbd->gfs1 ? sizeof(struct gfs_indirect) : sizeof(struct gfs2_meta_header);
log_debug( _("Checking EA indirect block #%"PRIu64" (0x%" PRIx64 ").\n"),
indirect, indirect);
@@ -968,10 +969,8 @@ static int check_indirect_eattr(struct gfs2_inode *ip, uint64_t indirect,
if (!error) {
int leaf_pointers = 0, leaf_pointer_errors = 0;
- ea_leaf_ptr = (uint64_t *)(indirect_buf->b_data
- + sizeof(struct gfs2_meta_header));
- end = ea_leaf_ptr + ((sdp->sd_sb.sb_bsize
- - sizeof(struct gfs2_meta_header)) / 8);
+ ea_leaf_ptr = (uint64_t *)(indirect_buf->b_data + offset);
+ end = ea_leaf_ptr + ((sdp->sd_sb.sb_bsize - offset) / 8);
while (*ea_leaf_ptr && (ea_leaf_ptr < end)){
block = be64_to_cpu(*ea_leaf_ptr);
More information about the cluster-commits
mailing list