Merge branch '6.7/scsi-staging' into 6.7/scsi-fixes
authorMartin K. Petersen <martin.petersen@oracle.com>
Tue, 14 Nov 2023 16:40:40 +0000 (11:40 -0500)
committerMartin K. Petersen <martin.petersen@oracle.com>
Tue, 14 Nov 2023 16:40:40 +0000 (11:40 -0500)
Pull in queued fixes for 6.7

Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
1  2 
drivers/scsi/qla2xxx/qla_os.c
drivers/scsi/sd.c

Simple merge
index 530918cbfce2d1840feec8dcca2dcc7479257452,3ef3b00397fe2c0eaeacd316ebeb309b9bc4e9aa..fa00dd503cbf618b066eac2001d60a3dc59fd1ed
@@@ -3853,28 -3779,18 +3858,27 @@@ static void sd_shutdown(struct device *
  
        if (sdkp->WCE && sdkp->media_present) {
                sd_printk(KERN_NOTICE, sdkp, "Synchronizing SCSI cache\n");
-               sd_sync_cache(sdkp, NULL);
+               sd_sync_cache(sdkp);
        }
  
 -      if (system_state != SYSTEM_RESTART && sdkp->device->manage_start_stop) {
 +      if ((system_state != SYSTEM_RESTART &&
 +           sdkp->device->manage_system_start_stop) ||
 +          (system_state == SYSTEM_POWER_OFF &&
 +           sdkp->device->manage_shutdown)) {
                sd_printk(KERN_NOTICE, sdkp, "Stopping disk\n");
                sd_start_stop_device(sdkp, 0);
        }
  }
  
 -static int sd_suspend_common(struct device *dev, bool ignore_stop_errors)
 +static inline bool sd_do_start_stop(struct scsi_device *sdev, bool runtime)
 +{
 +      return (sdev->manage_system_start_stop && !runtime) ||
 +              (sdev->manage_runtime_start_stop && runtime);
 +}
 +
 +static int sd_suspend_common(struct device *dev, bool runtime)
  {
        struct scsi_disk *sdkp = dev_get_drvdata(dev);
-       struct scsi_sense_hdr sshdr;
        int ret = 0;
  
        if (!sdkp)      /* E.g.: runtime suspend following sd_remove() */
        if (sdkp->WCE && sdkp->media_present) {
                if (!sdkp->device->silence_suspend)
                        sd_printk(KERN_NOTICE, sdkp, "Synchronizing SCSI cache\n");
-               ret = sd_sync_cache(sdkp, &sshdr);
-               if (ret) {
-                       /* ignore OFFLINE device */
-                       if (ret == -ENODEV)
-                               return 0;
-                       if (!scsi_sense_valid(&sshdr) ||
-                           sshdr.sense_key != ILLEGAL_REQUEST)
-                               return ret;
+               ret = sd_sync_cache(sdkp);
+               /* ignore OFFLINE device */
+               if (ret == -ENODEV)
+                       return 0;
  
-                       /*
-                        * sshdr.sense_key == ILLEGAL_REQUEST means this drive
-                        * doesn't support sync. There's not much to do and
-                        * suspend shouldn't fail.
-                        */
-                       ret = 0;
-               }
+               if (ret)
+                       return ret;
        }
  
 -      if (sdkp->device->manage_start_stop) {
 +      if (sd_do_start_stop(sdkp->device, runtime)) {
                if (!sdkp->device->silence_suspend)
                        sd_printk(KERN_NOTICE, sdkp, "Stopping disk\n");
                /* an error is not worth aborting a system sleep */