[PATCH] eject -T support

Denis Vlasenko vda.linux at googlemail.com
Sat Oct 7 21:12:13 UTC 2006


On Saturday 07 October 2006 18:44, Tito wrote:
> On Saturday 7 October 2006 18:19, Denis Vlasenko wrote:
> > On Saturday 07 October 2006 17:47, Tito wrote:
> > > > I have an idea: remove that code entirely, then:
> > > > 
> > > > #!/bin/sh
> > > > umount /dev/cdrom
> > > > eject
> > > > 
> > > > Would this work?
> > > 
> > > I don't think so. One test I did was to use
> > > 
> > > umount_main()
> > > 
> > > instead of the actual code but this gave me some errors on one
> > > of the two cases depending if I fed the device or the mount dir 
> > > as args.
> > 
> > I tested it and it worked for me as shell script.
> 
> With busybox umount!?

Yes:

bash-3.00# ls -l /dev/cdrom
lrwxrwxrwx    1 root     root            3 Oct  8  2006 /dev/cdrom -> hdb

bash-3.00# type umount
umount is /bin/umount

bash-3.00# ls -l /bin/umount
lrwxrwxrwx    1 root     root           30 Oct  2 00:03 /bin/umount -> /app/busybox-1.2.1.svn/busybox

bash-3.00# cd /mnt

bash-3.00# mount /dev/hdb tmp
mount: /dev/hdb is write-protected, mounting read-only

bash-3.00# mount
/dev/root on / type ext3 (ro,data=ordered)
none on /proc type proc (rw)
none on /sys type sysfs (rw)
none on /dev type ramfs (rw)
/dev/hda6 on /.share type reiserfs (rw,noatime)
/dev/hda7 on /.1 type reiserfs (rw,noatime)
/dev/hda8 on /.2 type reiserfs (rw,noatime)
/dev/hda6 on /.local type reiserfs (rw,noatime)
none on /dev/pts type devpts (rw)
automount(pid971) on /.local/mnt/auto type autofs (rw,fd=4,pgrp=971,timeout=15,minproto=2,maxproto=4,indirect)
none on /proc/bus/usb type usbfs (rw)
/dev/hdb on /.local/mnt/tmp type iso9660 (ro)

bash-3.00# strace -o /tmp/ttt umount /dev/cdrom

bash-3.00# mount
/dev/root on / type ext3 (ro,data=ordered)
none on /proc type proc (rw)
none on /sys type sysfs (rw)
none on /dev type ramfs (rw)
/dev/hda6 on /.share type reiserfs (rw,noatime)
/dev/hda7 on /.1 type reiserfs (rw,noatime)
/dev/hda8 on /.2 type reiserfs (rw,noatime)
/dev/hda6 on /.local type reiserfs (rw,noatime)
none on /dev/pts type devpts (rw)
automount(pid971) on /.local/mnt/auto type autofs (rw,fd=4,pgrp=971,timeout=15,minproto=2,maxproto=4,indirect)
none on /proc/bus/usb type usbfs (rw)


Strace output is below:

