From fc1d3133d7ffc739f2356eb5d30c2994d585e7bb Mon Sep 17 00:00:00 2001 From: Donald Buczek <buczek@molgen.mpg.de> Date: Sun, 19 Feb 2023 13:55:09 +0100 Subject: [PATCH] scsi: mpt3sas: Rate-limit scsi_dma_map() error messages --- drivers/scsi/mpt3sas/mpt3sas_base.c | 26 ++++++++++++++++---------- 1 file changed, 16 insertions(+), 10 deletions(-) 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; }