[PATCH 3/4] GFS2: Use gfs2_rbm_incr in rgblk_free

2014-10-08 Thread Steven Whitehouse
From: Bob Peterson 

This patch speeds up GFS2 unlink operations by using function
gfs2_rbm_incr rather than continuously calculating the rbm.

Signed-off-by: Bob Peterson 
Signed-off-by: Steven Whitehouse 

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(, bstart);
while (blen--) {
-   gfs2_rbm_from_block(, bstart);
bi = rbm_bi();
-   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(, false, new_state);
+   gfs2_rbm_incr();
}
 
return rbm.rgd;
-- 
1.8.3.1

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


[PATCH 3/4] GFS2: Use gfs2_rbm_incr in rgblk_free

2014-10-08 Thread Steven Whitehouse
From: Bob Peterson rpete...@redhat.com

This patch speeds up GFS2 unlink operations by using function
gfs2_rbm_incr rather than continuously calculating the rbm.

Signed-off-by: Bob Peterson rpete...@redhat.com
Signed-off-by: Steven Whitehouse swhit...@redhat.com

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;
-- 
1.8.3.1

--
To unsubscribe from this list: send the line unsubscribe linux-kernel in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/