The patch titled ufs: i_blocks wrong count has been added to the -mm tree. Its filename is ufs-i_blocks-wrong-count.patch See http://www.zip.com.au/~akpm/linux/patches/stuff/added-to-mm.txt to find out what to do about this ------------------------------------------------------ Subject: ufs: i_blocks wrong count From: Evgeniy Dushistov <dushistov@xxxxxxx> 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@xxxxxxx> Signed-off-by: Andrew Morton <akpm@xxxxxxxx> --- fs/ufs/balloc.c | 3 --- fs/ufs/truncate.c | 25 ++++++++++++------------- 2 files changed, 12 insertions(+), 16 deletions(-) diff -puN fs/ufs/balloc.c~ufs-i_blocks-wrong-count fs/ufs/balloc.c --- devel/fs/ufs/balloc.c~ufs-i_blocks-wrong-count 2006-06-03 16:38:51.000000000 -0700 +++ devel-akpm/fs/ufs/balloc.c 2006-06-03 16:38:51.000000000 -0700 @@ -395,7 +395,6 @@ unsigned ufs_new_fragments(struct inode if (result) { *p = cpu_to_fs32(sb, result); *err = 0; - inode->i_blocks += count << uspi->s_nspfshift; UFS_I(inode)->i_lastfrag = max_t(u32, UFS_I(inode)->i_lastfrag, fragment + count); } unlock_super(sb); @@ -409,7 +408,6 @@ unsigned ufs_new_fragments(struct inode result = ufs_add_fragments (inode, tmp, oldcount, newcount, err); if (result) { *err = 0; - inode->i_blocks += count << uspi->s_nspfshift; UFS_I(inode)->i_lastfrag = max_t(u32, UFS_I(inode)->i_lastfrag, fragment + count); unlock_super(sb); UFSD("EXIT, result %u\n", result); @@ -444,7 +442,6 @@ unsigned ufs_new_fragments(struct inode *p = cpu_to_fs32(sb, result); *err = 0; - inode->i_blocks += count << uspi->s_nspfshift; UFS_I(inode)->i_lastfrag = max_t(u32, UFS_I(inode)->i_lastfrag, fragment + count); unlock_super(sb); if (newcount < request) diff -puN fs/ufs/truncate.c~ufs-i_blocks-wrong-count fs/ufs/truncate.c --- devel/fs/ufs/truncate.c~ufs-i_blocks-wrong-count 2006-06-03 16:38:51.000000000 -0700 +++ devel-akpm/fs/ufs/truncate.c 2006-06-03 16:38:51.000000000 -0700 @@ -112,9 +112,8 @@ static int ufs_trunc_direct (struct inod frag1 = ufs_fragnum (frag1); frag2 = ufs_fragnum (frag2); - inode->i_blocks -= (frag2-frag1) << uspi->s_nspfshift; - mark_inode_dirty(inode); ufs_free_fragments (inode, tmp + frag1, frag2 - frag1); + mark_inode_dirty(inode); frag_to_free = tmp + frag1; next1: @@ -128,8 +127,7 @@ next1: continue; *p = 0; - inode->i_blocks -= uspi->s_nspb; - mark_inode_dirty(inode); + if (free_count == 0) { frag_to_free = tmp; free_count = uspi->s_fpb; @@ -140,6 +138,7 @@ next1: frag_to_free = tmp; free_count = uspi->s_fpb; } + mark_inode_dirty(inode); } if (free_count > 0) @@ -158,9 +157,9 @@ next1: frag4 = ufs_fragnum (frag4); *p = 0; - inode->i_blocks -= frag4 << uspi->s_nspfshift; - mark_inode_dirty(inode); + ufs_free_fragments (inode, tmp, frag4); + mark_inode_dirty(inode); next3: UFSD("EXIT\n"); @@ -219,7 +218,7 @@ static int ufs_trunc_indirect (struct in frag_to_free = tmp; free_count = uspi->s_fpb; } - inode->i_blocks -= uspi->s_nspb; + mark_inode_dirty(inode); } @@ -232,9 +231,9 @@ static int ufs_trunc_indirect (struct in if (i >= uspi->s_apb) { tmp = fs32_to_cpu(sb, *p); *p = 0; - inode->i_blocks -= uspi->s_nspb; - mark_inode_dirty(inode); + ufs_free_blocks (inode, tmp, uspi->s_fpb); + mark_inode_dirty(inode); ubh_bforget(ind_ubh); ind_ubh = NULL; } @@ -295,9 +294,9 @@ static int ufs_trunc_dindirect (struct i if (i >= uspi->s_apb) { tmp = fs32_to_cpu(sb, *p); *p = 0; - inode->i_blocks -= uspi->s_nspb; + + ufs_free_blocks(inode, tmp, uspi->s_fpb); mark_inode_dirty(inode); - ufs_free_blocks (inode, tmp, uspi->s_fpb); ubh_bforget(dind_bh); dind_bh = NULL; } @@ -355,9 +354,9 @@ static int ufs_trunc_tindirect (struct i if (i >= uspi->s_apb) { tmp = fs32_to_cpu(sb, *p); *p = 0; - inode->i_blocks -= uspi->s_nspb; + + ufs_free_blocks(inode, tmp, uspi->s_fpb); mark_inode_dirty(inode); - ufs_free_blocks (inode, tmp, uspi->s_fpb); ubh_bforget(tind_bh); tind_bh = NULL; } _ Patches currently in -mm which might be from dushistov@xxxxxxx are ufs-ufs_trunc_indirect-infinite-cycle.patch ufs-right-block-allocation.patch ufs-change-block-number-on-the-fly.patch ufs-directory-and-page-cache-install-aops.patch ufs-directory-and-page-cache-from-blocks-to-pages.patch ufs-wrong-type-cast.patch ufs-not-usual-amounts-of-fragments-per-block.patch ufs-unmark-config_ufs_fs_write-as-broken-mm-tree.patch ufs-easy-debug.patch ufs-little-directory-lookup-optimization.patch ufs-i_blocks-wrong-count.patch ufs-unlock_super-without-lock.patch ufs-zero-metadata.patch - To unsubscribe from this list: send the line "unsubscribe mm-commits" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html