diff options
author | Linus Torvalds <torvalds@woody.linux-foundation.org> | 2007-11-13 11:07:31 -0500 |
---|---|---|
committer | Linus Torvalds <torvalds@woody.linux-foundation.org> | 2007-11-13 11:09:11 -0500 |
commit | 0b832a4b93932103d73c0c3f35ef1153e288327b (patch) | |
tree | 77ca1ff445287685dbebf448fdf172d3f951ed89 /fs/ext4/balloc.c | |
parent | 325d22df7b19e0116aff3391d3a03f73d0634ded (diff) |
Revert "ext2/ext3/ext4: add block bitmap validation"
This reverts commit 7c9e69faa28027913ee059c285a5ea8382e24b5d, fixing up
conflicts in fs/ext4/balloc.c manually.
The cost of doing the bitmap validation on each lookup - even when the
bitmap is cached - is absolutely prohibitive. We could, and probably
should, do it only when adding the bitmap to the buffer cache. However,
right now we are better off just reverting it.
Peter Zijlstra measured the cost of this extra validation as a 85%
decrease in cached iozone, and while I had a patch that took it down to
just 17% by not being _quite_ so stupid in the validation, it was still
a big slowdown that could have been avoided by just doing it right.
Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
Cc: Andrew Morton <akpm@linux-foundation.org>
Cc: Aneesh Kumar <aneesh.kumar@linux.vnet.ibm.com>
Cc: Andreas Dilger <adilger@clusterfs.com>
Cc: Mingming Cao <cmm@us.ibm.com>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'fs/ext4/balloc.c')
-rw-r--r-- | fs/ext4/balloc.c | 41 |
1 files changed, 0 insertions, 41 deletions
diff --git a/fs/ext4/balloc.c b/fs/ext4/balloc.c index e906b65448e2..71ee95e534fd 100644 --- a/fs/ext4/balloc.c +++ b/fs/ext4/balloc.c | |||
@@ -189,15 +189,6 @@ struct ext4_group_desc * ext4_get_group_desc(struct super_block * sb, | |||
189 | return desc; | 189 | return desc; |
190 | } | 190 | } |
191 | 191 | ||
192 | static inline int | ||
193 | block_in_use(ext4_fsblk_t block, struct super_block *sb, unsigned char *map) | ||
194 | { | ||
195 | ext4_grpblk_t offset; | ||
196 | |||
197 | ext4_get_group_no_and_offset(sb, block, NULL, &offset); | ||
198 | return ext4_test_bit (offset, map); | ||
199 | } | ||
200 | |||
201 | /** | 192 | /** |
202 | * read_block_bitmap() | 193 | * read_block_bitmap() |
203 | * @sb: super block | 194 | * @sb: super block |
@@ -211,7 +202,6 @@ block_in_use(ext4_fsblk_t block, struct super_block *sb, unsigned char *map) | |||
211 | struct buffer_head * | 202 | struct buffer_head * |
212 | read_block_bitmap(struct super_block *sb, unsigned int block_group) | 203 | read_block_bitmap(struct super_block *sb, unsigned int block_group) |
213 | { | 204 | { |
214 | int i; | ||
215 | struct ext4_group_desc * desc; | 205 | struct ext4_group_desc * desc; |
216 | struct buffer_head * bh = NULL; | 206 | struct buffer_head * bh = NULL; |
217 | ext4_fsblk_t bitmap_blk; | 207 | ext4_fsblk_t bitmap_blk; |
@@ -239,38 +229,7 @@ read_block_bitmap(struct super_block *sb, unsigned int block_group) | |||
239 | "Cannot read block bitmap - " | 229 | "Cannot read block bitmap - " |
240 | "block_group = %d, block_bitmap = %llu", | 230 | "block_group = %d, block_bitmap = %llu", |
241 | block_group, bitmap_blk); | 231 | block_group, bitmap_blk); |
242 | |||
243 | /* check whether block bitmap block number is set */ | ||
244 | if (!block_in_use(bitmap_blk, sb, bh->b_data)) { | ||
245 | /* bad block bitmap */ | ||
246 | goto error_out; | ||
247 | } | ||
248 | |||
249 | /* check whether the inode bitmap block number is set */ | ||
250 | bitmap_blk = ext4_inode_bitmap(sb, desc); | ||
251 | if (!block_in_use(bitmap_blk, sb, bh->b_data)) { | ||
252 | /* bad block bitmap */ | ||
253 | goto error_out; | ||
254 | } | ||
255 | /* check whether the inode table block number is set */ | ||
256 | bitmap_blk = ext4_inode_table(sb, desc); | ||
257 | for (i = 0; i < EXT4_SB(sb)->s_itb_per_group; i++, bitmap_blk++) { | ||
258 | if (!block_in_use(bitmap_blk, sb, bh->b_data)) { | ||
259 | /* bad block bitmap */ | ||
260 | goto error_out; | ||
261 | } | ||
262 | } | ||
263 | |||
264 | return bh; | 232 | return bh; |
265 | |||
266 | error_out: | ||
267 | brelse(bh); | ||
268 | ext4_error(sb, __FUNCTION__, | ||
269 | "Invalid block bitmap - " | ||
270 | "block_group = %d, block = %llu", | ||
271 | block_group, bitmap_blk); | ||
272 | return NULL; | ||
273 | |||
274 | } | 233 | } |
275 | /* | 234 | /* |
276 | * The reservation window structure operations | 235 | * The reservation window structure operations |