]> xenbits.xensource.com Git - legacy/linux-2.6.18-xen.git/commitdiff
[PVSCSI] Fix sense_len
authorKeir Fraser <keir.fraser@citrix.com>
Tue, 9 Dec 2008 13:02:20 +0000 (13:02 +0000)
committerKeir Fraser <keir.fraser@citrix.com>
Tue, 9 Dec 2008 13:02:20 +0000 (13:02 +0000)
Signed-off-by: James Harper <james.harper@bendigoit.com.au>
Signed-off-by: Tomonari Horikoshi <t.horikoshi@jp.fujitsu.com>
Signed-off-by: Jun Kamada <kama@jp.fujitsu.com>
drivers/xen/scsiback/scsiback.c

index 065eaf843f3b0d3f6492b9fe8f0b17343ba7144e..947247f9b5afc99b69d1917680a9d2f701e77825 100644 (file)
@@ -148,6 +148,7 @@ void scsiback_do_resp_with_sense(char *sense_buffer, int32_t result,
        struct vscsibk_info *info = pending_req->info;
        int notify;
        int more_to_do = 1;
+       struct scsi_sense_hdr sshdr;
        unsigned long flags;
 
        DPRINTK("%s\n",__FUNCTION__);
@@ -161,9 +162,17 @@ void scsiback_do_resp_with_sense(char *sense_buffer, int32_t result,
        ring_res->rqid   = pending_req->rqid;
 
        if (sense_buffer != NULL) {
-               memcpy(ring_res->sense_buffer, sense_buffer,
-                               VSCSIIF_SENSE_BUFFERSIZE);
-               ring_res->sense_len = VSCSIIF_SENSE_BUFFERSIZE;
+               if (scsi_normalize_sense(sense_buffer,
+                       sizeof(sense_buffer), &sshdr)) {
+
+                       int len = 8 + sense_buffer[7];
+
+                       if (len > VSCSIIF_SENSE_BUFFERSIZE)
+                               len = VSCSIIF_SENSE_BUFFERSIZE;
+
+                       memcpy(ring_res->sense_buffer, sense_buffer, len);
+                       ring_res->sense_len = len;
+               }
        } else {
                ring_res->sense_len = 0;
        }