lkml.org 
[lkml]   [2004]   [Sep]   [16]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
/
From
SubjectRe: CD-ROM can't be ejected
Date
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/

\
 
 \ /
  Last update: 2005-03-22 14:06    [W:0.085 / U:0.072 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site