2014-11-14 18:39:50

by Eric Sandeen

[permalink] [raw]
Subject: [PATCH] ext4: don't count external journal blocks as overhead

This was fixed for ext3 with:

e6d8fb3 ext3: Count internal journal as bsddf overhead in ext3_statfs

but was never fixed for ext4.

With a large external journal and no used disk blocks, df comes
out negative without this, as journal blocks are added to the
overhead & subtracted from used blocks unconditionally.

Signed-off-by: Eric Sandeen <[email protected]>
---

ps: since this is stored in the on-disk superblock now, I'm not
sure how to fix up old filesystems, or if it matters much.

diff --git a/fs/ext4/super.c b/fs/ext4/super.c
index 2c9e686..9674578 100644
--- a/fs/ext4/super.c
+++ b/fs/ext4/super.c
@@ -3338,8 +3338,8 @@ int ext4_calculate_overhead(struct super_block *sb)
memset(buf, 0, PAGE_SIZE);
cond_resched();
}
- /* Add the journal blocks as well */
- if (sbi->s_journal)
+ /* Add the internal journal blocks as well */
+ if (sbi->s_journal && !sbi->journal_bdev)
overhead += EXT4_NUM_B2C(sbi, sbi->s_journal->j_maxlen);

sbi->s_overhead = overhead;



2014-11-25 21:33:04

by Theodore Ts'o

[permalink] [raw]
Subject: Re: [PATCH] ext4: don't count external journal blocks as overhead

On Fri, Nov 14, 2014 at 12:39:47PM -0600, Eric Sandeen wrote:
> This was fixed for ext3 with:
>
> e6d8fb3 ext3: Count internal journal as bsddf overhead in ext3_statfs
>
> but was never fixed for ext4.
>
> With a large external journal and no used disk blocks, df comes
> out negative without this, as journal blocks are added to the
> overhead & subtracted from used blocks unconditionally.
>
> Signed-off-by: Eric Sandeen <[email protected]>

Thanks, applied.

- Ted