Loading drivers/scsi/ch.c +17 −21 Original line number Diff line number Diff line Loading @@ -30,7 +30,7 @@ #include <scsi/scsi_ioctl.h> #include <scsi/scsi_host.h> #include <scsi/scsi_device.h> #include <scsi/scsi_request.h> #include <scsi/scsi_eh.h> #include <scsi/scsi_dbg.h> #define CH_DT_MAX 16 Loading Loading @@ -180,17 +180,17 @@ static struct { /* ------------------------------------------------------------------- */ static int ch_find_errno(unsigned char *sense_buffer) static int ch_find_errno(struct scsi_sense_hdr *sshdr) { int i,errno = 0; /* Check to see if additional sense information is available */ if (sense_buffer[7] > 5 && sense_buffer[12] != 0) { if (scsi_sense_valid(sshdr) && sshdr->asc != 0) { for (i = 0; err[i].errno != 0; i++) { if (err[i].sense == sense_buffer[ 2] && err[i].asc == sense_buffer[12] && err[i].ascq == sense_buffer[13]) { if (err[i].sense == sshdr->sense_key && err[i].asc == sshdr->asc && err[i].ascq == sshdr->ascq) { errno = -err[i].errno; break; } Loading @@ -206,12 +206,8 @@ ch_do_scsi(scsi_changer *ch, unsigned char *cmd, void *buffer, unsigned buflength, enum dma_data_direction direction) { int errno, retries = 0, timeout; struct scsi_request *sr; sr = scsi_allocate_request(ch->device, GFP_KERNEL); if (NULL == sr) return -ENOMEM; int errno, retries = 0, timeout, result; struct scsi_sense_hdr sshdr; timeout = (cmd[0] == INITIALIZE_ELEMENT_STATUS) ? timeout_init : timeout_move; Loading @@ -223,16 +219,17 @@ ch_do_scsi(scsi_changer *ch, unsigned char *cmd, __scsi_print_command(cmd); } scsi_wait_req(sr, cmd, buffer, buflength, timeout * HZ, MAX_RETRIES); result = scsi_execute_req(ch->device, cmd, direction, buffer, buflength, &sshdr, timeout * HZ, MAX_RETRIES); dprintk("result: 0x%x\n",sr->sr_result); if (driver_byte(sr->sr_result) & DRIVER_SENSE) { dprintk("result: 0x%x\n",result); if (driver_byte(result) & DRIVER_SENSE) { if (debug) scsi_print_req_sense(ch->name, sr); errno = ch_find_errno(sr->sr_sense_buffer); scsi_print_sense_hdr(ch->name, &sshdr); errno = ch_find_errno(&sshdr); switch(sr->sr_sense_buffer[2] & 0xf) { switch(sshdr.sense_key) { case UNIT_ATTENTION: ch->unit_attention = 1; if (retries++ < 3) Loading @@ -240,7 +237,6 @@ ch_do_scsi(scsi_changer *ch, unsigned char *cmd, break; } } scsi_release_request(sr); return errno; } Loading Loading
drivers/scsi/ch.c +17 −21 Original line number Diff line number Diff line Loading @@ -30,7 +30,7 @@ #include <scsi/scsi_ioctl.h> #include <scsi/scsi_host.h> #include <scsi/scsi_device.h> #include <scsi/scsi_request.h> #include <scsi/scsi_eh.h> #include <scsi/scsi_dbg.h> #define CH_DT_MAX 16 Loading Loading @@ -180,17 +180,17 @@ static struct { /* ------------------------------------------------------------------- */ static int ch_find_errno(unsigned char *sense_buffer) static int ch_find_errno(struct scsi_sense_hdr *sshdr) { int i,errno = 0; /* Check to see if additional sense information is available */ if (sense_buffer[7] > 5 && sense_buffer[12] != 0) { if (scsi_sense_valid(sshdr) && sshdr->asc != 0) { for (i = 0; err[i].errno != 0; i++) { if (err[i].sense == sense_buffer[ 2] && err[i].asc == sense_buffer[12] && err[i].ascq == sense_buffer[13]) { if (err[i].sense == sshdr->sense_key && err[i].asc == sshdr->asc && err[i].ascq == sshdr->ascq) { errno = -err[i].errno; break; } Loading @@ -206,12 +206,8 @@ ch_do_scsi(scsi_changer *ch, unsigned char *cmd, void *buffer, unsigned buflength, enum dma_data_direction direction) { int errno, retries = 0, timeout; struct scsi_request *sr; sr = scsi_allocate_request(ch->device, GFP_KERNEL); if (NULL == sr) return -ENOMEM; int errno, retries = 0, timeout, result; struct scsi_sense_hdr sshdr; timeout = (cmd[0] == INITIALIZE_ELEMENT_STATUS) ? timeout_init : timeout_move; Loading @@ -223,16 +219,17 @@ ch_do_scsi(scsi_changer *ch, unsigned char *cmd, __scsi_print_command(cmd); } scsi_wait_req(sr, cmd, buffer, buflength, timeout * HZ, MAX_RETRIES); result = scsi_execute_req(ch->device, cmd, direction, buffer, buflength, &sshdr, timeout * HZ, MAX_RETRIES); dprintk("result: 0x%x\n",sr->sr_result); if (driver_byte(sr->sr_result) & DRIVER_SENSE) { dprintk("result: 0x%x\n",result); if (driver_byte(result) & DRIVER_SENSE) { if (debug) scsi_print_req_sense(ch->name, sr); errno = ch_find_errno(sr->sr_sense_buffer); scsi_print_sense_hdr(ch->name, &sshdr); errno = ch_find_errno(&sshdr); switch(sr->sr_sense_buffer[2] & 0xf) { switch(sshdr.sense_key) { case UNIT_ATTENTION: ch->unit_attention = 1; if (retries++ < 3) Loading @@ -240,7 +237,6 @@ ch_do_scsi(scsi_changer *ch, unsigned char *cmd, break; } } scsi_release_request(sr); return errno; } Loading