From: Jens Axboe 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 Signed-off-by: Andrew Morton --- 25-akpm/drivers/cdrom/cdrom.c | 16 ++++++++++++++++ 1 files changed, 16 insertions(+) diff -puN drivers/cdrom/cdrom.c~cdrom-generic_packet-oops-fix drivers/cdrom/cdrom.c --- 25/drivers/cdrom/cdrom.c~cdrom-generic_packet-oops-fix Wed Oct 6 16:30:05 2004 +++ 25-akpm/drivers/cdrom/cdrom.c Wed Oct 6 16:30:05 2004 @@ -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_i 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; _