execve("/bin/umount", ["umount", "/dev/cdrom"], [/* 31 vars */]) = 0
brk(0)                                  = 0x80dd000
mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xf7f90000
access("/etc/ld.so.preload", R_OK)      = -1 ENOENT (No such file or directory)
open("/etc/ld.so.cache", O_RDONLY)      = 3
fstat64(3, {st_mode=S_IFREG|0644, st_size=50212, ...}) = 0
mmap2(NULL, 50212, PROT_READ, MAP_PRIVATE, 3, 0) = 0xf7f83000
close(3)                                = 0
open("/lib/libcrypt.so.1", O_RDONLY)    = 3
read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0\3\0\1\0\0\0004\10\0"..., 512) = 512
fstat64(3, {st_mode=S_IFREG|0555, st_size=23075, ...}) = 0
mmap2(NULL, 180540, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0xf7f56000
mmap2(0xf7f5a000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x3) = 0xf7f5a000
mmap2(0xf7f5c000, 155964, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0xf7f5c000
close(3)                                = 0
open("/lib/libm.so.6", O_RDONLY)        = 3
read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0\3\0\1\0\0\0\2203\0"..., 512) = 512
fstat64(3, {st_mode=S_IFREG|0555, st_size=197818, ...}) = 0
mmap2(NULL, 135296, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0xf7f34000
mmap2(0xf7f54000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x1f) = 0xf7f54000
close(3)                                = 0
open("/lib/libc.so.6", O_RDONLY)        = 3
read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0\3\0\1\0\0\0\0[\1\000"..., 512) = 512
fstat64(3, {st_mode=S_IFREG|0555, st_size=1253200, ...}) = 0
mmap2(NULL, 976604, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0xf7e45000
mmap2(0xf7f2d000, 16384, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0xe7) = 0xf7f2d000
mmap2(0xf7f31000, 9948, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0xf7f31000
close(3)                                = 0
mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xf7e44000
set_thread_area({entry_number:-1 -> 12, base_addr:0xf7e448c0, limit:1048575, seg_32bit:1, contents:0, read_exec_only:0, limit_in_pages:1, seg_not_present:0, useable:1}) = 0
mprotect(0xf7f2d000, 8192, PROT_READ)   = 0
mprotect(0xf7f54000, 4096, PROT_READ)   = 0
mprotect(0xf7f5a000, 4096, PROT_READ)   = 0
mprotect(0xf7fa7000, 4096, PROT_READ)   = 0
munmap(0xf7f83000, 50212)               = 0
getpid()                                = 2687
brk(0)                                  = 0x80dd000
brk(0x80fe000)                          = 0x80fe000
open("/usr/lib/locale/locale-archive", O_RDONLY|O_LARGEFILE) = 3
fstat64(3, {st_mode=S_IFREG|0444, st_size=488464, ...}) = 0
mmap2(NULL, 488464, PROT_READ, MAP_PRIVATE, 3, 0) = 0xf7dcc000
close(3)                                = 0
stat64("/etc/busybox.conf", 0xffd87728) = -1 ENOENT (No such file or directory)
getuid32()                              = 0
getgid32()                              = 0
setgid32(0)                             = 0
setuid32(0)                             = 0
open("/etc/mtab", O_RDONLY)             = 3
fstat64(3, {st_mode=S_IFREG|0444, st_size=0, ...}) = 0
mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xf7f8f000
read(3, "rootfs / rootfs rw 0 0\n/dev/root"..., 1024) = 494
read(3, "", 1024)                       = 0
close(3)                                = 0
munmap(0xf7f8f000, 4096)                = 0
lstat64("/dev", {st_mode=S_IFDIR|0755, st_size=0, ...}) = 0
lstat64("/dev/cdrom", {st_mode=S_IFLNK|0777, st_size=3, ...}) = 0
readlink("/dev/cdrom", "hdb", 4096)     = 3
lstat64("/dev/hdb", {st_mode=S_IFBLK|0660, st_rdev=makedev(3, 64), ...}) = 0
oldumount("/.local/mnt/tmp")            = 0
open("/dev/hdb", O_RDONLY|O_LARGEFILE)  = 3
ioctl(3, 0x4c01, 0)                     = -1 ENOSYS (Function not implemented)
close(3)                                = 0
open("/etc/mtab", O_RDONLY)             = 3
fstat64(3, {st_mode=S_IFREG|0444, st_size=0, ...}) = 0
mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xf7f8f000
read(3, "rootfs / rootfs rw 0 0\n/dev/root"..., 1024) = 454
read(3, "", 1024)                       = 0
close(3)                                = 0
munmap(0xf7f8f000, 4096)                = 0
open("/etc/mtab", O_WRONLY|O_CREAT|O_TRUNC, 0666) = 3
fstat64(3, {st_mode=S_IFREG|0444, st_size=0, ...}) = 0
mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xf7f8f000
fstat64(3, {st_mode=S_IFREG|0444, st_size=0, ...}) = 0
_llseek(3, 0, [0], SEEK_SET)            = 0
write(3, "rootfs / rootfs rw 0 0\n", 23) = -1 EINVAL (Invalid argument)
fstat64(3, {st_mode=S_IFREG|0444, st_size=0, ...}) = 0
_llseek(3, 0, [0], SEEK_SET)            = 0
write(3, "none /proc proc rw 0 0\n", 23) = -1 EINVAL (Invalid argument)
fstat64(3, {st_mode=S_IFREG|0444, st_size=0, ...}) = 0
_llseek(3, 0, [0], SEEK_SET)            = 0
write(3, "none /dev ramfs rw 0 0\n", 23) = -1 EINVAL (Invalid argument)
fstat64(3, {st_mode=S_IFREG|0444, st_size=0, ...}) = 0
_llseek(3, 0, [0], SEEK_SET)            = 0
write(3, "/dev/hda7 /.1 reiserfs rw,noatim"..., 38) = -1 EINVAL (Invalid argument)
fstat64(3, {st_mode=S_IFREG|0444, st_size=0, ...}) = 0
_llseek(3, 0, [0], SEEK_SET)            = 0
write(3, "/dev/hda6 /.local reiserfs rw,no"..., 42) = -1 EINVAL (Invalid argument)
fstat64(3, {st_mode=S_IFREG|0444, st_size=0, ...}) = 0
_llseek(3, 0, [0], SEEK_SET)            = 0
write(3, "automount(pid971) /.local/mnt/au"..., 105) = -1 EINVAL (Invalid argument)
close(3)                                = 0
munmap(0xf7f8f000, 4096)                = 0
exit_group(0)                           = ?

--
vda



More information about the busybox mailing list