mirror of
https://github.com/torvalds/linux.git
synced 2024-09-22 07:53:05 +00:00
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: Bob Peterson <rpeterso@redhat.com> Signed-off-by: Steven Whitehouse <swhiteho@redhat.com>
This commit is contained in:
parent
6aa7640f30
commit
7e230f5774
|
@ -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)
|
||||||
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)
|
||||||
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)
|
||||||
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;
|
||||||
|
|
Loading…
Reference in New Issue
Block a user