# HG changeset patch # User root@localhost.localdomain # Date 1228697626 -32400 # Node ID d69643eb46702bd6b5f6c5d85bf8699cc14fdd12 # Parent e87f99f8bdfd883817989683d1204bef42a4d8f6 [PVSCSI] Fix sense_len Signed-off-by: James Harper Signed-off-by: Tomonari Horikoshi Signed-off-by: Jun Kamada diff -r e87f99f8bdfd -r d69643eb4670 drivers/xen/scsiback/scsiback.c --- a/drivers/xen/scsiback/scsiback.c Fri Dec 05 11:31:07 2008 +0900 +++ b/drivers/xen/scsiback/scsiback.c Mon Dec 08 09:53:46 2008 +0900 @@ -148,6 +148,7 @@ void scsiback_do_resp_with_sense(char *s 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 *s 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; }