Commit 7e230f57 authored by Bob Peterson's avatar Bob Peterson Committed by Steven Whitehouse

GFS2: introduce bi_blocks for optimization

This patch introduces a new field in the bitmap structure called
bi_blocks. Its purpose is to save us from constantly multiplying
bi_len by the constant GFS2_NBBY. It also paves the way for more
optimization in a future patch.
Signed-off-by: default avatarBob Peterson <rpeterso@redhat.com>
Signed-off-by: default avatarSteven Whitehouse <swhiteho@redhat.com>
parent 6aa7640f
...@@ -71,6 +71,7 @@ struct gfs2_bitmap { ...@@ -71,6 +71,7 @@ struct gfs2_bitmap {
u32 bi_offset; u32 bi_offset;
u32 bi_start; u32 bi_start;
u32 bi_len; u32 bi_len;
u32 bi_blocks;
}; };
struct gfs2_rgrpd { struct gfs2_rgrpd {
......
...@@ -262,7 +262,7 @@ static int gfs2_rbm_from_block(struct gfs2_rbm *rbm, u64 block) ...@@ -262,7 +262,7 @@ static int gfs2_rbm_from_block(struct gfs2_rbm *rbm, u64 block)
rbm->bi = rbm->rgd->rd_bits; rbm->bi = rbm->rgd->rd_bits;
rbm->offset = (u32)(rblock); rbm->offset = (u32)(rblock);
/* Check if the block is within the first block */ /* Check if the block is within the first block */
if (rbm->offset < rbm->bi->bi_len * GFS2_NBBY) if (rbm->offset < rbm->bi->bi_blocks)
return 0; return 0;
/* Adjust for the size diff between gfs2_meta_header and gfs2_rgrp */ /* Adjust for the size diff between gfs2_meta_header and gfs2_rgrp */
...@@ -743,18 +743,21 @@ static int compute_bitstructs(struct gfs2_rgrpd *rgd) ...@@ -743,18 +743,21 @@ static int compute_bitstructs(struct gfs2_rgrpd *rgd)
bi->bi_offset = sizeof(struct gfs2_rgrp); bi->bi_offset = sizeof(struct gfs2_rgrp);
bi->bi_start = 0; bi->bi_start = 0;
bi->bi_len = bytes; bi->bi_len = bytes;
bi->bi_blocks = bytes * GFS2_NBBY;
/* header block */ /* header block */
} else if (x == 0) { } else if (x == 0) {
bytes = sdp->sd_sb.sb_bsize - sizeof(struct gfs2_rgrp); bytes = sdp->sd_sb.sb_bsize - sizeof(struct gfs2_rgrp);
bi->bi_offset = sizeof(struct gfs2_rgrp); bi->bi_offset = sizeof(struct gfs2_rgrp);
bi->bi_start = 0; bi->bi_start = 0;
bi->bi_len = bytes; bi->bi_len = bytes;
bi->bi_blocks = bytes * GFS2_NBBY;
/* last block */ /* last block */
} else if (x + 1 == length) { } else if (x + 1 == length) {
bytes = bytes_left; bytes = bytes_left;
bi->bi_offset = sizeof(struct gfs2_meta_header); bi->bi_offset = sizeof(struct gfs2_meta_header);
bi->bi_start = rgd->rd_bitbytes - bytes_left; bi->bi_start = rgd->rd_bitbytes - bytes_left;
bi->bi_len = bytes; bi->bi_len = bytes;
bi->bi_blocks = bytes * GFS2_NBBY;
/* other blocks */ /* other blocks */
} else { } else {
bytes = sdp->sd_sb.sb_bsize - bytes = sdp->sd_sb.sb_bsize -
...@@ -762,6 +765,7 @@ static int compute_bitstructs(struct gfs2_rgrpd *rgd) ...@@ -762,6 +765,7 @@ static int compute_bitstructs(struct gfs2_rgrpd *rgd)
bi->bi_offset = sizeof(struct gfs2_meta_header); bi->bi_offset = sizeof(struct gfs2_meta_header);
bi->bi_start = rgd->rd_bitbytes - bytes_left; bi->bi_start = rgd->rd_bitbytes - bytes_left;
bi->bi_len = bytes; bi->bi_len = bytes;
bi->bi_blocks = bytes * GFS2_NBBY;
} }
bytes_left -= bytes; bytes_left -= bytes;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment