|
@@ -839,7 +839,7 @@ static void
|
|
|
do_scsi_nolinuxstat(struct uiscmdrsp *cmdrsp, struct scsi_cmnd *scsicmd)
|
|
|
{
|
|
|
struct scsi_device *scsidev;
|
|
|
- unsigned char buf[36];
|
|
|
+ unsigned char *buf;
|
|
|
struct scatterlist *sg;
|
|
|
unsigned int i;
|
|
|
char *this_page;
|
|
@@ -854,6 +854,10 @@ do_scsi_nolinuxstat(struct uiscmdrsp *cmdrsp, struct scsi_cmnd *scsicmd)
|
|
|
if (cmdrsp->scsi.no_disk_result == 0)
|
|
|
return;
|
|
|
|
|
|
+ buf = kzalloc(sizeof(char) * 36, GFP_KERNEL);
|
|
|
+ if (!buf)
|
|
|
+ return;
|
|
|
+
|
|
|
/* Linux scsi code wants a device at Lun 0
|
|
|
* to issue report luns, but we don't want
|
|
|
* a disk there so we'll present a processor
|
|
@@ -865,6 +869,7 @@ do_scsi_nolinuxstat(struct uiscmdrsp *cmdrsp, struct scsi_cmnd *scsicmd)
|
|
|
if (scsi_sg_count(scsicmd) == 0) {
|
|
|
memcpy(scsi_sglist(scsicmd), buf,
|
|
|
cmdrsp->scsi.bufflen);
|
|
|
+ kfree(buf);
|
|
|
return;
|
|
|
}
|
|
|
|
|
@@ -876,6 +881,7 @@ do_scsi_nolinuxstat(struct uiscmdrsp *cmdrsp, struct scsi_cmnd *scsicmd)
|
|
|
memcpy(this_page, buf + bufind, sg[i].length);
|
|
|
kunmap_atomic(this_page_orig);
|
|
|
}
|
|
|
+ kfree(buf);
|
|
|
} else {
|
|
|
devdata = (struct visorhba_devdata *)scsidev->host->hostdata;
|
|
|
for_each_vdisk_match(vdisk, devdata, scsidev) {
|