[PATCH] ufs: i_blocks wrong count
At now UFS code uses DQUOT_* mechanism, but it also update inode->i_blocks manually, this cause wrong i_blocks value. Signed-off-by: Evgeniy Dushistov <dushistov@mail.ru> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
This commit is contained in:
parent
dd187a2603
commit
50aa4eb0b9
|
@ -395,7 +395,6 @@ unsigned ufs_new_fragments(struct inode * inode, __fs32 * p, unsigned fragment,
|
||||||
if (result) {
|
if (result) {
|
||||||
*p = cpu_to_fs32(sb, result);
|
*p = cpu_to_fs32(sb, result);
|
||||||
*err = 0;
|
*err = 0;
|
||||||
inode->i_blocks += count << uspi->s_nspfshift;
|
|
||||||
UFS_I(inode)->i_lastfrag = max_t(u32, UFS_I(inode)->i_lastfrag, fragment + count);
|
UFS_I(inode)->i_lastfrag = max_t(u32, UFS_I(inode)->i_lastfrag, fragment + count);
|
||||||
}
|
}
|
||||||
unlock_super(sb);
|
unlock_super(sb);
|
||||||
|
@ -409,7 +408,6 @@ unsigned ufs_new_fragments(struct inode * inode, __fs32 * p, unsigned fragment,
|
||||||
result = ufs_add_fragments (inode, tmp, oldcount, newcount, err);
|
result = ufs_add_fragments (inode, tmp, oldcount, newcount, err);
|
||||||
if (result) {
|
if (result) {
|
||||||
*err = 0;
|
*err = 0;
|
||||||
inode->i_blocks += count << uspi->s_nspfshift;
|
|
||||||
UFS_I(inode)->i_lastfrag = max_t(u32, UFS_I(inode)->i_lastfrag, fragment + count);
|
UFS_I(inode)->i_lastfrag = max_t(u32, UFS_I(inode)->i_lastfrag, fragment + count);
|
||||||
unlock_super(sb);
|
unlock_super(sb);
|
||||||
UFSD("EXIT, result %u\n", result);
|
UFSD("EXIT, result %u\n", result);
|
||||||
|
@ -444,7 +442,6 @@ unsigned ufs_new_fragments(struct inode * inode, __fs32 * p, unsigned fragment,
|
||||||
|
|
||||||
*p = cpu_to_fs32(sb, result);
|
*p = cpu_to_fs32(sb, result);
|
||||||
*err = 0;
|
*err = 0;
|
||||||
inode->i_blocks += count << uspi->s_nspfshift;
|
|
||||||
UFS_I(inode)->i_lastfrag = max_t(u32, UFS_I(inode)->i_lastfrag, fragment + count);
|
UFS_I(inode)->i_lastfrag = max_t(u32, UFS_I(inode)->i_lastfrag, fragment + count);
|
||||||
unlock_super(sb);
|
unlock_super(sb);
|
||||||
if (newcount < request)
|
if (newcount < request)
|
||||||
|
|
|
@ -112,9 +112,8 @@ static int ufs_trunc_direct (struct inode * inode)
|
||||||
frag1 = ufs_fragnum (frag1);
|
frag1 = ufs_fragnum (frag1);
|
||||||
frag2 = ufs_fragnum (frag2);
|
frag2 = ufs_fragnum (frag2);
|
||||||
|
|
||||||
inode->i_blocks -= (frag2-frag1) << uspi->s_nspfshift;
|
|
||||||
mark_inode_dirty(inode);
|
|
||||||
ufs_free_fragments (inode, tmp + frag1, frag2 - frag1);
|
ufs_free_fragments (inode, tmp + frag1, frag2 - frag1);
|
||||||
|
mark_inode_dirty(inode);
|
||||||
frag_to_free = tmp + frag1;
|
frag_to_free = tmp + frag1;
|
||||||
|
|
||||||
next1:
|
next1:
|
||||||
|
@ -128,8 +127,7 @@ next1:
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
*p = 0;
|
*p = 0;
|
||||||
inode->i_blocks -= uspi->s_nspb;
|
|
||||||
mark_inode_dirty(inode);
|
|
||||||
if (free_count == 0) {
|
if (free_count == 0) {
|
||||||
frag_to_free = tmp;
|
frag_to_free = tmp;
|
||||||
free_count = uspi->s_fpb;
|
free_count = uspi->s_fpb;
|
||||||
|
@ -140,6 +138,7 @@ next1:
|
||||||
frag_to_free = tmp;
|
frag_to_free = tmp;
|
||||||
free_count = uspi->s_fpb;
|
free_count = uspi->s_fpb;
|
||||||
}
|
}
|
||||||
|
mark_inode_dirty(inode);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (free_count > 0)
|
if (free_count > 0)
|
||||||
|
@ -158,9 +157,9 @@ next1:
|
||||||
frag4 = ufs_fragnum (frag4);
|
frag4 = ufs_fragnum (frag4);
|
||||||
|
|
||||||
*p = 0;
|
*p = 0;
|
||||||
inode->i_blocks -= frag4 << uspi->s_nspfshift;
|
|
||||||
mark_inode_dirty(inode);
|
|
||||||
ufs_free_fragments (inode, tmp, frag4);
|
ufs_free_fragments (inode, tmp, frag4);
|
||||||
|
mark_inode_dirty(inode);
|
||||||
next3:
|
next3:
|
||||||
|
|
||||||
UFSD("EXIT\n");
|
UFSD("EXIT\n");
|
||||||
|
@ -219,7 +218,7 @@ static int ufs_trunc_indirect (struct inode * inode, unsigned offset, __fs32 *p)
|
||||||
frag_to_free = tmp;
|
frag_to_free = tmp;
|
||||||
free_count = uspi->s_fpb;
|
free_count = uspi->s_fpb;
|
||||||
}
|
}
|
||||||
inode->i_blocks -= uspi->s_nspb;
|
|
||||||
mark_inode_dirty(inode);
|
mark_inode_dirty(inode);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -232,9 +231,9 @@ static int ufs_trunc_indirect (struct inode * inode, unsigned offset, __fs32 *p)
|
||||||
if (i >= uspi->s_apb) {
|
if (i >= uspi->s_apb) {
|
||||||
tmp = fs32_to_cpu(sb, *p);
|
tmp = fs32_to_cpu(sb, *p);
|
||||||
*p = 0;
|
*p = 0;
|
||||||
inode->i_blocks -= uspi->s_nspb;
|
|
||||||
mark_inode_dirty(inode);
|
|
||||||
ufs_free_blocks (inode, tmp, uspi->s_fpb);
|
ufs_free_blocks (inode, tmp, uspi->s_fpb);
|
||||||
|
mark_inode_dirty(inode);
|
||||||
ubh_bforget(ind_ubh);
|
ubh_bforget(ind_ubh);
|
||||||
ind_ubh = NULL;
|
ind_ubh = NULL;
|
||||||
}
|
}
|
||||||
|
@ -295,9 +294,9 @@ static int ufs_trunc_dindirect (struct inode *inode, unsigned offset, __fs32 *p)
|
||||||
if (i >= uspi->s_apb) {
|
if (i >= uspi->s_apb) {
|
||||||
tmp = fs32_to_cpu(sb, *p);
|
tmp = fs32_to_cpu(sb, *p);
|
||||||
*p = 0;
|
*p = 0;
|
||||||
inode->i_blocks -= uspi->s_nspb;
|
|
||||||
|
ufs_free_blocks(inode, tmp, uspi->s_fpb);
|
||||||
mark_inode_dirty(inode);
|
mark_inode_dirty(inode);
|
||||||
ufs_free_blocks (inode, tmp, uspi->s_fpb);
|
|
||||||
ubh_bforget(dind_bh);
|
ubh_bforget(dind_bh);
|
||||||
dind_bh = NULL;
|
dind_bh = NULL;
|
||||||
}
|
}
|
||||||
|
@ -355,9 +354,9 @@ static int ufs_trunc_tindirect (struct inode * inode)
|
||||||
if (i >= uspi->s_apb) {
|
if (i >= uspi->s_apb) {
|
||||||
tmp = fs32_to_cpu(sb, *p);
|
tmp = fs32_to_cpu(sb, *p);
|
||||||
*p = 0;
|
*p = 0;
|
||||||
inode->i_blocks -= uspi->s_nspb;
|
|
||||||
|
ufs_free_blocks(inode, tmp, uspi->s_fpb);
|
||||||
mark_inode_dirty(inode);
|
mark_inode_dirty(inode);
|
||||||
ufs_free_blocks (inode, tmp, uspi->s_fpb);
|
|
||||||
ubh_bforget(tind_bh);
|
ubh_bforget(tind_bh);
|
||||||
tind_bh = NULL;
|
tind_bh = NULL;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue