Messages in this thread | | | From | "Bc. Michal Semler" <> | Subject | Re: CD-ROM can't be ejected | Date | Thu, 16 Sep 2004 14:31:40 +0200 |
| |
Dne čt 16. září 2004 14:24 Jens Axboe napsal(a): > On Thu, Sep 16 2004, Bc. Michal Semler wrote: > > Dne ?t 16. zá?í 2004 12:22 Jens Axboe napsal(a): > > > On Thu, Sep 16 2004, Bc. Michal Semler wrote: > > > > > > > On Thu, Sep 16 2004, Bc. Michal Semler wrote: > > > > > > > > notas:/home/cijoml# mount /cdrom/ > > > > > > > > notas:/home/cijoml# umount /cdrom/ > > > > > > > > notas:/home/cijoml# strace -o eject /dev/hdc > > > > > > > > eject: unable to eject, last error: Nep?ípustný argument > > > > > > > > > > > > > > > > As you can see, I dont't enter to directory... > > > > > > > > > > > > > > > > And output is included > > > > > > > > > > > > > > > > ioctl(3, CDROMEJECT, 0xbffffac8) = -1 EIO > > > > > > > > (Input/output error) > > > > > > > > > > > > > > That's the important bit, the reason you get EINVAL passed back > > > > > > > is because eject tries the floppy eject as well and decides to > > > > > > > print the warning from that. It really should just stop of it > > > > > > > sees -EIO, only continue if EINVAL/ENOTTY is passed back. > > > > > > > > > > > > > > Try this little c program and report back what it tells you. > > > > > > > Compile with > > > > > > > > > > > > > > gcc -Wall -o eject eject.c > > > > > > > > > > > > > > and run without arguments. > > > > > > > > > > > > > > #include <stdio.h> > > > > > > > #include <stdlib.h> > > > > > > > #include <fcntl.h> > > > > > > > #include <string.h> > > > > > > > #include <sys/ioctl.h> > > > > > > > #include <linux/cdrom.h> > > > > > > > > > > > > > > int main(int argc, char *argv[]) > > > > > > > { > > > > > > > int fd = open("/dev/hdc", O_RDONLY | O_NONBLOCK); > > > > > > > struct cdrom_generic_command cgc; > > > > > > > struct request_sense sense; > > > > > > > > > > > > > > memset(&cgc, 0, sizeof(cgc)); > > > > > > > memset(&sense, 0, sizeof(sense)); > > > > > > > > > > > > > > cgc.cmd[0] = 0x1b; > > > > > > > cgc.cmd[4] = 0x02; > > > > > > > cgc.sense = &sense; > > > > > > > cgc.data_direction = CGC_DATA_NONE; > > > > > > > > > > > > > > if (ioctl(fd, CDROM_SEND_PACKET, &cgc) == 0) { > > > > > > > printf("eject worked\n"); > > > > > > > return 0; > > > > > > > } > > > > > > > > > > > > > > printf("command failed - sense %x/%x/%x\n", sense.sense_key, > > > > > > > sense.asc, sense.ascq); return 1; > > > > > > > } > > > > > > > > > > > > 2.4.27-mh1 > > > > > > notas:~# /home/cijoml/eject > > > > > > ATAPI device hdc: > > > > > > Error: Not ready -- (Sense key=0x02) > > > > > > (reserved error code) -- (asc=0x53, ascq=0x02) > > > > > > The failed "Start/Stop Unit" packet command was: > > > > > > "1b 00 00 00 02 00 00 00 00 00 00 00 " > > > > > > command failed - sense 2/53/2 > > > > > > > > > > Your tray is still locked, are you sure it isn't mounted? > > > > > > > > Yes I am. This is written into console and I am logged only into this > > > > console and I copied whole commands from login to eject... :( > > > > > > For the third time, don't trim the cc list! group reply please. > > > > > > Something else must be keeping your drive locked. What else do you have > > > running in the system? It's enough if one app is just holding the drive > > > open, the drive wont get unlocked on umount then. > > > > only thing which access cdrom is cpudynd and it access harddrive too.... > > > > notas:~# fuser /dev/hdc > > /dev/hdc: 8102 > > notas:~# ps aux|grep 8102 > > root 8102 0.0 0.1 1536 456 ? SNs 13:49 > > 0:00 /usr/sbin/cpudynd -i 1 -p 0.5 0.9 -l 7 -t 120 -h /dev/hda,/dev/hdc > > well there you go, that is what is keeping the drive locked. cdrom > cannot know which process locked it or not, all it knows is that the > usage count is non-zero on umount, so it doesn't unlock the tray.
This is written on cpudyn website: Disk Standby
Tired of playing with hdparm and /etc/apm to save battery in your laptop or to make your desktop more quiet? Don't waste more time, you've found the solution :-)
Since version 0.2.0, the program is also able to put the computer disks in standby mode, if a given period has passed without any I/O operation.
It works very well even with Journaled File Systems such as Ext3, XFS and ReiserFS.
Options "-t timeout" and "-h dev0[,dev1]..." control this behaviour. It is __not__ activated by default, -t _or_ -h activated. Please check the usage and edit /etc/init.d/cpudyn if you need to activate it at startup time.
This feature works also with Linux 2.4.X and 2.5.X since version 0.30
Example:
cpudynd -i 1 -t 60 -h /dev/hda,/dev/hdc - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
| |