My recollection from my last job (unemployed for the time being :-),
where I was building kernels with ext3 is correct.
If you have a kernel with ext2 linked statically and ext3 as a module,
even if you load the ext3 module in the initrd, the filesystem will
still be mounted with the ext2 driver.
This is because when the kernel tries to mount the root filesystem, it
goes through it's list of filesystem drivers and uses the first one
that recognizes the filesystem. Statically linked drivers are tried
before modular loaded drivers. Because the disk format of ext2 and
ext3 are the same, ext2 will successfully mount the root filesystem
before ext3 gets a try.
There are two possible solutions to this problem. The kernels that I
was building used both. :-) The first solution is to link ext2
dynamically (modular) and load it in the initrd on systems where the
root filesystem is ext2 (no journal). If you want the root filesystem
mounted using the journal (ext3) then the initrd should load the ext3
module (before the ext2 module if you wish to load it in the initrd,
which is really not necessary). The initrd should be a ROMFS
filesystme with the romfs driver statically linked into the kernel.
The other solution is to use one of the following patches:
http://web.gnu.walfield.org/mail-archive/linux-fsdevel/2000-February/0148.html
http://web.gnu.walfield.org/mail-archive/linux-fsdevel/2000-February/0144.html
I think I personally like the first one even though I used the second
one in my kernels when I worked with Peter.
b.
--
Brian J. Murrell