From: Flavio <fbc...@gm...> - 2008-03-12 16:00:37
|
Hello all, I would like to ask you a simple question about cdrom and usb pen drives utilisation. I would like to know if I must insert a cd-rom in the cd-rom reader before uml starts, in case I have to use the cd-rom under UML. If I put the cd in before uml starts, there's no problem to mount and using it; but If I decide to insert the CD-ROM once UML is started (ot to not insert it at all)I get the following error in dmesg: Couldn't open "/dev/cdrom", errno = 123. What's the problem? Thank you, Flavio |
From: Jeff D. <jd...@ad...> - 2008-03-12 17:48:24
|
On Wed, Mar 12, 2008 at 05:00:31PM +0100, Flavio wrote: > I would like to ask you a simple question about cdrom and usb pen > drives utilisation. > > I would like to know if I must insert a cd-rom in the cd-rom reader > before uml starts, in case I have to use the cd-rom under UML. > > If I put the cd in before uml starts, there's no problem to mount and > using it; but If I decide to insert the CD-ROM once UML is started (ot > to not insert it at all)I get the following error in dmesg: > > Couldn't open "/dev/cdrom", errno = 123. UML shouldn't try to open the host device until a UML process tries opening the corresponding UML device. And it closes the host device when the last open of the UML device goes away. I'd suspect something in your distro is scanning UML devices and that's causing UML to try to open the host device. Jeff -- Work email - jdike at linux dot intel dot com |
From: Flavio <fbc...@gm...> - 2008-03-17 18:46:43
|
On 17/03/2008, Jeff Dike <jd...@ad...> wrote: > On Fri, Mar 14, 2008 at 11:59:38PM +0100, Flavio wrote: > > Let me give you the strace eject /dev/ubd2 again, it may helps you to > > understand. > > (I don't know if it's the same strace I posted before) > > > It changed from > > > > > > ioctl(3, CDROMEJECT, 0) = -1 EINVAL (Invalid argument) > > > to > > > > ioctl(3, CDROMEJECT, 0) = -1 EIO (Input/output error) > > > Maybe that's an improvement. > > Can you do a strace -e ioctl on UML while you try eject inside UML? Thanks Jeff, here's the output: ~# strace -e ioctl eject /dev/ubd2 ioctl(3, CDROMEJECT, 0) = -1 EIO (Input/output error) ioctl(3, SG_GET_VERSION_NUM, 0x7f7f85f82c) = -1 EINVAL (Invalid argument) ioctl(1, SNDCTL_TMR_TIMEBASE or TCGETS, {B38400 opost isig icanon echo ...}) = 0 not an sg device, or old sg driver ioctl(3, FDEJECT, 0x40577980) = -1 EINVAL (Invalid argument) ioctl(3, MGSL_IOCGPARAMS or MTIOCTOP or SNDCTL_MIDI_MPUMODE, 0x7f7f864490) = -1 EINVAL (Invalid argument) eject: unable to eject, last error: Invalid argument Process 1139 detached Sincerely, Flavio > > My patch just passes the ioctl along to the host, so it looks like the > host is returning -EIO now. > > > Jeff > > -- > Work email - jdike at linux dot intel dot com > |
From: Flavio <fbc...@gm...> - 2008-03-18 17:53:32
|
On 18/03/2008, Jeff Dike <jd...@ad...> wrote: > Did you back out the previous patch first? This is a replacement for > it, not an update. No I didn't. Excuse me, but I've never done a patch back out before. Could you tell me how to do it, please? Note that, your last patch has been successfully applied. (If there's no alternative, I would delete the kernel tree, download it again and apply the skas4 patch then your last one) Thank you, Flavio |
From: Jeff D. <jd...@ad...> - 2008-03-18 18:08:21
|
On Tue, Mar 18, 2008 at 06:53:06PM +0100, Flavio wrote: > No I didn't. Excuse me, but I've never done a patch back out before. > Could you tell me how to do it, please? > Note that, your last patch has been successfully applied. Backing out a patch is the same as applying it, except you add -R to the command line. Jeff -- Work email - jdike at linux dot intel dot com |
From: Jeff D. <jd...@ad...> - 2008-03-17 19:31:26
|
On Mon, Mar 17, 2008 at 07:46:36PM +0100, Flavio wrote: > Thanks Jeff, here's the output: > > ~# strace -e ioctl eject /dev/ubd2 > ioctl(3, CDROMEJECT, 0) = -1 EIO (Input/output error) Nope, that's strace inside UML. What I want is strace on UML on the host. I want to see what's happening with the ioctl on the host. Jeff -- Work email - jdike at linux dot intel dot com |
From: Flavio <fbc...@gm...> - 2008-03-17 19:42:20
|
On 17/03/2008, Jeff Dike <jd...@ad...> wrote: > On Mon, Mar 17, 2008 at 07:46:36PM +0100, Flavio wrote: > > Thanks Jeff, here's the output: > > > > ~# strace -e ioctl eject /dev/ubd2 > > ioctl(3, CDROMEJECT, 0) = -1 EIO (Input/output error) > > > Nope, that's strace inside UML. What I want is strace on UML on the > host. I want to see what's happening with the ioctl on the host. Excuse me Jeff, but I really didn't understand what you mean. I tried to do host # strace -e ioctl linux ubd0=rootfs ubd1=swap etc.... That's the usual command line I write to start UML from the host machine. Doing in that way I see a lot of strange messages due to strace, but it's a huge quantity of confusing lines. What should I do exactly? Flavio > > > Jeff > > -- > Work email - jdike at linux dot intel dot com > |
From: Flavio <fbc...@gm...> - 2008-03-18 19:17:56
|
On 18/03/2008, Jeff Dike <jd...@ad...> wrote: > On Tue, Mar 18, 2008 at 06:53:06PM +0100, Flavio wrote: > > No I didn't. Excuse me, but I've never done a patch back out before. > > Could you tell me how to do it, please? > > Note that, your last patch has been successfully applied. > > > Backing out a patch is the same as applying it, except you add -R to > the command line. Ok, I applied your last patch. I've done the test, and this is the result: ioctl(16, CDROMEJECT, 0) = -1 EIO (Input/output error) > You want /proc/<eject-pid>/3. How can I get the eject-pid? It quickly terminates, giving me the following lines: ~# eject /dev/ubd2 not an sg device, or old sg driver eject: unable to eject, last error: Invalid argument Thanks, Flavio > > Jeff > > -- > Work email - jdike at linux dot intel dot com > |
From: Flavio <fbc...@gm...> - 2008-04-29 16:35:11
|
2008/4/4 Flavio <fbc...@gm...>: > > On 04/04/2008, Jeff Dike <jd...@ad...> wrote: > > On Wed, Apr 02, 2008 at 01:34:00PM +0200, Flavio wrote: > > > I guess you mean the difference between eject on the host and eject on > > > the UML guest. If so, this is the eject strace output on the host: > > > ioctl(3, CDROMEJECT, 0x1) = 0 > > > > > > This is the eject strace output in UML: > > > ioctl(16, CDROMEJECT, 0x1) = -1 EIO (Input/output error) > > > > > > No, I mean both on the host. > > > > > > > > Are you running > > > > eject as root? > > > Of course. > > > > > > Are you running UML as root? > Yes, I am running both eject and UML as root, at the moment. > > Flavio > Any news? Flavio |
From: Jeff D. <jd...@ad...> - 2008-05-01 15:17:54
|
On Tue, Apr 29, 2008 at 06:35:06PM +0200, Flavio wrote: > Any news? The current state of things as I understand them is that we have the eject ioctl being called in exactly the same way from eject and from UML and it behaves differently. This, of course, shouldn't happen, so there must be something different. We just haven't figured out what. Jeff -- Work email - jdike at linux dot intel dot com |
From: Flavio <fbc...@gm...> - 2008-05-01 17:15:58
|
2008/5/1 Jeff Dike <jd...@ad...>: > On Tue, Apr 29, 2008 at 06:35:06PM +0200, Flavio wrote: > > Any news? > > The current state of things as I understand them is that we have the > eject ioctl being called in exactly the same way from eject and from > UML and it behaves differently. This, of course, shouldn't happen, so > there must be something different. We just haven't figured out what. OK! Thank you very much Jeff, I appreciate you. Flavio > > > > > Jeff > > -- > Work email - jdike at linux dot intel dot com > |
From: Jeff D. <jd...@ad...> - 2008-03-19 16:44:43
|
On Tue, Mar 18, 2008 at 08:17:52PM +0100, Flavio wrote: > Ok, I applied your last patch. I've done the test, and this is the result: > ioctl(16, CDROMEJECT, 0) = -1 EIO (Input/output error) I want that 0 to be a 1. Are you sure you applied the patch? The relevant line in ubd_kern.c should be return os_ioctl_generic(ubd_dev->fd, CDROMEJECT, arg); Jeff -- Work email - jdike at linux dot intel dot com |
From: Flavio <fbc...@gm...> - 2008-03-12 19:00:16
|
On 12/03/2008, Jeff Dike <jd...@ad...> wrote: > On Wed, Mar 12, 2008 at 05:00:31PM +0100, Flavio wrote: > > I would like to ask you a simple question about cdrom and usb pen > > drives utilisation. > > > > I would like to know if I must insert a cd-rom in the cd-rom reader > > before uml starts, in case I have to use the cd-rom under UML. > > > > If I put the cd in before uml starts, there's no problem to mount and > > using it; but If I decide to insert the CD-ROM once UML is started (ot > > to not insert it at all)I get the following error in dmesg: > > > > Couldn't open "/dev/cdrom", errno = 123. > > > UML shouldn't try to open the host device until a UML process tries > opening the corresponding UML device. And it closes the host device > when the last open of the UML device goes away. I'd suspect something > in your distro is scanning UML devices and that's causing UML to try > to open the host device. Thank you Jeff, I'm not sure I perfectly understand. So, here's what I was trying to do: binding the /dev/cdrom with the /dev/ubd2 virtual device, passing the ubd2=/dev/cdrom in the command line kernel option (no cd-rom inserted up to here). Once UML has finished to boot I do 'eject /dev/ubd2' to cause the cd-rom reader opening. I get the following message: ~# eject /dev/ubd2 eject: unable to open `/dev/ubd2' If I put the cd into the reader before starting UML it's all right. I can use the cd-rom as well as the usb pen drive etc. But I can't still eject, actually: eject /dev/ubd2 not an sg device, or old sg driver eject: unable to eject, last error: Invalid argument Anyway, it's only for testing purposes at the moment. Maybe I'm trying to do something impossible, but I just want to be sure of that. If that is impossible I can understand security reasons. Thanks a lot, Flavio |
From: Jeff D. <jd...@ad...> - 2008-03-12 22:27:55
|
On Wed, Mar 12, 2008 at 08:00:10PM +0100, Flavio wrote: > So, here's what I was trying to do: binding the /dev/cdrom with the > /dev/ubd2 virtual device, passing the ubd2=/dev/cdrom in the command > line kernel option (no cd-rom inserted up to here). > Once UML has finished to boot I do 'eject /dev/ubd2' to cause the > cd-rom reader opening. > I get the following message: > ~# eject /dev/ubd2 > eject: unable to open `/dev/ubd2' Can you strace eject to see exactly what's happening? > If that is impossible I can understand security reasons. This should work (modulo eject needing an ioctl passed down to the host device). If it doesn't, it's a bug. Jeff -- Work email - jdike at linux dot intel dot com |
From: Flavio <fbc...@gm...> - 2008-03-12 23:14:17
|
On 12/03/2008, Jeff Dike <jd...@ad...> wrote: > On Wed, Mar 12, 2008 at 08:00:10PM +0100, Flavio wrote: > > So, here's what I was trying to do: binding the /dev/cdrom with the > > /dev/ubd2 virtual device, passing the ubd2=/dev/cdrom in the command > > line kernel option (no cd-rom inserted up to here). > > Once UML has finished to boot I do 'eject /dev/ubd2' to cause the > > cd-rom reader opening. > > I get the following message: > > ~# eject /dev/ubd2 > > eject: unable to open `/dev/ubd2' > > > Can you strace eject to see exactly what's happening? > > > > If that is impossible I can understand security reasons. > > > This should work (modulo eject needing an ioctl passed down to the > host device). If it doesn't, it's a bug. First of all, thank you so much Jeff, I appreciate your support very much. Maybe I wasn't clear during my problem explanation. Consider two different scenarios: 1) If I run UML using the following command line linux ubd0=rootfs.debian.etch ubd1=swapfs.debian ubd2=/dev/cdrom eth0=tuntap,,,192.168.1.100 mem=512M and we have no disk inside the cd-rom reader, thus I get the following error: DebianUM:~# dmesg|grep cdrom Kernel command line: ubd0=rootfs.debian.etch ubd1=swapfs.debian ubd2=/dev/cdrom eth0=tuntap,,,192.168.1.101 mem=512M root=98:0 Couldn't open "/dev/cdrom", errno = 123 Then, the /dev/ubdc node has not been created at all. 2) If I run UML using the same command line above, but we have a cd-rom inside the cd reader this time, so we have no errors reported in the case 1. For example, I've just inserted a dvd-rom in my reader and booted UML (using the command above). This is the output from dmesg: DebianUM:~# dmesg|grep cdrom Kernel command line: ubd0=rootfs.debian.etch ubd1=swapfs.debian ubd2=/dev/cdrom eth0=tuntap,,,192.168.1.101 mem=512M root=98:0 In that case, the /dev/ubd2 node has been created. OK.. Now suppose you are in the case 2: 2.1) If I change CD-ROM and I try to mount it, I have no problem. It's all OK. 2.2) If I have a CD-ROM inside the reader (and also mounted) and I try to do 'eject /dev/ubd2' this is the result: DebianUM:~# eject /dev/ubd2 not an sg device, or old sg driver eject: unable to eject, last error: Invalid argument If you really need the strace of 'eject /dev/ubd2', I'll do that. Note that, in the scenario 1, that isn't needed since the /dev/ubd2 node is not being created. Thank you, Flavio > > > Jeff > > -- > Work email - jdike at linux dot intel dot com > |
From: Flavio <fbc...@gm...> - 2008-03-17 20:50:59
Attachments:
stracelog.tar.bz2
|
Here's the strace log file attached to this mail. Note that it's a compressed text file (as you can see), but once it has been uncompressed, it occupies about 75 MBytes. Flavio On 17/03/2008, Flavio <fbc...@gm...> wrote: > On 17/03/2008, Jeff Dike <jd...@ad...> wrote: > > > On Mon, Mar 17, 2008 at 07:46:36PM +0100, Flavio wrote: > > > Thanks Jeff, here's the output: > > > > > > ~# strace -e ioctl eject /dev/ubd2 > > > ioctl(3, CDROMEJECT, 0) = -1 EIO (Input/output error) > > > > > > Nope, that's strace inside UML. What I want is strace on UML on the > > host. I want to see what's happening with the ioctl on the host. > > Excuse me Jeff, > but I really didn't understand what you mean. > I tried to do > host # strace -e ioctl linux ubd0=rootfs ubd1=swap etc.... > That's the usual command line I write to start UML from the host machine. > > Doing in that way I see a lot of strange messages due to strace, but > it's a huge quantity of confusing lines. > > What should I do exactly? > > > Flavio > > > > > > > > Jeff > > > > -- > > Work email - jdike at linux dot intel dot com > > > |
From: Jeff D. <jd...@ad...> - 2008-03-18 01:09:50
|
(Forgot to mention - I can see you're running with skas4. Nice work, and I trust it's working well for you...) Jeff -- Work email - jdike at linux dot intel dot com |
From: Jeff D. <jd...@ad...> - 2008-03-18 01:07:09
|
On Mon, Mar 17, 2008 at 09:50:43PM +0100, Flavio wrote: > Here's the strace log file attached to this mail. > Note that it's a compressed text file (as you can see), but once it > has been uncompressed, it occupies about 75 MBytes. This is the relevant bit: ioctl(16, CDROMEJECT, 0) = -1 EIO (Input/output error) CDROMEJECT doesn't work on the host, so it's not going to work from inside UML. As a sanity-check, you can do this again, look for the line above, and make sure the file descriptor (16 in this case) refers to /dev/cdrom. Look in /proc/<pid>/fd for the same pid that you strace. As another sanity-check, strace eject running on the host. It's possible that CDROMEJECT fails the same way and one of its fallbacks works. In that case, I just need to make UML use the same fallbacks. Jeff -- Work email - jdike at linux dot intel dot com |
From: Flavio <fbc...@gm...> - 2008-03-19 20:39:17
|
On 19/03/2008, Jeff Dike <jd...@ad...> wrote: > On Tue, Mar 18, 2008 at 08:17:52PM +0100, Flavio wrote: > > Ok, I applied your last patch. I've done the test, and this is the result: > > ioctl(16, CDROMEJECT, 0) = -1 EIO (Input/output error) > > > I want that 0 to be a 1. Are you sure you applied the patch? The > relevant line in ubd_kern.c should be > > return os_ioctl_generic(ubd_dev->fd, CDROMEJECT, arg); # cat arch/um/drivers/ubd_kern.c|grep os_ioctl_generic return os_ioctl_generic(ubd_dev->fd, CDROMEJECT, arg); It seems the patch has been applied. Isn't it? Thank you, Flavio > > > Jeff > > -- > Work email - jdike at linux dot intel dot com > |
From: Jeff D. <jd...@ad...> - 2008-03-24 15:27:48
|
On Wed, Mar 19, 2008 at 09:39:13PM +0100, Flavio wrote: > On 19/03/2008, Jeff Dike <jd...@ad...> wrote: > > On Tue, Mar 18, 2008 at 08:17:52PM +0100, Flavio wrote: > > > Ok, I applied your last patch. I've done the test, and this is the result: > > > ioctl(16, CDROMEJECT, 0) = -1 EIO (Input/output error) > > > > > > I want that 0 to be a 1. Are you sure you applied the patch? The > > relevant line in ubd_kern.c should be > > > > return os_ioctl_generic(ubd_dev->fd, CDROMEJECT, arg); > # cat arch/um/drivers/ubd_kern.c|grep os_ioctl_generic > return os_ioctl_generic(ubd_dev->fd, CDROMEJECT, arg); > > It seems the patch has been applied. Isn't it? Yup - I'm mystified as to why arg == 1 isn't happening with the UML. Can you change the "arg" to just a literal "1" and see what the strace looks like? Jeff -- Work email - jdike at linux dot intel dot com |
From: Jeff D. <jd...@ad...> - 2008-03-13 14:30:50
|
On Thu, Mar 13, 2008 at 12:14:12AM +0100, Flavio wrote: > 1) If I run UML using the following command line > linux ubd0=rootfs.debian.etch ubd1=swapfs.debian ubd2=/dev/cdrom > eth0=tuntap,,,192.168.1.100 mem=512M > and we have no disk inside the cd-rom reader, thus I get the following error: > > DebianUM:~# dmesg|grep cdrom > Kernel command line: ubd0=rootfs.debian.etch ubd1=swapfs.debian > ubd2=/dev/cdrom eth0=tuntap,,,192.168.1.101 mem=512M root=98:0 > Couldn't open "/dev/cdrom", errno = 123 > > Then, the /dev/ubdc node has not been created at all. This might be a bad interaction with udev. It looks to me like it's scanning all the devices present on the system and creating /dev nodes only for devices that successfully open, without considering that it might be openable later if it isn't now. > 2) If I run UML using the same command line above, but we have a > cd-rom inside the cd reader this time, so we have no errors reported > in the case 1. > For example, I've just inserted a dvd-rom in my reader and booted UML > (using the command above). This is the output from dmesg: > > DebianUM:~# dmesg|grep cdrom > Kernel command line: ubd0=rootfs.debian.etch ubd1=swapfs.debian > ubd2=/dev/cdrom eth0=tuntap,,,192.168.1.101 mem=512M root=98:0 > > In that case, the /dev/ubd2 node has been created. > > OK.. Now suppose you are in the case 2: > > 2.1) If I change CD-ROM and I try to mount it, I have no problem. It's all OK. > 2.2) If I have a CD-ROM inside the reader (and also mounted) and I try > to do 'eject /dev/ubd2' this is the result: > > DebianUM:~# eject /dev/ubd2 > not an sg device, or old sg driver > eject: unable to eject, last error: Invalid argument I'll need a strace of this - maybe the ubd driver needs an ioctl added, which is easy. Maybe eject is trying to communicate directly with the hardware driver, in which case, this is harder. Jeff -- Work email - jdike at linux dot intel dot com |
From: Flavio <fbc...@gm...> - 2008-03-13 18:22:08
|
On 13/03/2008, Jeff Dike <jd...@ad...> wrote: > > 2.1) If I change CD-ROM and I try to mount it, I have no problem. It's all OK. > > 2.2) If I have a CD-ROM inside the reader (and also mounted) and I try > > to do 'eject /dev/ubd2' this is the result: > > > > DebianUM:~# eject /dev/ubd2 > > not an sg device, or old sg driver > > eject: unable to eject, last error: Invalid argument > > > I'll need a strace of this - maybe the ubd driver needs an ioctl > added, which is easy. Maybe eject is trying to communicate directly > with the hardware driver, in which case, this is harder. Thank you Jeff, so, we are in scenario 2.2. Here's the strace output: ~# strace eject /dev/ubd2 execve("/usr/bin/eject", ["eject", "/dev/ubd2"], [/* 12 vars */]) = 0 brk(0) = 0x606000 mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x4001d000 uname({sys="Linux", node="DebianUM", ...}) = 0 access("/etc/ld.so.nohwcap", F_OK) = -1 ENOENT (No such file or directory) mmap(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x4001e000 access("/etc/ld.so.preload", R_OK) = -1 ENOENT (No such file or directory) open("/etc/ld.so.cache", O_RDONLY) = 3 fstat(3, {st_mode=S_IFREG|0644, st_size=24172, ...}) = 0 mmap(NULL, 24172, PROT_READ, MAP_PRIVATE, 3, 0) = 0x40020000 close(3) = 0 access("/etc/ld.so.nohwcap", F_OK) = -1 ENOENT (No such file or directory) open("/lib/libc.so.6", O_RDONLY) = 3 read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\340\342"..., 832) = 832 fstat(3, {st_mode=S_IFREG|0755, st_size=1420624, ...}) = 0 mmap(NULL, 3527256, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x4021e000 mprotect(0x40372000, 2097152, PROT_NONE) = 0 mmap(0x40572000, 20480, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x154000) = 0x40572000 mmap(0x40577000, 16984, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x40577000 close(3) = 0 mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x40026000 arch_prctl(ARCH_SET_FS, 0x400266e0) = 0 mprotect(0x40572000, 12288, PROT_READ) = 0 munmap(0x40020000, 24172) = 0 brk(0) = 0x606000 brk(0x627000) = 0x627000 access("/dev/ubd2", F_OK) = 0 readlink("/dev/ubd2", 0x7f7f8e6120, 4095) = -1 EINVAL (Invalid argument) stat("/dev/ubd2", {st_mode=S_IFBLK|0644, st_rdev=makedev(98, 32), ...}) = 0 open("/etc/mtab", O_RDONLY) = 3 fstat(3, {st_mode=S_IFREG|0644, st_size=144, ...}) = 0 mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x40020000 read(3, "/dev/ubd0 / ext3 rw 0 0\nproc /pr"..., 4096) = 144 stat("/dev/ubd0", {st_mode=S_IFBLK|0644, st_rdev=makedev(98, 0), ...}) = 0 stat("proc", 0x7f7f8e3040) = -1 ENOENT (No such file or directory) stat("sysfs", 0x7f7f8e3040) = -1 ENOENT (No such file or directory) stat("tmpfs", 0x7f7f8e3040) = -1 ENOENT (No such file or directory) stat("devpts", 0x7f7f8e3040) = -1 ENOENT (No such file or directory) read(3, "", 4096) = 0 close(3) = 0 munmap(0x40020000, 4096) = 0 open("/etc/fstab", O_RDONLY) = 3 fstat(3, {st_mode=S_IFREG|0644, st_size=209, ...}) = 0 mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x40020000 read(3, "# UNCONFIGURED FSTAB FOR BASE SY"..., 4096) = 209 read(3, "", 4096) = 0 close(3) = 0 munmap(0x40020000, 4096) = 0 stat("/dev/ubd2", {st_mode=S_IFBLK|0644, st_rdev=makedev(98, 32), ...}) = 0 open("/dev/ubd2", O_RDWR|O_NONBLOCK) = 3 ioctl(3, CDROMEJECT, 0) = -1 EINVAL (Invalid argument) ioctl(3, SG_GET_VERSION_NUM, 0x7f7f8e30bc) = -1 EINVAL (Invalid argument) fstat(1, {st_mode=S_IFCHR|0600, st_rdev=makedev(4, 1), ...}) = 0 ioctl(1, SNDCTL_TMR_TIMEBASE or TCGETS, {B38400 opost isig icanon echo ...}) = 0 mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x40020000 write(1, "not an sg device, or old sg driv"..., 35not an sg device, or old sg driver ) = 35 ioctl(3, FDEJECT, 0x40577980) = -1 EINVAL (Invalid argument) ioctl(3, MGSL_IOCGPARAMS or MTIOCTOP or SNDCTL_MIDI_MPUMODE, 0x7f7f8e7d20) = -1 EINVAL (Invalid argument) write(2, "eject: unable to eject, last err"..., 53eject: unable to eject, last error: Invalid argument ) = 53 exit_group(1) = ? Process 1166 detached Thanks, Flavio > > > Jeff > > -- > Work email - jdike at linux dot intel dot com > |
From: Flavio <fbc...@gm...> - 2008-03-18 11:31:00
|
On 18/03/2008, Jeff Dike <jd...@ad...> wrote: > On Mon, Mar 17, 2008 at 09:50:43PM +0100, Flavio wrote: > > Here's the strace log file attached to this mail. > > Note that it's a compressed text file (as you can see), but once it > > has been uncompressed, it occupies about 75 MBytes. > > > This is the relevant bit: > ioctl(16, CDROMEJECT, 0) = -1 EIO (Input/output error) > > CDROMEJECT doesn't work on the host, so it's not going to work from > inside UML. eject /dev/cdrom on the host works very well also when UML is running. If I do that inside the UML machine (eject /dev/ubd2) doesn't work and produces the messages I've already posted. I continue to see the following message in the strace log file, after doing the eject command. ioctl(16, CDROMEJECT, 0) = -1 EIO (Input/output error) > > As a sanity-check, you can do this again, look for the line above, and > make sure the file descriptor (16 in this case) refers to /dev/cdrom. > Look in /proc/<pid>/fd for the same pid that you strace. I don't know why I don't have the /proc/16 directory. As a matter of fact I don't know how to exactly verify if the fd 16 refers to /dev/cdrom (maybe there's some file to cat). > > As another sanity-check, strace eject running on the host. It's > possible that CDROMEJECT fails the same way and one of its fallbacks > works. In that case, I just need to make UML use the same fallbacks. As I said before, eject perfectly works on the host. This is the strace 'eject /dev/cdrom' output related to the above line: ioctl(3, CDROMEJECT, 0x1) = 0 And the directory /proc/3/ exists on the host. Only for your reminder, the bind option to use the cdrom device into uml is always ubd2=/dev/cdrom passed as a kernel command line option. Best regards, Flavio > > > Jeff > > -- > Work email - jdike at linux dot intel dot com > On 18/03/2008, Jeff Dike <jd...@ad...> wrote: > (Forgot to mention - I can see you're running with skas4. Nice work, > and I trust it's working well for you...) Hehe! That's really great! I'm also happy to run UML on my amd64 as well as on x86 distributions. It is also very fast! Thank you so much! Flavio > > > Jeff > > -- > Work email - jdike at linux dot intel dot com > |
From: Jeff D. <jd...@ad...> - 2008-03-18 15:32:21
|
On Tue, Mar 18, 2008 at 12:30:53PM +0100, Flavio wrote: > > > > As a sanity-check, you can do this again, look for the line above, and > > make sure the file descriptor (16 in this case) refers to /dev/cdrom. > > Look in /proc/<pid>/fd for the same pid that you strace. > I don't know why I don't have the /proc/16 directory. > As a matter of fact I don't know how to exactly verify if the fd 16 > refers to /dev/cdrom (maybe there's some file to cat). You forgot the pid. > > > > As another sanity-check, strace eject running on the host. It's > > possible that CDROMEJECT fails the same way and one of its fallbacks > > works. In that case, I just need to make UML use the same fallbacks. > As I said before, eject perfectly works on the host. > This is the strace 'eject /dev/cdrom' output related to the above line: > ioctl(3, CDROMEJECT, 0x1) = 0 I just noticed something. I forgot to pass down the ioctl argument. See if the patch below makes any differece. > And the directory /proc/3/ exists on the host. /proc/3 is irrelevant. You want /proc/<eject-pid>/3. Jeff -- Work email - jdike at linux dot intel dot com Index: linux-2.6.22/arch/um/drivers/ubd_kern.c =================================================================== --- linux-2.6.22.orig/arch/um/drivers/ubd_kern.c 2008-03-06 08:57:08.000000000 -0500 +++ linux-2.6.22/arch/um/drivers/ubd_kern.c 2008-03-18 11:29:55.000000000 -0400 @@ -1162,6 +1162,10 @@ static int ubd_ioctl(struct inode * inod if(copy_to_user((char __user *) arg, &volume, sizeof(volume))) return -EFAULT; return 0; + case CDROMEJECT: + if (ubd_dev->fd == -1) + return -ENXIO; + return os_ioctl_generic(ubd_dev->fd, CDROMEJECT, arg); } return -EINVAL; } |
From: Flavio <fbc...@gm...> - 2008-03-24 15:58:14
|
On 24/03/2008, Jeff Dike <jd...@ad...> wrote: > Yup - I'm mystified as to why arg == 1 isn't happening with the UML. > Can you change the "arg" to just a literal "1" and see what the strace > looks like? Hello Jeff, I'm mystified too. This is the strace result after modifying the corresponding line as you want. ioctl(16, CDROMEJECT, 0x1) = -1 EIO (Input/output error) I have a n00b suspect: is it possible that the ubd_kern.c module isn't compiled? In other words: it might be that the ubd_kern.c kernel menuconfig option isn't selected. Anyway, I don't think so, because, the result above, is changed, but it's only a suspect. Looking for ubd inside the kernel configuration, it returns: Symbol: BLK_DEV_UBD [=y] Prompt: Virtual block device Defined at drivers/block/Kconfig:174 Depends on: BLK_DEV && UML Location: -> Block devices (BLK_DEV [=y]) Symbol: BLK_DEV_UBD_SYNC [=n] Prompt: Always do synchronous disk IO for UBD Defined at drivers/block/Kconfig:183 Depends on: BLK_DEV && BLK_DEV_UBD Location: -> Block devices (BLK_DEV [=y]) -> Virtual block device (BLK_DEV_UBD [=y]) What's wrong? Thank you, Flavio > Jeff > > -- > Work email - jdike at linux dot intel dot com > |