]> www.infradead.org Git - users/dwmw2/linux.git/commitdiff
scsi: core: sd: Add silence_suspend flag to suppress some PM messages
authorAdrian Hunter <adrian.hunter@intel.com>
Mon, 28 Feb 2022 11:36:51 +0000 (13:36 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Fri, 8 Apr 2022 11:57:20 +0000 (13:57 +0200)
commit af4edb1d50c6d1044cb34bc43621411b7ba2cffe upstream.

Kernel messages produced during runtime PM can cause a never-ending cycle
because user space utilities (e.g. journald or rsyslog) write the messages
back to storage, causing runtime resume, more messages, and so on.

Messages that tell of things that are expected to happen are arguably
unnecessary, so add a flag to suppress them. This flag is used by the UFS
driver.

Link: https://lore.kernel.org/r/20220228113652.970857-2-adrian.hunter@intel.com
Cc: stable@vger.kernel.org
Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/scsi/scsi_error.c
drivers/scsi/sd.c
include/scsi/scsi_device.h

index 60a6ae9d1219f9e4ca34d3b5ec750c0ad769e552..a75499616f5ef70ac967fd3b5563712f569e74cb 100644 (file)
@@ -484,8 +484,13 @@ static void scsi_report_sense(struct scsi_device *sdev,
 
                if (sshdr->asc == 0x29) {
                        evt_type = SDEV_EVT_POWER_ON_RESET_OCCURRED;
-                       sdev_printk(KERN_WARNING, sdev,
-                                   "Power-on or device reset occurred\n");
+                       /*
+                        * Do not print message if it is an expected side-effect
+                        * of runtime PM.
+                        */
+                       if (!sdev->silence_suspend)
+                               sdev_printk(KERN_WARNING, sdev,
+                                           "Power-on or device reset occurred\n");
                }
 
                if (sshdr->asc == 0x2a && sshdr->ascq == 0x01) {
index 62eb9921cc947b8cb8e083ea0491434ca4fc0455..66056806159a65ef96522d1a3bf43d7fcfd0fbc7 100644 (file)
@@ -3752,7 +3752,8 @@ static int sd_suspend_common(struct device *dev, bool ignore_stop_errors)
                return 0;
 
        if (sdkp->WCE && sdkp->media_present) {
-               sd_printk(KERN_NOTICE, sdkp, "Synchronizing SCSI cache\n");
+               if (!sdkp->device->silence_suspend)
+                       sd_printk(KERN_NOTICE, sdkp, "Synchronizing SCSI cache\n");
                ret = sd_sync_cache(sdkp, &sshdr);
 
                if (ret) {
@@ -3774,7 +3775,8 @@ static int sd_suspend_common(struct device *dev, bool ignore_stop_errors)
        }
 
        if (sdkp->device->manage_start_stop) {
-               sd_printk(KERN_NOTICE, sdkp, "Stopping disk\n");
+               if (!sdkp->device->silence_suspend)
+                       sd_printk(KERN_NOTICE, sdkp, "Stopping disk\n");
                /* an error is not worth aborting a system sleep */
                ret = sd_start_stop_device(sdkp, 0);
                if (ignore_stop_errors)
index 647c53b2610514eb5f6c8fa34e8df2261895df8b..57e3e239a1fce64972b82dfa1c43028888edd1e9 100644 (file)
@@ -206,6 +206,7 @@ struct scsi_device {
        unsigned rpm_autosuspend:1;     /* Enable runtime autosuspend at device
                                         * creation time */
        unsigned ignore_media_change:1; /* Ignore MEDIA CHANGE on resume */
+       unsigned silence_suspend:1;     /* Do not print runtime PM related messages */
 
        unsigned int queue_stopped;     /* request queue is quiesced */
        bool offline_already;           /* Device offline message logged */