On Friday 31 October 2008 03:57, Rob Landley wrote:
> Ok, when you said "free loop devices", I thought you meant "losetup -d".
> You're talking about unmounting loop devices, which is a standard unmounting
> problem.
Ok, an example where I don't even mount a loopdevice,
but still can't remount my root RO as long
as loopdevice eixsts:
bash-3.2# mount -o remount,rw /
bash-3.2# dd if=/dev/zero bs=1M count=10 >/z
10+0 records in
10+0 records out
bash-3.2# mke2fs /z
mke2fs 1.34 (25-Jul-2003)
/z is not a block special device.
Proceed anyway? (y,n) y
Filesystem label=
OS type: Linux
Block size=1024 (log=0)
Fragment size=1024 (log=0)
2560 inodes, 10240 blocks
...
bash-3.2# losetup /dev/loop0 /z
bash-3.2# mount -o remount,ro /
mount: mounting /dev/root on / failed: Device or resource busy
> > Looks like robust reboot procedure should try to free all
> > loop devices in order to avoid this. Should we patch init here?
> >
> > /* No inittab file -- set up some default behavior */
> > if (parser == NULL) {
> > /* Reboot on Ctrl-Alt-Del */
> > new_init_action(CTRLALTDEL, "reboot", "");
> > /* Umount all filesystems on halt/reboot */
> > new_init_action(SHUTDOWN, "umount -a -r", "");
> > /* Swapoff on halt/reboot */
> > if (ENABLE_SWAPONOFF)
> > new_init_action(SHUTDOWN, "swapoff -a", "");
>
> There's a umount -a in there already, which was there in busybox 1.2. If the
> busybox umount -a isn't unmounting everything properly, that's a separate
> bug.
What "umount -r -a" should do if remounting RO fails? "losetup -d"
every possible loopdevice and retry?
> Note that mounts are process context these days, so if you kill all
> proccesses
> except PID 1, it should naturally reference count those per-process mounts
> down to zero and free them, which just leaves the PID 1 mounts that umount -a
> should be able to get.
In the case we are using per-process mounts, yes,
killing processes helps with umount.
> Note that if you try to do this from a process _other_ than PID 1, or without
> having killed all the other processes on the system, then you're not
> guaranteed to have umounted every active filesystem.
We do it not from process 1 but from it's children anyway.
Not much difference.
> See the bit about about some resources being per-processes, so you have to
> kill all the processes other than PID 1 in order to make sure the reference
> counts of those resources drop to zero and the system can be quiesced?
Yes, I have to kill all processes. killall5 does that nicely.
--
vda
_______________________________________________
busybox mailing list
[email protected]
http://busybox.net/cgi-bin/mailman/listinfo/busybox