From mboxrd@z Thu Jan 1 00:00:00 1970 From: Steven Whitehouse Date: Tue, 24 Jun 2008 11:34:28 +0100 Subject: [Cluster-devel] [GFS2 Patch] bz 450641 - fix gfs2 block allocation In-Reply-To: <20080617220605.GA18264@ether.msp.redhat.com> References: <20080617220605.GA18264@ether.msp.redhat.com> Message-ID: <1214303668.4266.0.camel@localhost.localdomain> List-Id: To: cluster-devel.redhat.com MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Hi, On Tue, 2008-06-17 at 17:06 -0500, Benjamin Marzinski wrote: > This patch fixes bz 450641. > > This patch changes the computation for zero_metapath_length(). When you > are > extending the metadata tree, The indirect blocks that point to the new > data > block must either diverge from the existing tree either at the inode, or > at the > first indirect block. They can diverge at the first indirect block > because the > inode has room for 483 pointers while the indirect blocks have room for > 509 > pointers, so when the tree is grown, there is some free space in the > first > indirect block. What zero_metapath_length now computes is the height > where the > first indirect block for the new data block is located. It can either > be 1 (if > the indirect block diverges from the inode) or 2 (if it diverges from > the first > indirect block). > > The previous computation for this was incorrect. > > -Ben > > Signed-off-by: Benjamin Marzinski > --- > bmap.c | 9 +++------ > 1 file changed, 3 insertions(+), 6 deletions(-) > > plain text document attachment (gfs2_alloc.patch) > Index: gfs2-2.6-nmw/fs/gfs2/bmap.c > =================================================================== > --- gfs2-2.6-nmw.orig/fs/gfs2/bmap.c > +++ gfs2-2.6-nmw/fs/gfs2/bmap.c > @@ -249,12 +249,9 @@ static void find_metapath(const struct g > static inline unsigned int zero_metapath_length(const struct metapath *mp, > unsigned height) > { > - unsigned int i; > - for (i = 0; i < height - 1; i++) { > - if (mp->mp_list[i] != 0) > - return i; > - } > - return height; > + if (mp->mp_list[0] == 0) > + return 2; > + return 1; > } > > /** The patch looks good, but could you also remove the "height" argument to the function since that it no longer required, Steve.