2001-02-19 12:58:30

by Francis Galiegue

[permalink] [raw]
Subject: [PATCH] 2.4.1-ac16: add CDROM_LOCKDOOR ioctl to IDE floppies

Patch below. It Work For Me(tm) with an IDE ZIP drive.

--- drivers/ide/ide-floppy.c.old Mon Feb 19 13:39:55 2001
+++ drivers/ide/ide-floppy.c Mon Feb 19 13:48:53 2001
@@ -1517,15 +1517,21 @@
unsigned int cmd, unsigned long arg)
{
idefloppy_pc_t pc;
+ int prevent = (arg) ? 1 : 0;

switch (cmd) {
case CDROMEJECT:
+ prevent = 0;
+ /* fall through */
+ case CDROM_LOCKDOOR:
if (drive->usage > 1)
return -EBUSY;
- idefloppy_create_prevent_cmd (&pc, 0);
- (void) idefloppy_queue_pc_tail (drive, &pc);
- idefloppy_create_start_stop_cmd (&pc, 2);
+ idefloppy_create_prevent_cmd (&pc, prevent);
(void) idefloppy_queue_pc_tail (drive, &pc);
+ if (cmd == CDROMEJECT) {
+ idefloppy_create_start_stop_cmd (&pc, 2);
+ (void) idefloppy_queue_pc_tail (drive, &pc);
+ }
return 0;
case IDEFLOPPY_IOCTL_FORMAT_SUPPORTED:
return (0);


--
Francis Galiegue, [email protected] - Normand et fier de l'?tre
"Programming is a race between programmers, who try and make more and more
idiot-proof software, and universe, which produces more and more remarkable
idiots. Until now, universe leads the race" -- R. Cook


2001-02-23 21:43:55

by Ken Moffat

[permalink] [raw]
Subject: Re: [PATCH] 2.4.1-ac16: add CDROM_LOCKDOOR ioctl to IDE floppies

Francis, do I understand that you can remove the disk while it is
mounted? If so, there is a later version of ide-floppy.c (0.96) on
sourceforge.net which for some reason hasn't made it into the -ac kernels.
With 2.4.2 vanilla and ide-floppy 0.96 I don't get this problem, it also
removes some i/o error messages I was seeing.
Ken

On Mon, 19 Feb 2001, Francis Galiegue wrote:

> Patch below. It Work For Me(tm) with an IDE ZIP drive.
>
> --- drivers/ide/ide-floppy.c.old Mon Feb 19 13:39:55 2001
> +++ drivers/ide/ide-floppy.c Mon Feb 19 13:48:53 2001
> @@ -1517,15 +1517,21 @@
> unsigned int cmd, unsigned long arg)
> {
> idefloppy_pc_t pc;
> + int prevent = (arg) ? 1 : 0;
>
> switch (cmd) {
> case CDROMEJECT:
> + prevent = 0;
> + /* fall through */
> + case CDROM_LOCKDOOR:
> if (drive->usage > 1)
> return -EBUSY;
> - idefloppy_create_prevent_cmd (&pc, 0);
> - (void) idefloppy_queue_pc_tail (drive, &pc);
> - idefloppy_create_start_stop_cmd (&pc, 2);
> + idefloppy_create_prevent_cmd (&pc, prevent);
> (void) idefloppy_queue_pc_tail (drive, &pc);
> + if (cmd == CDROMEJECT) {
> + idefloppy_create_start_stop_cmd (&pc, 2);
> + (void) idefloppy_queue_pc_tail (drive, &pc);
> + }
> return 0;
> case IDEFLOPPY_IOCTL_FORMAT_SUPPORTED:
> return (0);
>
>
>