[BusyBox] I think I'm going to rewrite mount.c.

Rob Landley rob at landley.net
Sun Jan 23 09:45:38 UTC 2005


I think I'm going to rewrite mount.c to make it suck less.  I've pondered this 
for a while, but now it broke in a way that cost me six hours to track down 
what was wrong.

Bind mounts don't work if all entries in /proc/filesystems are nodev, unless 
you explicitly specify a type.  (Or unless you have an /etc/filesystems 
(which is an obsolete relic now we've got /proc/filesystems) and it either 
lists a filesystem you don't have or lists a nodev filesystem without saying 
it's nodev.)

I.E. I compiled user mode linux (2.6.11-rc1-mm2 actually works, finally), 
compiled out all the filesystems except hostfs, and booted it with a hostfs 
root.  (I.E. ./vmlinux rw rootfstype=hostfs rootflags=/home/landley/build 
init=/bin/sh).  UML is really fun to play with, by the way.

Once in UML, I "mount -t proc /proc /proc" which means /proc/filesystems has 
all nodev filesystems, meaning the "auto" logic in busybox mount.c will never 
actually try any filesystems before failing.

This is fun interacting with bind mounts, since a bind mount doesn't care what 
the type you feed it is.  (Try it.  mkdir tmp/walrus; mount -t vfat -o 
bind /proc tmp/walrus , it works just fine.)  But without specifying a type, 
it'll never make the _attempt_ unless you have a blockdev backed 
filesystem...

I've meant to rewrite all this for a while, and back pre-1.0 I think I 
actually did at one point.  Probably long lost, but I can do it again.  The 
busybox mount.c file is a bit of a mess.

Anyway, just thought I'd mention it.  I can patch the problem by either A) 
specifying -t rutabega in my script, B) patching the current mount.c to go 
ahead and mount with type "auto" or something when you feed it -o bind or -o 
move.

But if I'm going to touch this code, I might as well rewrite it.  It could be 
a lot smaller, simpler, and easier to read...

You have been warned.

Rob



More information about the busybox mailing list