From mboxrd@z Thu Jan 1 00:00:00 1970 From: Steven Whitehouse Date: Mon, 05 Mar 2012 16:25:13 +0000 Subject: [Cluster-devel] [GFS2 PATCH] GFS2: make sure rgrps are up to date in func gfs2_blk2rgrpd In-Reply-To: References: Message-ID: <1330964713.2699.68.camel@menhir> 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 -nmw git tree. Thanks, Steve. On Mon, 2012-03-05 at 10:19 -0500, Bob Peterson wrote: > Hi, > > This patch adds a call to gfs2_rindex_update from function gfs2_blk2rgrpd > and removes calls to it that are made redundant by it. The problem is > that a gfs2_grow can add rgrps to the rindex, then put those rgrps into > use, thus rendering the rindex we read in at mount time incomplete. > > Regards, > > Bob Peterson > Red Hat File Systems > > Signed-off-by: Bob Peterson > -- > GFS2: make sure rgrps are up to date in func gfs2_blk2rgrpd > > This patch adds a call to gfs2_rindex_update from function gfs2_blk2rgrpd > and removes calls to it that are made redundant by it. The problem is > that a gfs2_grow can add rgrps to the rindex, then put those rgrps into > use, thus rendering the rindex we read in at mount time incomplete. > -- > diff --git a/fs/gfs2/rgrp.c b/fs/gfs2/rgrp.c > index 6ff9f17..19bde40 100644 > --- a/fs/gfs2/rgrp.c > +++ b/fs/gfs2/rgrp.c > @@ -332,6 +332,9 @@ struct gfs2_rgrpd *gfs2_blk2rgrpd(struct gfs2_sbd *sdp, u64 blk, bool exact) > struct rb_node *n, *next; > struct gfs2_rgrpd *cur; > > + if (gfs2_rindex_update(sdp)) > + return NULL; > + > spin_lock(&sdp->sd_rindex_spin); > n = sdp->sd_rindex_tree.rb_node; > while (n) { > @@ -917,10 +920,6 @@ int gfs2_fitrim(struct file *filp, void __user *argp) > if (!blk_queue_discard(q)) > return -EOPNOTSUPP; > > - ret = gfs2_rindex_update(sdp); > - if (ret) > - return ret; > - > if (argp == NULL) { > r.start = 0; > r.len = ULLONG_MAX; > @@ -1671,13 +1670,8 @@ int gfs2_check_blk_type(struct gfs2_sbd *sdp, u64 no_addr, unsigned int type) > { > struct gfs2_rgrpd *rgd; > struct gfs2_holder rgd_gh; > - int error; > - > - error = gfs2_rindex_update(sdp); > - if (error) > - return error; > + int error = -EINVAL; > > - error = -EINVAL; > rgd = gfs2_blk2rgrpd(sdp, no_addr, 1); > if (!rgd) > goto fail; >