GFS2: Use gfs2_rbm_incr in rgblk_free
A message that is not in the archive (sent off-list or not yet received): [email protected]
PATCH 1/1 GFS2: Use gfs2_rbm_incr in rgblk_free
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 <[email protected]>
---
fs/gfs2/rgrp.c +13 -9
@@ -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;
PATCH 1/1 GFS2: Use gfs2_rbm_incr in rgblk_free
Hi,
Looks like a really nice optimisation. Now in the -nmw tree. Thanks,
Steve.
Quoted 56 lines · Bob Peterson
Hi,
This patch speeds up GFS2 unlink operations by using function
gfs2_rbm_incrrather than continuously calculating the rbm.Regards,
Bob Peterson
Red Hat File SystemsSigned-off-by Bob Peterson <[email protected]>---
fs/gfs2/rgrp.c +13
-9@@ -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;