diff --git a/drivers/scsi/mpt3sas/mpt3sas_base.c b/drivers/scsi/mpt3sas/mpt3sas_base.c index 5651f7869c167..b484377cfc573 100644 --- a/drivers/scsi/mpt3sas/mpt3sas_base.c +++ b/drivers/scsi/mpt3sas/mpt3sas_base.c @@ -131,6 +131,9 @@ enum mpt3sas_perf_mode { MPT_PERF_MODE_LATENCY = 2, }; + +static DEFINE_RATELIMIT_STATE(dma_map_failed_warning_rlstate, (60 * 60 * HZ), 4); /* max 4 per hour */ + static int _base_wait_on_iocstate(struct MPT3SAS_ADAPTER *ioc, u32 ioc_state, int timeout); @@ -2595,9 +2598,10 @@ _base_check_pcie_native_sgl(struct MPT3SAS_ADAPTER *ioc, /* Get the SG list pointer and info. */ sges_left = scsi_dma_map(scmd); if (sges_left < 0) { - sdev_printk(KERN_ERR, scmd->device, - "scsi_dma_map failed: request for %d bytes!\n", - scsi_bufflen(scmd)); + if (__ratelimit(&dma_map_failed_warning_rlstate)) + sdev_printk(KERN_ERR, scmd->device, + "scsi_dma_map failed in _base_check_pcie_native_sgl: request for %d bytes!\n", + scsi_bufflen(scmd)); return 1; } @@ -2707,10 +2711,11 @@ _base_build_sg_scmd(struct MPT3SAS_ADAPTER *ioc, sg_scmd = scsi_sglist(scmd); sges_left = scsi_dma_map(scmd); if (sges_left < 0) { - sdev_printk(KERN_ERR, scmd->device, - "scsi_dma_map failed: request for %d bytes!\n", - scsi_bufflen(scmd)); - return -ENOMEM; + if (__ratelimit(&dma_map_failed_warning_rlstate)) + sdev_printk(KERN_ERR, scmd->device, + "scsi_dma_map failed in _base_build_sg_scmd: request for %d bytes!\n", + scsi_bufflen(scmd)); + return -ENOMEM; } sg_local = &mpi_request->SGL; @@ -2855,9 +2860,10 @@ _base_build_sg_scmd_ieee(struct MPT3SAS_ADAPTER *ioc, sg_scmd = scsi_sglist(scmd); sges_left = scsi_dma_map(scmd); if (sges_left < 0) { - sdev_printk(KERN_ERR, scmd->device, - "scsi_dma_map failed: request for %d bytes!\n", - scsi_bufflen(scmd)); + if (__ratelimit(&dma_map_failed_warning_rlstate)) + sdev_printk(KERN_ERR, scmd->device, + "scsi_dma_map failed in _base_build_sg_scmd_ieee: request for %d bytes!\n", + scsi_bufflen(scmd)); return -ENOMEM; }