Commit 6d6747f8 authored by Qi Yong's avatar Qi Yong Committed by Linus Torvalds

minix zmap block counts calculation fix

The original minix zmap blocks calculation was correct, in the formula of:

	sbi->s_nzones - sbi->s_firstdatazone + 1

It is

	sp->s_zones - (sp->s_firstdatazone - 1)

in the minix3 source code.

But a later commit 016e8d44 ("fs/minix: Verify bitmap block counts
before mounting") has changed it unfortunately as:

  sbi->s_nzones - (sbi->s_firstdatazone + 1)

This would show free blocks one block less than the real when the total
data blocks are in "full zmap blocks plus one".

This patch corrects that zmap blocks calculation and tidy a printk
message while at it.
Signed-off-by: default avatarQi Yong <qiyong@fc-cn.com>
Cc: Josh Boyer <jwboyer@redhat.com>
Cc: Al Viro <viro@zeniv.linux.org.uk>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
parent 9f7d7a1d
...@@ -96,7 +96,7 @@ int minix_new_block(struct inode * inode) ...@@ -96,7 +96,7 @@ int minix_new_block(struct inode * inode)
unsigned long minix_count_free_blocks(struct super_block *sb) unsigned long minix_count_free_blocks(struct super_block *sb)
{ {
struct minix_sb_info *sbi = minix_sb(sb); struct minix_sb_info *sbi = minix_sb(sb);
u32 bits = sbi->s_nzones - (sbi->s_firstdatazone + 1); u32 bits = sbi->s_nzones - sbi->s_firstdatazone + 1;
return (count_free(sbi->s_zmap, sb->s_blocksize, bits) return (count_free(sbi->s_zmap, sb->s_blocksize, bits)
<< sbi->s_log_zone_size); << sbi->s_log_zone_size);
......
...@@ -267,12 +267,12 @@ static int minix_fill_super(struct super_block *s, void *data, int silent) ...@@ -267,12 +267,12 @@ static int minix_fill_super(struct super_block *s, void *data, int silent)
block = minix_blocks_needed(sbi->s_ninodes, s->s_blocksize); block = minix_blocks_needed(sbi->s_ninodes, s->s_blocksize);
if (sbi->s_imap_blocks < block) { if (sbi->s_imap_blocks < block) {
printk("MINIX-fs: file system does not have enough " printk("MINIX-fs: file system does not have enough "
"imap blocks allocated. Refusing to mount\n"); "imap blocks allocated. Refusing to mount.\n");
goto out_no_bitmap; goto out_no_bitmap;
} }
block = minix_blocks_needed( block = minix_blocks_needed(
(sbi->s_nzones - (sbi->s_firstdatazone + 1)), (sbi->s_nzones - sbi->s_firstdatazone + 1),
s->s_blocksize); s->s_blocksize);
if (sbi->s_zmap_blocks < block) { if (sbi->s_zmap_blocks < block) {
printk("MINIX-fs: file system does not have enough " printk("MINIX-fs: file system does not have enough "
......
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