Skip to contentSkip to conversation

ext4: don't count external journal blocks as overhead

PATCH Applied Eric Sandeen 2 participants 2 messages Nov 14, 2014 – Nov 25, 2014 ext4 file system

lore
Share & tools
lore
#0 lore raw

PATCH 1/1 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.

---

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.

fs/ext4/super.c +2 -2
index 2c9e686..9674578 100644
@@ -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;
maintainer Applied
#1 lore raw
Quoted 11 lines · Eric Sandeen

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.

Thanks, applied.

- Ted