gfs2-utils: master - libgfs2: Use dinode buffer to map gfs1 dinode blocks

Bob Peterson rpeterso at fedoraproject.org
Tue Aug 30 20:26:29 UTC 2011


Gitweb:        http://git.fedorahosted.org/git/gfs2-utils.git?p=gfs2-utils.git;a=commitdiff;h=d9cb12d1372ef5d62ad09509886ad8fcd29a0dd6
Commit:        d9cb12d1372ef5d62ad09509886ad8fcd29a0dd6
Parent:        178f6cabb4a425d456524df71d345302e88af18f
Author:        Bob Peterson <rpeterso at redhat.com>
AuthorDate:    Wed Aug 10 10:33:49 2011 -0500
Committer:     Bob Peterson <rpeterso at redhat.com>
CommitterDate: Mon Aug 29 12:54:42 2011 -0500

libgfs2: Use dinode buffer to map gfs1 dinode blocks

When function gfs1_block_map found a block for a stuffed file it
wasn't returning the dinode buffer, it was returning the block as a
new buffer.  The problem is, if changes are made to the block, they
will be overwritten by the dinode buffer when that is released.
The result is a fixed block that doesn't get fixed.  This patch
changes the code to return the block properly like gfs2_block_map.

rhbz#675723
---
 gfs2/libgfs2/gfs1.c |    5 ++++-
 1 files changed, 4 insertions(+), 1 deletions(-)

diff --git a/gfs2/libgfs2/gfs1.c b/gfs2/libgfs2/gfs1.c
index d09a8ee..5304b56 100644
--- a/gfs2/libgfs2/gfs1.c
+++ b/gfs2/libgfs2/gfs1.c
@@ -120,7 +120,10 @@ void gfs1_block_map(struct gfs2_inode *ip, uint64_t lblock, int *new,
 			mh.mh_format = GFS2_FORMAT_IN;
 			gfs2_meta_header_out(&mh, bh);
 		} else {
-			bh = bread(sdp, *dblock);
+			if (*dblock == ip->i_di.di_num.no_addr)
+				bh = ip->i_bh;
+			else
+				bh = bread(sdp, *dblock);
 		}
 	}
 


More information about the cluster-commits mailing list