Patch to support mounting a looped file as the root filesystem
Tue, 10 Dec 1996 06:15:33 +0530 (IST)

this is a small patch to enable mounting of the root filesystem
from a looped file. So it's possible to have your ext2 root filesystem as a
single large file on an MSDOS partition and boot from there, like this :
c:\linux> dir
c:\linux> loadlin vmlinuz root=/dev/hda1 looproot=/linux/rootfs rw

where /dev/hda1 is the DOS partition.
The DOS partition is accessible after booting under /bootfs

The kernel must have compiled (_not_ as modules) support for the loop device,
the following patch, and the msdos (or whatever) filesystem.

rootfs can be a standard root filesystem produced by any distribution, with
the following modifications :
Modify /etc/fstab on the fs contained in rootfs to include the line :
/dev/loop0 / ext2 defaults 1 1
instead of the usual entry for /
Also modify your startup rc file (rc.S for slackware) to remount / ro before
the check for a readonly root fs and the subsequent fsck :
/sbin/mount -n -r -o remount /

You might also want to setup a file to swap to.

This offers an alternative to UMSDOS as a way to run linux from a DOS
partition. It would be useful in situations where you want "Instant Linux"
for temporary demos etc. on DOS-only machines, where you can't go through
the process of defrag/fips/repartition/install.
This is of course, not restricted to DOS partitions, you can as easily boot
from files hosted by any other filesystem.

Problems/caveats :
1. The biggest problem is the loop device itself. It is deadlock-prone -
mke2fs on a 40MB looped file on a 386/4MB RAM locks up every time.
2. Performance is much worse than it should be when the hosting file is msdos.
For example - booting from the same fs took (roughly) 22 seconds on raw
ext2, 24 seconds on looped ext2 on ext2, and 45 seconds on looped ext2 on
msdos. The problem seems to be the slow msdos bmap (which is called for
every block). These timings are on a 486DX2/66MHz/8MB/630MB IDE.
3. This is my first attempt at kernel programming :) Also I haven't tested
this very extensively.

Ray van Tassle has written patches which solve 1. and 2., but they don't seem
to have made it into the kernel yet.
BTW, why does bmap not work when msdos filesystems are mounted with
blocksize=1024 ? If it did, then we could implement md-style re-mapping and
get almost the same performance as on a raw partition.

The patch is against 2.0.18, but compiles and works nicely upto
at least 2.0.26 (should work ok with later kernels too).

Comments, suggestions welcome ...

-- ganesh

begin 600 lrpatch.gz
M'XL("&VKK#( VQR<&%T8V@ K5AM4]LX$/X<_XJ=] H)<<@[D-!V2 E0CKQT
M#I@5!8+?,+BI[U9W:P<5EWO1]XH=X+- 5*:N;UU7CGW/X;-=[L&C5JU<+C\M
M_&S#T9$&EC^?,R^$[:YM\Y#[GNG"6XJ'$6ZXQ<2V!AJ$ 1>A&3+8[OO^8FJB
MV99F$-%BX0?A-AR/AJ?G9\;;_H71._EH]$>C]UJ)._ 9\K]ML.7A->1O\_#U
M$,(KYFDE@*GON[ - &/?#\'A+A.W(F1S\#WR 1>GCJ=-IJ-0QG@TNM1*#M?B
M$(/(#?G"9;&S $74@U@'/0TV(QWTLC@1WHH,O.ESCYD!%,S%@GEV$>:^O4(W
M@7T/6>!!S%3 3#>AZA!K@G+DSO]0FWB:_UJ@0TQ#08$G%8J'E;G)O609I)YL
M+$UBO;\0&O7[-=GLWNS4<3&DBR%+$:\!V $XNX!ZI55IMP#* ,>2"!M"?]E4
M<.%'7LB]&02R>PFXX28,3R=J.'97=*?I QNVTD1VX ^D%[M3UYTS,67!#*^W
MX)WI">BS )NS#J=L"MN(3(8:^*8'V'/<6VI:,\L"+@"9UL&\\;E-$*;^+!)P
MVOC_+Q,Q$748 PA418I5:0@,X^)D/#SI&Y-/D^-NOS\Q#+7Q2$X;^_'&LZYM
M2K P6L23Z7+Y[10/89G+_3 91L\GO:'1&^,J/QXFBUA.P2UO+;@(@SA^)AGB
MI%X]($[JM9:.!Q!Y8J!!5!6)TK3M0'S&RJD2=GN]\<3HGPR_XK[Y _)YN$LW
M:>0X9*+OC&EA>MPBF[Q8&2FQ9K-!B35;!WIM?[DC/;F2CZ@Y(SBM] /314D7
MT% $NLGAE6<M;@OK9<;L:*C@_S#?R=B*6$\<F-'%9M=RC>JY_:6Z#9E!*\75
M1@)3Z3?F#:=R'.S^ 0MO3)= (TF1A0 \/(NJ$LC+E(D.U\J"5XN4(?9V?'E%
M%VA$\YS-,=7"UO*I#M5E':"P?*A*D':5X5.^A>3A!E\)\IZS?*J\5_>[W CP
M*X4U5N4B0+:O"[2_&2?C,>236G7@) APZZ0PM /3V&H'7MI?O/RR-$J@>!UA
M1XK%I<!@_1")A) 5_,@8]T;#_B?*JPBO\/.Y4-0VGF#!N=) 8ASW:$GSYR_*
M1FQPM;K:!+$PD%NUN7*.YGUXM^-Q'UEKPT7*=ZWQ%0_34'.5'?R '3S+<SKO
MLH4 P0*.U-*KB(]-;O#A^!U8+L,3;$ [8(B-E DPA8CF3 VFWQ:6[O$O!:JW
=TQM_P.2;%1VV<10>ZFWFQ[\K:/\">#K'UB42 P