Gitweb: http://git.fedorahosted.org/git/?p=cluster.git;a=commitdiff;h=8687b393476d7b... Commit: 8687b393476d7b250da14e72121fd4f7f6b3737c Parent: c77cd8fe7f7cd7b96106fde4ea6a411208f3a6e5 Author: Andrew Price anprice@redhat.com AuthorDate: Fri Mar 23 17:15:37 2012 +0000 Committer: Bob Peterson rpeterso@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);