ext4: fix freespace accounting with mballoc on 32bit machines
PATCH 1/1 ext4: fix freespace accounting with mballoc on 32bit machines
On a 32bit machine, passing the negative unsigned long fe_len into percpu_counter_add (which expects s64) messes up the counters:
[root@bear-05 linux-2.6.23-rc7]# df -h
Filesystem Size Used Avail Use% Mounted on/dev/sdb7 97G -149P 149P - /mnt/test
Patch below fixes this.
Signed-off-by Eric Sandeen <[email protected]>
fs/ext4/mballoc.c +1 -1
@@ -3005,7 +3005,7 @@ - ac->ac_b_ex.fe_len); gdp->bg_checksum =ext4_group_desc_csum (sbi, ac->ac_b_ex.fe_group, gdp);spin_unlock (sb_bgl_lock (sbi, ac->ac_b_ex.fe_group)); -percpu_counter_add (&sbi->s_freeblocks_counter, - ac->ac_b_ex.fe_len); +percpu_counter_sub (&sbi->s_freeblocks_counter, ac->ac_b_ex.fe_len); err =ext4_journal_dirty_metadata (handle, bitmap_bh);if (err)