Commit 50aa4eb0 authored by Evgeniy Dushistov's avatar Evgeniy Dushistov Committed by Linus Torvalds

[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: default avatarEvgeniy Dushistov <dushistov@mail.ru>
Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
parent dd187a26
...@@ -395,7 +395,6 @@ unsigned ufs_new_fragments(struct inode * inode, __fs32 * p, unsigned fragment, ...@@ -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, ...@@ -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, ...@@ -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) ...@@ -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: ...@@ -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: ...@@ -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: ...@@ -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) ...@@ -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) ...@@ -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) ...@@ -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) ...@@ -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;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment