From mboxrd@z Thu Jan 1 00:00:00 1970 From: Steven Whitehouse Date: Fri, 03 Oct 2014 15:23:49 +0100 Subject: [Cluster-devel] [GFS2 PATCH] GFS2: Use gfs2_rbm_incr in rgblk_free In-Reply-To: <300399460.2904248.1412339886302.JavaMail.zimbra@redhat.com> References: <300399460.2904248.1412339886302.JavaMail.zimbra@redhat.com> Message-ID: <542EB175.9080102@redhat.com> List-Id: To: cluster-devel.redhat.com MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Hi, Looks like a really nice optimisation. Now in the -nmw tree. Thanks, Steve. On 03/10/14 13:38, Bob Peterson wrote: > Hi, > > This patch speeds up GFS2 unlink operations by using function > gfs2_rbm_incr rather than continuously calculating the rbm. > > Regards, > > Bob Peterson > Red Hat File Systems > > Signed-off-by: Bob Peterson > --- > diff --git a/fs/gfs2/rgrp.c b/fs/gfs2/rgrp.c > index 55ef72d..7474c41 100644 > --- a/fs/gfs2/rgrp.c > +++ b/fs/gfs2/rgrp.c > @@ -2097,7 +2097,7 @@ static struct gfs2_rgrpd *rgblk_free(struct gfs2_sbd *sdp, u64 bstart, > u32 blen, unsigned char new_state) > { > struct gfs2_rbm rbm; > - struct gfs2_bitmap *bi; > + struct gfs2_bitmap *bi, *bi_prev = NULL; > > rbm.rgd = gfs2_blk2rgrpd(sdp, bstart, 1); > if (!rbm.rgd) { > @@ -2106,18 +2106,22 @@ static struct gfs2_rgrpd *rgblk_free(struct gfs2_sbd *sdp, u64 bstart, > return NULL; > } > > + gfs2_rbm_from_block(&rbm, bstart); > while (blen--) { > - gfs2_rbm_from_block(&rbm, bstart); > bi = rbm_bi(&rbm); > - bstart++; > - if (!bi->bi_clone) { > - bi->bi_clone = kmalloc(bi->bi_bh->b_size, > - GFP_NOFS | __GFP_NOFAIL); > - memcpy(bi->bi_clone + bi->bi_offset, > - bi->bi_bh->b_data + bi->bi_offset, bi->bi_len); > + if (bi != bi_prev) { > + if (!bi->bi_clone) { > + bi->bi_clone = kmalloc(bi->bi_bh->b_size, > + GFP_NOFS | __GFP_NOFAIL); > + memcpy(bi->bi_clone + bi->bi_offset, > + bi->bi_bh->b_data + bi->bi_offset, > + bi->bi_len); > + } > + gfs2_trans_add_meta(rbm.rgd->rd_gl, bi->bi_bh); > + bi_prev = bi; > } > - gfs2_trans_add_meta(rbm.rgd->rd_gl, bi->bi_bh); > gfs2_setbit(&rbm, false, new_state); > + gfs2_rbm_incr(&rbm); > } > > return rbm.rgd;