mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
* Re: PROBLEM: kernel mount of initrd fails unless mke2fs uses 1024 byt e blocks
@ 2002-04-12 17:55 Andries.Brouwer
  0 siblings, 0 replies; 6+ messages in thread
From: Andries.Brouwer @ 2002-04-12 17:55 UTC (permalink / raw)
  To: linux-kernel, mark.post; +Cc: alan

    From: "Post, Mark K" <mark.post@eds.com>

    [1.] One line summary of the problem:
        Trying to use an initrd for an installation fails unless the mke2fs
    used a blocksize of 1024 bytes.

    [2.] Full description of the problem/report:
        I'm trying to create a Linux for S/390 version 2.2.20 installation
    kernel/ramdisk set.  When I create the ramdisk, if I issue the mke2fs
    command with -b 2048 or -b 4096, it works fine.  But, I try to boot the
    system, I get an "EXT2-fs: Magic mismatch, very weird !" error when the
    kernel tries to mount the ramdisk as the root file system.  If I let the
    blocksize default, or specify -b 1024, everything works fine.

    The comparison that seems to be failing is at line 500 of
    linux/fs/ext/super.c:
                    if (es->s_magic != le16_to_cpu(EXT2_SUPER_MAGIC)) {
                            printk ("EXT2-fs: Magic mismatch, very weird !\n");
                            goto failed_mount;

Well, we can read the source.
ext2_read_super() starts finding a blocksize:

	blocksize = get_hardblocksize(dev);

and buffer.c:get_hardblocksize() returns hardsect_size[major][minor].
rd.c sets hardsect_size[] to rd_hardsec, and initializes rd_hardsec
to RDBLK_SIZE, which is 512.
OK, so blocksize = 512.

Next,
	if (blocksize < BLOCK_SIZE)
		blocksize = BLOCK_SIZE;

So, now it is 1024.

Then bread (dev, 1, blocksize) reads the wrong part,
if in reality blocksize was different.

I once submitted a patch for this, but apparently it is not in 2.2.20.
Might do so later this evening, if there is time.

Andries

^ permalink raw reply	[flat|nested] 6+ messages in thread

* RE: PROBLEM: kernel mount of initrd fails unless mke2fs uses 1024 byt e blocks
@ 2002-04-12 21:17 Andries.Brouwer
  0 siblings, 0 replies; 6+ messages in thread
From: Andries.Brouwer @ 2002-04-12 21:17 UTC (permalink / raw)
  To: Andries.Brouwer, linux-kernel, mark.post

        The kernel does set_blocksize() to change the blocksize of your
        device. This set_blocksize() throws away all buffers with the
        now incorrect size. But your device is a ramdisk, and throwing
        out these buffers kills all your data.

    Andries,

    Thanks for the update.  So, what do I do now?
    Wait for a fix for 2.2?  Send my problem report to someone else?

First you check whether my analysis is correct:
check that after the failed mount attempt the ramdisk
does not hold any data anymore. (Say with od or so.)

Now we have a known problem. You can avoid meeting it
by only using blocksize 1024. On the kernel side this
of course will have to be fixed some time.
I think Adam Richter once submitted a patch to fix this,
but apparently it was not taken.
For 2.5 I think the aim must be to get rid of set_blocksize()
entirely. I don't know whether 2.2 and 2.4 will be fixed.

Andries

^ permalink raw reply	[flat|nested] 6+ messages in thread

* RE: PROBLEM: kernel mount of initrd fails unless mke2fs uses 1024 byt e blocks
@ 2002-04-12 21:01 Post, Mark K
  0 siblings, 0 replies; 6+ messages in thread
From: Post, Mark K @ 2002-04-12 21:01 UTC (permalink / raw)
  To: 'Andries.Brouwer@cwi.nl', linux-kernel

Andries,

Thanks for the update.  So, what do I do now?  Wait for a fix for 2.2?  Send
my problem report to someone else?  Let me know.

Mark Post

-----Original Message-----
From: Andries.Brouwer@cwi.nl [mailto:Andries.Brouwer@cwi.nl]
Sent: Friday, April 12, 2002 4:41 PM
To: Andries.Brouwer@cwi.nl; linux-kernel@vger.kernel.org;
mark.post@eds.com
Cc: alan@lxorguk.ukuu.org.uk
Subject: Re: PROBLEM: kernel mount of initrd fails unless mke2fs uses
1024 byt e blocks



        From: "Post, Mark K" <mark.post@eds.com>

        [1.] One line summary of the problem:
            Trying to use an initrd for an installation fails unless the
mke2fs
        used a blocksize of 1024 bytes.

        [2.] Full description of the problem/report:
            I'm trying to create a Linux for S/390 version 2.2.20
installation
        kernel/ramdisk set.  When I create the ramdisk, if I issue the
mke2fs
        command with -b 2048 or -b 4096, it works fine.  But, I try to boot
the
        system, I get an "EXT2-fs: Magic mismatch, very weird !" error when
the
        kernel tries to mount the ramdisk as the root file system.  If I let
the
        blocksize default, or specify -b 1024, everything works fine.

        The comparison that seems to be failing is at line 500 of
        linux/fs/ext/super.c:
                        if (es->s_magic != le16_to_cpu(EXT2_SUPER_MAGIC)) {
                                printk ("EXT2-fs: Magic mismatch, very weird
!\n");
                                goto failed_mount;

I answered:

    I once submitted a patch for this, but apparently it is not in 2.2.20.

but was too hasty.
I recalled a buglet here, that was fixed in 2.4 and is still in 2.2,
and indeed, there is such a buglet, but your problem is elsewhere.

The kernel does set_blocksize() to change the blocksize of your
device. This set_blocksize() throws away all buffers with the
now incorrect size. But your device is a ramdisk, and throwing
out these buffers kills all your data.
So, after doing that, you have an empty ramdisk again.
Hence mount fails.

Andries


^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: PROBLEM: kernel mount of initrd fails unless mke2fs uses 1024 byt e blocks
@ 2002-04-12 20:40 Andries.Brouwer
  0 siblings, 0 replies; 6+ messages in thread
From: Andries.Brouwer @ 2002-04-12 20:40 UTC (permalink / raw)
  To: Andries.Brouwer, linux-kernel, mark.post; +Cc: alan


        From: "Post, Mark K" <mark.post@eds.com>

        [1.] One line summary of the problem:
            Trying to use an initrd for an installation fails unless the mke2fs
        used a blocksize of 1024 bytes.

        [2.] Full description of the problem/report:
            I'm trying to create a Linux for S/390 version 2.2.20 installation
        kernel/ramdisk set.  When I create the ramdisk, if I issue the mke2fs
        command with -b 2048 or -b 4096, it works fine.  But, I try to boot the
        system, I get an "EXT2-fs: Magic mismatch, very weird !" error when the
        kernel tries to mount the ramdisk as the root file system.  If I let the
        blocksize default, or specify -b 1024, everything works fine.

        The comparison that seems to be failing is at line 500 of
        linux/fs/ext/super.c:
                        if (es->s_magic != le16_to_cpu(EXT2_SUPER_MAGIC)) {
                                printk ("EXT2-fs: Magic mismatch, very weird !\n");
                                goto failed_mount;

I answered:

    I once submitted a patch for this, but apparently it is not in 2.2.20.

but was too hasty.
I recalled a buglet here, that was fixed in 2.4 and is still in 2.2,
and indeed, there is such a buglet, but your problem is elsewhere.

The kernel does set_blocksize() to change the blocksize of your
device. This set_blocksize() throws away all buffers with the
now incorrect size. But your device is a ramdisk, and throwing
out these buffers kills all your data.
So, after doing that, you have an empty ramdisk again.
Hence mount fails.

Andries



^ permalink raw reply	[flat|nested] 6+ messages in thread

* PROBLEM: kernel mount of initrd fails unless mke2fs uses 1024 byt e blocks
@ 2002-04-12 14:52 Post, Mark K
  0 siblings, 0 replies; 6+ messages in thread
From: Post, Mark K @ 2002-04-12 14:52 UTC (permalink / raw)
  To: 'linux-kernel@vger.kernel.org'

[1.] One line summary of the problem:
	Trying to use an initrd for an installation fails unless the mke2fs
used a blocksize of 1024 bytes.

[2.] Full description of the problem/report:
	I'm trying to create a Linux for S/390 version 2.2.20 installation
kernel/ramdisk set.  When I create the ramdisk, if I issue the mke2fs
command with -b 2048 or -b 4096, it works fine.  But, I try to boot the
system, I get an "EXT2-fs: Magic mismatch, very weird !" error when the
kernel tries to mount the ramdisk as the root file system.  If I let the
blocksize default, or specify -b 1024, everything works fine.

The comparison that seems to be failing is at line 500 of
linux/fs/ext/super.c:
                if (es->s_magic != le16_to_cpu(EXT2_SUPER_MAGIC)) {
                        printk ("EXT2-fs: Magic mismatch, very weird !\n");
                        goto failed_mount;

I put in a couple of printk lines just before the "if" statement, and when
trying to use an initrd with a "bad" blocksize, the value at es->s_magic is
binary zeros.  The value generated by le16_to_cpu(EXT2_SUPER_MAGIC is a
decimal 21487 = 0x53EF.  When the initrd has a 1024 byte blocksize, the
value at es->s_magic matches correctly.

[3.] Keywords (i.e., modules, networking, kernel):
	initrd, mke2fs, blocksize

[4.] Kernel version (from /proc/version):

[5.] Output of Oops.. message (if applicable) with symbolic information
resolved (see Documentation/oops-tracing.txt)
	N/A

[6.] A small shell script or example program which triggers the problem (if
possible)
	N/A

[7.] Environment
	Linux 2.2.20, "vanilla" from kernel.org, compiled on a Linux/390
2.2.18 system, again, "vanilla" from kernel.org.

[7.1.] Software (add the output of the ver_linux script here)
	This information is from the *building* Linux system, not the
failing one:
# sh scripts/ver_linux
If some fields are empty or look unusual you may have an old version.
Compare to the current minimal requirements in Documentation/Changes.

Linux slackware 2.2.18 #2 SMP Mon Mar 26 15:04:40 EST 2001 s390 unknown

Gnu C                  2.95.2
Gnu make               3.79.1
binutils               2.10.1
util-linux             2.11b
mount                  2.11f
modutils               2.4.6
e2fsprogs              1.22
reiserfsprogs          3.x.0j
Linux C Library        2.1.3
ldd: version 1.9.9
Procps                 2.0.7
Net-tools              1.60
Kbd                    command
Sh-utils               2.0
Modules Loaded         nfsd

[7.2.] Processor information (from /proc/cpuinfo):
	This information is from the *building* Linux system, not the
failing one:
# cat /proc/cpuinfo
vendor_id       : IBM/S390
# processors    : 4
bogomips per cpu: 98.50
processor 0: version = FF,  identification = 100003,  machine = 9672
processor 1: version = FF,  identification = 200003,  machine = 9672
processor 2: version = FF,  identification = 300003,  machine = 9672
processor 3: version = FF,  identification = 400003,  machine = 9672

[7.3.] Module information (from /proc/modules):
	This information is from the *building* Linux system, not the
failing one:
# cat /proc/modules
nfsd                  190816   1 (autoclean)

[7.4.] Loaded driver and hardware information (/proc/ioports, /proc/iomem)
	N/A

[7.5.] PCI information ('lspci -vvv' as root)
	N/A

[7.6.] SCSI information (from /proc/scsi/scsi)
	N/A

[7.7.] Other information that might be relevant to the problem
       (please look in /proc and include all information that you
       think to be relevant):
	None.


Mark Post

^ permalink raw reply	[flat|nested] 6+ messages in thread

* PROBLEM: kernel mount of initrd fails unless mke2fs uses 1024 byt e blocks
@ 2002-04-09 20:47 Post, Mark K
  0 siblings, 0 replies; 6+ messages in thread
From: Post, Mark K @ 2002-04-09 20:47 UTC (permalink / raw)
  To: 'linux-kernel@vger.kernel.org'

[1.] One line summary of the problem:
	Trying to use an initrd for an installation fails unless the mke2fs
used a blocksize of 1024 bytes.

[2.] Full description of the problem/report:
	I'm trying to create a Linux for S/390 version 2.2.20 installation
kernel/ramdisk set.  When I create the ramdisk, if I issue the mke2fs
command with -b 2048 or -b 4096, it works fine.  But, I try to boot the
system, I get an "EXT2-fs: Magic mismatch, very weird !" error when the
kernel tries to mount the ramdisk as the root file system.  If I let the
blocksize default, or specify -b 1024, everything works fine.

The comparison that seems to be failing is at line 500 of
linux/fs/ext/super.c:
                if (es->s_magic != le16_to_cpu(EXT2_SUPER_MAGIC)) {
                        printk ("EXT2-fs: Magic mismatch, very weird !\n");
                        goto failed_mount;

I put in a couple of printk lines just before the "if" statement, and when
trying to use an initrd with a "bad" blocksize, the value at es->s_magic is
binary zeros.  The value generated by le16_to_cpu(EXT2_SUPER_MAGIC is a
decimal 21487 = 0x53EF.  When the initrd has a 1024 byte blocksize, the
value at es->s_magic matches correctly.

[3.] Keywords (i.e., modules, networking, kernel):
	initrd, mke2fs, blocksize

[4.] Kernel version (from /proc/version):

[5.] Output of Oops.. message (if applicable) with symbolic information
resolved (see Documentation/oops-tracing.txt)
	N/A

[6.] A small shell script or example program which triggers the problem (if
possible)
	N/A

[7.] Environment
	Linux 2.2.20, "vanilla" from kernel.org, compiled on a Linux/390
2.2.18 system, again, "vanilla" from kernel.org.

[7.1.] Software (add the output of the ver_linux script here)
	This information is from the *building* Linux system, not the
failing one:
# sh scripts/ver_linux
If some fields are empty or look unusual you may have an old version.
Compare to the current minimal requirements in Documentation/Changes.

Linux slackware 2.2.18 #2 SMP Mon Mar 26 15:04:40 EST 2001 s390 unknown

Gnu C                  2.95.2
Gnu make               3.79.1
binutils               2.10.1
util-linux             2.11b
mount                  2.11f
modutils               2.4.6
e2fsprogs              1.22
reiserfsprogs          3.x.0j
Linux C Library        2.1.3
ldd: version 1.9.9
Procps                 2.0.7
Net-tools              1.60
Kbd                    command
Sh-utils               2.0
Modules Loaded         nfsd

[7.2.] Processor information (from /proc/cpuinfo):
	This information is from the *building* Linux system, not the
failing one:
# cat /proc/cpuinfo
vendor_id       : IBM/S390
# processors    : 4
bogomips per cpu: 98.50
processor 0: version = FF,  identification = 100003,  machine = 9672
processor 1: version = FF,  identification = 200003,  machine = 9672
processor 2: version = FF,  identification = 300003,  machine = 9672
processor 3: version = FF,  identification = 400003,  machine = 9672

[7.3.] Module information (from /proc/modules):
	This information is from the *building* Linux system, not the
failing one:
# cat /proc/modules
nfsd                  190816   1 (autoclean)

[7.4.] Loaded driver and hardware information (/proc/ioports, /proc/iomem)
	N/A

[7.5.] PCI information ('lspci -vvv' as root)
	N/A

[7.6.] SCSI information (from /proc/scsi/scsi)
	N/A

[7.7.] Other information that might be relevant to the problem
       (please look in /proc and include all information that you
       think to be relevant):
	None.


Mark Post

^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2002-04-12 21:17 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2002-04-12 17:55 PROBLEM: kernel mount of initrd fails unless mke2fs uses 1024 byt e blocks Andries.Brouwer
  -- strict thread matches above, loose matches on Subject: below --
2002-04-12 21:17 Andries.Brouwer
2002-04-12 21:01 Post, Mark K
2002-04-12 20:40 Andries.Brouwer
2002-04-12 14:52 Post, Mark K
2002-04-09 20:47 Post, Mark K

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

all inboxes | Powered by JetHome®