aboutsummaryrefslogtreecommitdiffstats
path: root/fs/ext3/balloc.c
diff options
context:
space:
mode:
authorGlauber de Oliveira Costa <glommer@br.ibm.com>2005-10-30 18:02:48 -0500
committerLinus Torvalds <torvalds@g5.osdl.org>2005-10-30 20:37:23 -0500
commit5b11687924e40790deb0d5f959247ade82196665 (patch)
tree29aa104cc40bd2c85e7bba0f4b404b04cd6f207a /fs/ext3/balloc.c
parent2384f55f8aa520172c995965bd2f8a9740d53095 (diff)
[PATCH] Locking problems while EXT3FS_DEBUG on
I noticed some problems while running ext3 with the debug flag set on. More precisely, I was unable to umount the filesystem. Some investigation took me to the patch that follows. At a first glance , the lock/unlock I've taken out seems really not necessary, as the main code (outside debug) does not lock the super. The only additional danger operations that debug code introduces seems to be related to bitmap, but bitmap operations tends to be all atomic anyway. I also took the opportunity to fix 2 spelling errors. Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Diffstat (limited to 'fs/ext3/balloc.c')
-rw-r--r--fs/ext3/balloc.c5
1 files changed, 2 insertions, 3 deletions
diff --git a/fs/ext3/balloc.c b/fs/ext3/balloc.c
index 0213db4911a2..032c7ba1b13f 100644
--- a/fs/ext3/balloc.c
+++ b/fs/ext3/balloc.c
@@ -1010,7 +1010,7 @@ retry:
1010 * allocation within the reservation window. 1010 * allocation within the reservation window.
1011 * 1011 *
1012 * This will avoid keeping on searching the reservation list again and 1012 * This will avoid keeping on searching the reservation list again and
1013 * again when someboday is looking for a free block (without 1013 * again when somebody is looking for a free block (without
1014 * reservation), and there are lots of free blocks, but they are all 1014 * reservation), and there are lots of free blocks, but they are all
1015 * being reserved. 1015 * being reserved.
1016 * 1016 *
@@ -1416,12 +1416,12 @@ unsigned long ext3_count_free_blocks(struct super_block *sb)
1416 unsigned long bitmap_count, x; 1416 unsigned long bitmap_count, x;
1417 struct buffer_head *bitmap_bh = NULL; 1417 struct buffer_head *bitmap_bh = NULL;
1418 1418
1419 lock_super(sb);
1420 es = EXT3_SB(sb)->s_es; 1419 es = EXT3_SB(sb)->s_es;
1421 desc_count = 0; 1420 desc_count = 0;
1422 bitmap_count = 0; 1421 bitmap_count = 0;
1423 gdp = NULL; 1422 gdp = NULL;
1424 1423
1424 smp_rmb();
1425 for (i = 0; i < ngroups; i++) { 1425 for (i = 0; i < ngroups; i++) {
1426 gdp = ext3_get_group_desc(sb, i, NULL); 1426 gdp = ext3_get_group_desc(sb, i, NULL);
1427 if (!gdp) 1427 if (!gdp)
@@ -1440,7 +1440,6 @@ unsigned long ext3_count_free_blocks(struct super_block *sb)
1440 brelse(bitmap_bh); 1440 brelse(bitmap_bh);
1441 printk("ext3_count_free_blocks: stored = %u, computed = %lu, %lu\n", 1441 printk("ext3_count_free_blocks: stored = %u, computed = %lu, %lu\n",
1442 le32_to_cpu(es->s_free_blocks_count), desc_count, bitmap_count); 1442 le32_to_cpu(es->s_free_blocks_count), desc_count, bitmap_count);
1443 unlock_super(sb);
1444 return bitmap_count; 1443 return bitmap_count;
1445#else 1444#else
1446 desc_count = 0; 1445 desc_count = 0;