don't leak dma maps in mptscsih_flush_running_cmds
Subsystems (2)
PATCH 1/1 don't leak dma maps in mptscsih_flush_running_cmds
the scsi_device_online() check is bogus, we need to unmap for all commands, not online for devices that are online.
drivers/message/fusion/linux_compat.h +0 -11
@@ -3,16 +3,5 @@#ifndef FUSION_LINUX_COMPAT_H #define FUSION_LINUX_COMPAT_H -#include <linux/version.h> -#include <scsi/scsi_device.h> - -#if (LINUX_VERSION_CODE <KERNEL_VERSION (2 ,6 ,6 )) -static int inline scsi_device_online (struct scsi_device *sdev) -{ -return sdev->online; -} -#endif - -/*}-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*/ #endif /* _LINUX_COMPAT_H */
drivers/message/fusion/mptscsih.c +11 -12
@@ -995,19 +994,18 @@* Do OS callback * Free driver resources (chain, msg buffers) */ -if (scsi_device_online (SCpnt->device)) { -if (SCpnt->use_sg) { -pci_unmap_sg (hd->ioc->pcidev, - (struct scatterlist *) SCpnt->request_buffer, - SCpnt->use_sg, - SCpnt->sc_data_direction); - }else if (SCpnt->request_bufflen) { -pci_unmap_single (hd->ioc->pcidev, - SCpnt->SCp.dma_handle, - SCpnt->request_bufflen, - SCpnt->sc_data_direction); - } +if (SCpnt->use_sg) { +pci_unmap_sg (hd->ioc->pcidev, + (struct scatterlist *) SCpnt->request_buffer, + SCpnt->use_sg, + SCpnt->sc_data_direction); + }else if (SCpnt->request_bufflen) { +pci_unmap_single (hd->ioc->pcidev, + SCpnt->SCp.dma_handle, + SCpnt->request_bufflen, + SCpnt->sc_data_direction); } + SCpnt->result =DID_RESET <<16 ; SCpnt->host_scribble =NULL ;