- allocate a driver private area sense buffer, and set IO
    to transfer sense into that buffer.
  - at end of command execution copy the sense information
    using scsi_eh_cpy_sense().

Signed-off-by: Boaz Harrosh <[EMAIL PROTECTED]>
---
 drivers/scsi/ultrastor.c |   14 +++++++++-----
 1 files changed, 9 insertions(+), 5 deletions(-)

diff --git a/drivers/scsi/ultrastor.c b/drivers/scsi/ultrastor.c
index f385dce..b2ccb48 100644
--- a/drivers/scsi/ultrastor.c
+++ b/drivers/scsi/ultrastor.c
@@ -199,6 +199,7 @@ struct mscp {
   void (*done) (struct scsi_cmnd *);
   struct scsi_cmnd *SCint;
   ultrastor_sg_list sglist[ULTRASTOR_24F_MAX_SG]; /* use larger size for 24F */
+  u8 sense_buffer[SCSI_SENSE_BUFFERSIZE];
 };
 
 
@@ -743,19 +744,20 @@ static int ultrastor_queuecommand(struct scsi_cmnd *SCpnt,
     } else {
        /* Unset scatter/gather flag in SCSI command packet */
        my_mscp->sg = FALSE;
-       my_mscp->transfer_data = isa_virt_to_bus(scsi_sglist(SCpnt));
-       my_mscp->transfer_data_length = scsi_bufflen(SCpnt);
+       my_mscp->transfer_data = 0;
+       my_mscp->transfer_data_length = 0;
     }
     my_mscp->command_link = 0;         /*???*/
     my_mscp->scsi_command_link_id = 0; /*???*/
-    my_mscp->length_of_sense_byte = SCSI_SENSE_BUFFERSIZE;
     my_mscp->length_of_scsi_cdbs = SCpnt->cmd_len;
     memcpy(my_mscp->scsi_cdbs, SCpnt->cmnd, my_mscp->length_of_scsi_cdbs);
     my_mscp->adapter_status = 0;
     my_mscp->target_status = 0;
-    my_mscp->sense_data = isa_virt_to_bus(&SCpnt->sense_buffer);
     my_mscp->done = done;
     my_mscp->SCint = SCpnt;
+    memset(my_mscp->sense_buffer, 0, SCSI_SENSE_BUFFERSIZE);
+    my_mscp->length_of_sense_byte = SCSI_SENSE_BUFFERSIZE;
+    my_mscp->sense_data = isa_virt_to_bus(my_mscp->sense_buffer);
     SCpnt->host_scribble = (unsigned char *)my_mscp;
 
     /* Find free OGM slot.  On 24F, look for OGM status byte == 0.
@@ -1140,7 +1142,9 @@ static void ultrastor_interrupt(void *dev_id)
        status = DID_TIME_OUT << 16;
        break;
       }
-
+    if (mscp->sense_buffer[0])
+       scsi_eh_cpy_sense(SCtmp, mscp->sense_buffer,
+                                               sizeof(mscp->sense_buffer));
     SCtmp->result = status | mscp->target_status;
 
     SCtmp->host_scribble = NULL;
-- 
1.5.3.3

-
To unsubscribe from this list: send the line "unsubscribe linux-scsi" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to