From mboxrd@z Thu Jan 1 00:00:00 1970 From: Bob Peterson Date: Tue, 13 Nov 2012 10:41:34 -0500 (EST) Subject: [Cluster-devel] GFS2: Fix one RG corner case In-Reply-To: <1352819973.2727.18.camel@menhir> Message-ID: <1341787120.38256162.1352821294753.JavaMail.root@redhat.com> List-Id: To: cluster-devel.redhat.com MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit ----- Original Message ----- | >From aa8920c96897dd82f0520f9e7db7311b42547ce6 Mon Sep 17 00:00:00 | >2001 | From: Steven Whitehouse | Date: Tue, 13 Nov 2012 14:50:35 +0000 | Subject: GFS2: Fix one RG corner case | | For filesystems with only a single resource group, we need to be | careful | that the allocation loop will not land up with a NULL resource group. | This | fixes a bug in a previous patch where the gfs2_rgrpd_get_next() | function | was being used instead of gfs2_rgrpd_get_first() | | Signed-off-by: Steven Whitehouse | | diff --git a/fs/gfs2/rgrp.c b/fs/gfs2/rgrp.c | index 99a6197..5625e93 100644 | --- a/fs/gfs2/rgrp.c | +++ b/fs/gfs2/rgrp.c | @@ -1776,10 +1776,11 @@ static u32 gfs2_orlov_skip(const struct | gfs2_inode *ip) | static bool gfs2_select_rgrp(struct gfs2_rgrpd **pos, const struct | gfs2_rgrpd *begin) | { | struct gfs2_rgrpd *rgd = *pos; | + struct gfs2_sbd *sdp = rgd->rd_sbd; | | rgd = gfs2_rgrpd_get_next(rgd); | if (rgd == NULL) | - rgd = gfs2_rgrpd_get_next(NULL); | + rgd = gfs2_rgrpd_get_first(sdp); | *pos = rgd; | if (rgd != begin) /* If we didn't wrap */ | return true; | -- | 1.7.4 Hi, If we do this, can't we get into an infinite loop if the one and only rgrp is full? In that case, rgrp will be == begin, so it won't return true, so the caller won't ever realize it's wrapped. Regards, Bob Peterson Red Hat File Systems