From mboxrd@z Thu Jan 1 00:00:00 1970 From: Steven Whitehouse Date: Fri, 13 Jul 2007 08:48:47 +0100 Subject: [Cluster-devel] Re: [PATCH][GFS2] bz #246114: GFS2: soft lockup in rgblk_search In-Reply-To: <1184277530.517.13.camel@technetium.msp.redhat.com> References: <1184277530.517.13.camel@technetium.msp.redhat.com> Message-ID: <1184312927.8765.280.camel@quoit> List-Id: To: cluster-devel.redhat.com MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Hi, Now in the GFS2 -nmw git tree. Thanks, Steve, On Thu, 2007-07-12 at 16:58 -0500, Bob Peterson wrote: > This patch seems to fix the problem described in bugzilla bug 246114. > It was written by Steve Whitehouse with some tweaking by me. > > The code was looping in the relatively new section of code designed to > search for and reuse unlinked inodes. In cases where it was finding an > appropriate inode to reuse, it was looping around and finding the same > block over and over because a "<=" check should have been a "<" when > comparing the goal block to the last unlinked block found. > > Regards, > > Bob Peterson > Red Hat Cluster Suite > > Signed-off-by: Bob Peterson > -- > fs/gfs2/rgrp.c | 9 ++++++--- > 1 files changed, 6 insertions(+), 3 deletions(-) > > diff --git a/fs/gfs2/rgrp.c b/fs/gfs2/rgrp.c > index e4e0406..bb58e69 100644 > --- a/fs/gfs2/rgrp.c > +++ b/fs/gfs2/rgrp.c > @@ -863,16 +863,19 @@ static struct inode *try_rgrp_unlink(struct gfs2_rgrpd *rgd, u64 *last_unlinked) > u64 no_addr; > > for(;;) { > + if (goal >= rgd->rd_data) > + break; > goal = rgblk_search(rgd, goal, GFS2_BLKST_UNLINKED, > GFS2_BLKST_UNLINKED); > if (goal == 0) > - return 0; > + break; > no_addr = goal + rgd->rd_data0; > - if (no_addr <= *last_unlinked) > + goal++; > + if (no_addr < *last_unlinked) > continue; > *last_unlinked = no_addr; > inode = gfs2_inode_lookup(rgd->rd_sbd->sd_vfs, DT_UNKNOWN, > - no_addr, -1); > + no_addr, -1); > if (!IS_ERR(inode)) > return inode; > } > >