git://ftp.safe.ca
/
safe
/
jmp
/
linux-2.6
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
tunnels: fix netns vs proto registration ordering
[safe/jmp/linux-2.6]
/
fs
/
ext3
/
balloc.c
diff --git
a/fs/ext3/balloc.c
b/fs/ext3/balloc.c
index
d2dface
..
27967f9
100644
(file)
--- a/
fs/ext3/balloc.c
+++ b/
fs/ext3/balloc.c
@@
-117,7
+117,7
@@
static int ext3_valid_block_bitmap(struct super_block *sb,
return 1;
err_out:
return 1;
err_out:
- ext3_error(sb, __
FUNCTION
__,
+ ext3_error(sb, __
func
__,
"Invalid block bitmap - "
"block_group = %d, block = %lu",
block_group, bitmap_blk);
"Invalid block bitmap - "
"block_group = %d, block = %lu",
block_group, bitmap_blk);
@@
-147,7
+147,7
@@
read_block_bitmap(struct super_block *sb, unsigned int block_group)
bitmap_blk = le32_to_cpu(desc->bg_block_bitmap);
bh = sb_getblk(sb, bitmap_blk);
if (unlikely(!bh)) {
bitmap_blk = le32_to_cpu(desc->bg_block_bitmap);
bh = sb_getblk(sb, bitmap_blk);
if (unlikely(!bh)) {
- ext3_error(sb, __
FUNCTION
__,
+ ext3_error(sb, __
func
__,
"Cannot read block bitmap - "
"block_group = %d, block_bitmap = %u",
block_group, le32_to_cpu(desc->bg_block_bitmap));
"Cannot read block bitmap - "
"block_group = %d, block_bitmap = %u",
block_group, le32_to_cpu(desc->bg_block_bitmap));
@@
-158,16
+158,17
@@
read_block_bitmap(struct super_block *sb, unsigned int block_group)
if (bh_submit_read(bh) < 0) {
brelse(bh);
if (bh_submit_read(bh) < 0) {
brelse(bh);
- ext3_error(sb, __
FUNCTION
__,
+ ext3_error(sb, __
func
__,
"Cannot read block bitmap - "
"block_group = %d, block_bitmap = %u",
block_group, le32_to_cpu(desc->bg_block_bitmap));
return NULL;
}
"Cannot read block bitmap - "
"block_group = %d, block_bitmap = %u",
block_group, le32_to_cpu(desc->bg_block_bitmap));
return NULL;
}
- if (!ext3_valid_block_bitmap(sb, desc, block_group, bh)) {
- brelse(bh);
- return NULL;
- }
+ ext3_valid_block_bitmap(sb, desc, block_group, bh);
+ /*
+ * file system mounted not to panic on error, continue with corrupt
+ * bitmap
+ */
return bh;
}
/*
return bh;
}
/*
@@
-232,11
+233,10
@@
restart:
prev = rsv;
}
printk("Window map complete.\n");
prev = rsv;
}
printk("Window map complete.\n");
- if (bad)
- BUG();
+ BUG_ON(bad);
}
#define rsv_window_dump(root, verbose) \
}
#define rsv_window_dump(root, verbose) \
- __rsv_window_dump((root), (verbose), __
FUNCTION
__)
+ __rsv_window_dump((root), (verbose), __
func
__)
#else
#define rsv_window_dump(root, verbose) do {} while (0)
#endif
#else
#define rsv_window_dump(root, verbose) do {} while (0)
#endif
@@
-618,7
+618,7
@@
do_more:
if (!ext3_clear_bit_atomic(sb_bgl_lock(sbi, block_group),
bit + i, bitmap_bh->b_data)) {
jbd_unlock_bh_state(bitmap_bh);
if (!ext3_clear_bit_atomic(sb_bgl_lock(sbi, block_group),
bit + i, bitmap_bh->b_data)) {
jbd_unlock_bh_state(bitmap_bh);
- ext3_error(sb, __
FUNCTION
__,
+ ext3_error(sb, __
func
__,
"bit already cleared for block "E3FSBLK,
block + i);
jbd_lock_bh_state(bitmap_bh);
"bit already cleared for block "E3FSBLK,
block + i);
jbd_lock_bh_state(bitmap_bh);
@@
-630,9
+630,7
@@
do_more:
jbd_unlock_bh_state(bitmap_bh);
spin_lock(sb_bgl_lock(sbi, block_group));
jbd_unlock_bh_state(bitmap_bh);
spin_lock(sb_bgl_lock(sbi, block_group));
- desc->bg_free_blocks_count =
- cpu_to_le16(le16_to_cpu(desc->bg_free_blocks_count) +
- group_freed);
+ le16_add_cpu(&desc->bg_free_blocks_count, group_freed);
spin_unlock(sb_bgl_lock(sbi, block_group));
percpu_counter_add(&sbi->s_freeblocks_counter, count);
spin_unlock(sb_bgl_lock(sbi, block_group));
percpu_counter_add(&sbi->s_freeblocks_counter, count);
@@
-651,7
+649,7
@@
do_more:
count = overflow;
goto do_more;
}
count = overflow;
goto do_more;
}
- sb->s_dirt = 1;
+
error_return:
brelse(bitmap_bh);
ext3_std_error(sb, err);
error_return:
brelse(bitmap_bh);
ext3_std_error(sb, err);
@@
-678,7
+676,7
@@
void ext3_free_blocks(handle_t *handle, struct inode *inode,
}
ext3_free_blocks_sb(handle, sb, block, count, &dquot_freed_blocks);
if (dquot_freed_blocks)
}
ext3_free_blocks_sb(handle, sb, block, count, &dquot_freed_blocks);
if (dquot_freed_blocks)
-
DQUOT_FREE_BLOCK
(inode, dquot_freed_blocks);
+
vfs_dq_free_block
(inode, dquot_freed_blocks);
return;
}
return;
}
@@
-1424,7
+1422,7
@@
static int ext3_has_free_blocks(struct ext3_sb_info *sbi)
free_blocks = percpu_counter_read_positive(&sbi->s_freeblocks_counter);
root_blocks = le32_to_cpu(sbi->s_es->s_r_blocks_count);
if (free_blocks < root_blocks + 1 && !capable(CAP_SYS_RESOURCE) &&
free_blocks = percpu_counter_read_positive(&sbi->s_freeblocks_counter);
root_blocks = le32_to_cpu(sbi->s_es->s_r_blocks_count);
if (free_blocks < root_blocks + 1 && !capable(CAP_SYS_RESOURCE) &&
- sbi->s_resuid != current
->fsuid
&&
+ sbi->s_resuid != current
_fsuid()
&&
(sbi->s_resgid == 0 || !in_group_p (sbi->s_resgid))) {
return 0;
}
(sbi->s_resgid == 0 || !in_group_p (sbi->s_resgid))) {
return 0;
}
@@
-1504,7
+1502,7
@@
ext3_fsblk_t ext3_new_blocks(handle_t *handle, struct inode *inode,
/*
* Check quota for allocation of this block.
*/
/*
* Check quota for allocation of this block.
*/
- if (
DQUOT_ALLOC_BLOCK
(inode, num)) {
+ if (
vfs_dq_alloc_block
(inode, num)) {
*errp = -EDQUOT;
return 0;
}
*errp = -EDQUOT;
return 0;
}
@@
-1549,6
+1547,7
@@
retry_alloc:
* turn off reservation for this allocation
*/
if (my_rsv && (free_blocks < windowsz)
* turn off reservation for this allocation
*/
if (my_rsv && (free_blocks < windowsz)
+ && (free_blocks > 0)
&& (rsv_is_empty(&my_rsv->rsv_window)))
my_rsv = NULL;
&& (rsv_is_empty(&my_rsv->rsv_window)))
my_rsv = NULL;
@@
-1572,7
+1571,7
@@
retry_alloc:
/*
* Now search the rest of the groups. We assume that
/*
* Now search the rest of the groups. We assume that
- *
i
and gdp correctly point to the last group visited.
+ *
group_no
and gdp correctly point to the last group visited.
*/
for (bgi = 0; bgi < ngroups; bgi++) {
group_no++;
*/
for (bgi = 0; bgi < ngroups; bgi++) {
group_no++;
@@
-1587,7
+1586,7
@@
retry_alloc:
* free blocks is less than half of the reservation
* window size.
*/
* free blocks is less than half of the reservation
* window size.
*/
- if (
free_blocks <= (windowsz/2
))
+ if (
my_rsv && (free_blocks <= (windowsz/2)
))
continue;
brelse(bitmap_bh);
continue;
brelse(bitmap_bh);
@@
-1644,7
+1643,11
@@
allocated:
"Allocating block in system zone - "
"blocks from "E3FSBLK", length %lu",
ret_block, num);
"Allocating block in system zone - "
"blocks from "E3FSBLK", length %lu",
ret_block, num);
- goto out;
+ /*
+ * claim_block() marked the blocks we allocated as in use. So we
+ * may want to selectively mark some of the blocks as free.
+ */
+ goto retry_alloc;
}
performed_allocation = 1;
}
performed_allocation = 1;
@@
-1670,7
+1673,7
@@
allocated:
if (ext3_test_bit(grp_alloc_blk+i,
bh2jh(bitmap_bh)->b_committed_data)) {
printk("%s: block was unexpectedly set in "
if (ext3_test_bit(grp_alloc_blk+i,
bh2jh(bitmap_bh)->b_committed_data)) {
printk("%s: block was unexpectedly set in "
- "b_committed_data\n", __
FUNCTION
__);
+ "b_committed_data\n", __
func
__);
}
}
}
}
}
}
@@
-1696,8
+1699,7
@@
allocated:
ret_block, goal_hits, goal_attempts);
spin_lock(sb_bgl_lock(sbi, group_no));
ret_block, goal_hits, goal_attempts);
spin_lock(sb_bgl_lock(sbi, group_no));
- gdp->bg_free_blocks_count =
- cpu_to_le16(le16_to_cpu(gdp->bg_free_blocks_count)-num);
+ le16_add_cpu(&gdp->bg_free_blocks_count, -num);
spin_unlock(sb_bgl_lock(sbi, group_no));
percpu_counter_sub(&sbi->s_freeblocks_counter, num);
spin_unlock(sb_bgl_lock(sbi, group_no));
percpu_counter_sub(&sbi->s_freeblocks_counter, num);
@@
-1706,13
+1708,12
@@
allocated:
if (!fatal)
fatal = err;
if (!fatal)
fatal = err;
- sb->s_dirt = 1;
if (fatal)
goto out;
*errp = 0;
brelse(bitmap_bh);
if (fatal)
goto out;
*errp = 0;
brelse(bitmap_bh);
-
DQUOT_FREE_BLOCK
(inode, *count-num);
+
vfs_dq_free_block
(inode, *count-num);
*count = num;
return ret_block;
*count = num;
return ret_block;
@@
-1727,7
+1728,7
@@
out:
* Undo the block allocation
*/
if (!performed_allocation)
* Undo the block allocation
*/
if (!performed_allocation)
-
DQUOT_FREE_BLOCK
(inode, *count);
+
vfs_dq_free_block
(inode, *count);
brelse(bitmap_bh);
return 0;
}
brelse(bitmap_bh);
return 0;
}
@@
-1848,11
+1849,7
@@
static unsigned long ext3_bg_num_gdb_meta(struct super_block *sb, int group)
static unsigned long ext3_bg_num_gdb_nometa(struct super_block *sb, int group)
{
static unsigned long ext3_bg_num_gdb_nometa(struct super_block *sb, int group)
{
- if (EXT3_HAS_RO_COMPAT_FEATURE(sb,
- EXT3_FEATURE_RO_COMPAT_SPARSE_SUPER) &&
- !ext3_group_sparse(group))
- return 0;
- return EXT3_SB(sb)->s_gdb_count;
+ return ext3_bg_has_super(sb, group) ? EXT3_SB(sb)->s_gdb_count : 0;
}
/**
}
/**