* [Cluster-devel] [PATCH][GFS2] bz #246114: GFS2: soft lockup in rgblk_search
@ 2007-07-12 21:58 Bob Peterson
2007-07-13 7:48 ` [Cluster-devel] " Steven Whitehouse
0 siblings, 1 reply; 2+ messages in thread
From: Bob Peterson @ 2007-07-12 21:58 UTC (permalink / raw)
To: cluster-devel.redhat.com
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 <rpeterso@redhat.com>
--
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;
}
^ permalink raw reply related [flat|nested] 2+ messages in thread* [Cluster-devel] Re: [PATCH][GFS2] bz #246114: GFS2: soft lockup in rgblk_search
2007-07-12 21:58 [Cluster-devel] [PATCH][GFS2] bz #246114: GFS2: soft lockup in rgblk_search Bob Peterson
@ 2007-07-13 7:48 ` Steven Whitehouse
0 siblings, 0 replies; 2+ messages in thread
From: Steven Whitehouse @ 2007-07-13 7:48 UTC (permalink / raw)
To: cluster-devel.redhat.com
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 <rpeterso@redhat.com>
> --
> 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;
> }
>
>
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2007-07-13 7:48 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2007-07-12 21:58 [Cluster-devel] [PATCH][GFS2] bz #246114: GFS2: soft lockup in rgblk_search Bob Peterson
2007-07-13 7:48 ` [Cluster-devel] " Steven Whitehouse
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).