From mboxrd@z Thu Jan 1 00:00:00 1970 From: rpeterso@redhat.com Date: Fri, 20 Jan 2012 09:10:15 -0600 Subject: [Cluster-devel] [PATCH 34/66] libgfs2: Use dinode buffer to map gfs1 dinode blocks In-Reply-To: <1327072247-26275-1-git-send-email-rpeterso@redhat.com> References: <1327072247-26275-1-git-send-email-rpeterso@redhat.com> Message-ID: <1327072247-26275-35-git-send-email-rpeterso@redhat.com> List-Id: To: cluster-devel.redhat.com MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit From: Bob Peterson 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 59eaa8d..2ace124 100644 --- a/gfs2/libgfs2/gfs1.c +++ b/gfs2/libgfs2/gfs1.c @@ -118,7 +118,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); } } -- 1.7.7.5