]> git.hungrycats.org Git - linux/commitdiff
[PATCH] cdrom generic_packet oops fix
authorJens Axboe <axboe@suse.de>
Fri, 8 Oct 2004 00:33:02 +0000 (17:33 -0700)
committerLinus Torvalds <torvalds@ppc970.osdl.org>
Fri, 8 Oct 2004 00:33:02 +0000 (17:33 -0700)
Add dummy ->generic_packet() for devices that don't provide one.  It will
error all commands with "unknown opcode" 0x05/0x20/0x00 sense and return
-EIO.

Signed-off-by: Jens Axboe <axboe@suse.de>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
drivers/cdrom/cdrom.c

index 6683e361542c94bb938258665fcd3c7e82768c26..e57d19031f8ea3d7b98e018b66fde36038d592c9 100644 (file)
@@ -354,6 +354,19 @@ static void cdrom_sysctl_register(void);
 #endif /* CONFIG_SYSCTL */ 
 static struct cdrom_device_info *topCdromPtr;
 
+static int cdrom_dummy_generic_packet(struct cdrom_device_info *cdi,
+                                     struct packet_command *cgc)
+{
+       if (cgc->sense) {
+               cgc->sense->sense_key = 0x05;
+               cgc->sense->asc = 0x20;
+               cgc->sense->ascq = 0x00;
+       }
+
+       cgc->stat = -EIO;
+       return -EIO;
+}
+
 /* This macro makes sure we don't have to check on cdrom_device_ops
  * existence in the run-time routines below. Change_capability is a
  * hack to have the capability flags defined const, while we can still
@@ -411,6 +424,9 @@ int register_cdrom(struct cdrom_device_info *cdi)
        else
                cdi->cdda_method = CDDA_OLD;
 
+       if (!cdo->generic_packet)
+               cdo->generic_packet = cdrom_dummy_generic_packet;
+
        cdinfo(CD_REG_UNREG, "drive \"/dev/%s\" registered\n", cdi->name);
        spin_lock(&cdrom_lock);
        cdi->next = topCdromPtr;