udf: replace loops coded with goto to real loops

Signed-off-by: Marcin Slusarz <marcin.slusarz@gmail.com>
Acked-by: Jan Kara <jack@suse.cz>
Cc: Christoph Hellwig <hch@infradead.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
Marcin Slusarz 2008-02-08 04:20:41 -08:00 committed by Linus Torvalds
parent 742ba02a51
commit 4daa1b8799

View file

@ -183,46 +183,46 @@ static void udf_bitmap_free_blocks(struct super_block *sb,
block = bloc.logicalBlockNum + offset + block = bloc.logicalBlockNum + offset +
(sizeof(struct spaceBitmapDesc) << 3); (sizeof(struct spaceBitmapDesc) << 3);
do_more: do {
overflow = 0; overflow = 0;
block_group = block >> (sb->s_blocksize_bits + 3); block_group = block >> (sb->s_blocksize_bits + 3);
bit = block % (sb->s_blocksize << 3); bit = block % (sb->s_blocksize << 3);
/* /*
* Check to see if we are freeing blocks across a group boundary. * Check to see if we are freeing blocks across a group boundary.
*/ */
if (bit + count > (sb->s_blocksize << 3)) { if (bit + count > (sb->s_blocksize << 3)) {
overflow = bit + count - (sb->s_blocksize << 3); overflow = bit + count - (sb->s_blocksize << 3);
count -= overflow; count -= overflow;
}
bitmap_nr = load_block_bitmap(sb, bitmap, block_group);
if (bitmap_nr < 0)
goto error_return;
bh = bitmap->s_block_bitmap[bitmap_nr];
for (i = 0; i < count; i++) {
if (udf_set_bit(bit + i, bh->b_data)) {
udf_debug("bit %ld already set\n", bit + i);
udf_debug("byte=%2x\n",
((char *)bh->b_data)[(bit + i) >> 3]);
} else {
if (inode)
DQUOT_FREE_BLOCK(inode, 1);
udf_add_free_space(sbi, sbi->s_partition, 1);
} }
} bitmap_nr = load_block_bitmap(sb, bitmap, block_group);
mark_buffer_dirty(bh); if (bitmap_nr < 0)
if (overflow) { goto error_return;
block += count;
count = overflow; bh = bitmap->s_block_bitmap[bitmap_nr];
goto do_more; for (i = 0; i < count; i++) {
} if (udf_set_bit(bit + i, bh->b_data)) {
udf_debug("bit %ld already set\n", bit + i);
udf_debug("byte=%2x\n",
((char *)bh->b_data)[(bit + i) >> 3]);
} else {
if (inode)
DQUOT_FREE_BLOCK(inode, 1);
udf_add_free_space(sbi, sbi->s_partition, 1);
}
}
mark_buffer_dirty(bh);
if (overflow) {
block += count;
count = overflow;
}
} while (overflow);
error_return: error_return:
sb->s_dirt = 1; sb->s_dirt = 1;
if (sbi->s_lvid_bh) if (sbi->s_lvid_bh)
mark_buffer_dirty(sbi->s_lvid_bh); mark_buffer_dirty(sbi->s_lvid_bh);
mutex_unlock(&sbi->s_alloc_mutex); mutex_unlock(&sbi->s_alloc_mutex);
return;
} }
static int udf_bitmap_prealloc_blocks(struct super_block *sb, static int udf_bitmap_prealloc_blocks(struct super_block *sb,
@ -246,37 +246,37 @@ static int udf_bitmap_prealloc_blocks(struct super_block *sb,
if (first_block + block_count > part_len) if (first_block + block_count > part_len)
block_count = part_len - first_block; block_count = part_len - first_block;
repeat: do {
nr_groups = udf_compute_nr_groups(sb, partition); nr_groups = udf_compute_nr_groups(sb, partition);
block = first_block + (sizeof(struct spaceBitmapDesc) << 3); block = first_block + (sizeof(struct spaceBitmapDesc) << 3);
block_group = block >> (sb->s_blocksize_bits + 3); block_group = block >> (sb->s_blocksize_bits + 3);
group_start = block_group ? 0 : sizeof(struct spaceBitmapDesc); group_start = block_group ? 0 : sizeof(struct spaceBitmapDesc);
bitmap_nr = load_block_bitmap(sb, bitmap, block_group); bitmap_nr = load_block_bitmap(sb, bitmap, block_group);
if (bitmap_nr < 0) if (bitmap_nr < 0)
goto out; goto out;
bh = bitmap->s_block_bitmap[bitmap_nr]; bh = bitmap->s_block_bitmap[bitmap_nr];
bit = block % (sb->s_blocksize << 3); bit = block % (sb->s_blocksize << 3);
while (bit < (sb->s_blocksize << 3) && block_count > 0) { while (bit < (sb->s_blocksize << 3) && block_count > 0) {
if (!udf_test_bit(bit, bh->b_data)) { if (!udf_test_bit(bit, bh->b_data))
goto out; goto out;
} else if (DQUOT_PREALLOC_BLOCK(inode, 1)) { else if (DQUOT_PREALLOC_BLOCK(inode, 1))
goto out; goto out;
} else if (!udf_clear_bit(bit, bh->b_data)) { else if (!udf_clear_bit(bit, bh->b_data)) {
udf_debug("bit already cleared for block %d\n", bit); udf_debug("bit already cleared for block %d\n", bit);
DQUOT_FREE_BLOCK(inode, 1); DQUOT_FREE_BLOCK(inode, 1);
goto out; goto out;
}
block_count--;
alloc_count++;
bit++;
block++;
} }
block_count--; mark_buffer_dirty(bh);
alloc_count++; } while (block_count > 0);
bit++;
block++;
}
mark_buffer_dirty(bh);
if (block_count > 0)
goto repeat;
out: out:
if (udf_add_free_space(sbi, partition, -alloc_count)) if (udf_add_free_space(sbi, partition, -alloc_count))
mark_buffer_dirty(sbi->s_lvid_bh); mark_buffer_dirty(sbi->s_lvid_bh);