Re: [PATCH] SCSI: fix crashes in sd and sr runtime PM

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hello Alan,
Thank you:

The patch appears to work for me, too.

Applied on top of Debian kernel "4.4-1~exp1" I finally have a kernel boot again!
(And maybe this will also make the Intel ( i7-2677M IGP) video bugs
disappear...)

Best regards,
Erich

On Wed, Jan 20, 2016 at 5:26 PM, Alan Stern <stern@xxxxxxxxxxxxxxxxxxx> wrote:
> Runtime suspend during driver probe and removal can cause problems.
> The driver's runtime_suspend or runtime_resume callbacks may invoked
> before the driver has finished binding to the device or after the
> driver has unbound from the device.
>
> This problem shows up with the sd and sr drivers, and can cause disk
> or CD/DVD drives to become unusable as a result.  The fix is simple.
> The drivers store a pointer to the scsi_disk or scsi_cd structure as
> their private device data when probing is finished, so we simply have
> to be sure to clear the private data during removal and test it during
> runtime suspend/resume.
>
> This fixes <https://bugs.debian.org/801925>.
>
> Signed-off-by: Alan Stern <stern@xxxxxxxxxxxxxxxxxxx>
> Reported-by: Paul Menzel <paul.menzel@xxxxxxxxxxxxxx>
> Reported-by: Erich Schubert <erich@xxxxxxxxxx>
> Reported-by: Alexandre Rossi <alexandre.rossi@xxxxxxxxx>
> Tested-by: Paul Menzel <paul.menzel@xxxxxxxxxxxxxx>
> CC: "James E.J. Bottomley" <JBottomley@xxxxxxxx>
> CC: Ben Hutchings <ben@xxxxxxxxxxxxxxx>
> CC: <stable@xxxxxxxxxxxxxxx>
>
> ---
>
>
> [as1795]
>
>
>  drivers/scsi/sd.c |    7 +++++--
>  drivers/scsi/sr.c |    4 ++++
>  2 files changed, 9 insertions(+), 2 deletions(-)
>
> Index: usb-4.4/drivers/scsi/sd.c
> ===================================================================
> --- usb-4.4.orig/drivers/scsi/sd.c
> +++ usb-4.4/drivers/scsi/sd.c
> @@ -3275,8 +3275,8 @@ static int sd_suspend_common(struct devi
>         struct scsi_disk *sdkp = dev_get_drvdata(dev);
>         int ret = 0;
>
> -       if (!sdkp)
> -               return 0;       /* this can happen */
> +       if (!sdkp)      /* E.g.: runtime suspend following sd_remove() */
> +               return 0;
>
>         if (sdkp->WCE && sdkp->media_present) {
>                 sd_printk(KERN_NOTICE, sdkp, "Synchronizing SCSI cache\n");
> @@ -3315,6 +3315,9 @@ static int sd_resume(struct device *dev)
>  {
>         struct scsi_disk *sdkp = dev_get_drvdata(dev);
>
> +       if (!sdkp)      /* E.g.: runtime resume at the start of sd_probe() */
> +               return 0;
> +
>         if (!sdkp->device->manage_start_stop)
>                 return 0;
>
> Index: usb-4.4/drivers/scsi/sr.c
> ===================================================================
> --- usb-4.4.orig/drivers/scsi/sr.c
> +++ usb-4.4/drivers/scsi/sr.c
> @@ -144,6 +144,9 @@ static int sr_runtime_suspend(struct dev
>  {
>         struct scsi_cd *cd = dev_get_drvdata(dev);
>
> +       if (!cd)        /* E.g.: runtime suspend following sr_remove() */
> +               return 0;
> +
>         if (cd->media_present)
>                 return -EBUSY;
>         else
> @@ -985,6 +988,7 @@ static int sr_remove(struct device *dev)
>         scsi_autopm_get_device(cd->device);
>
>         del_gendisk(cd->disk);
> +       dev_set_drvdata(dev, NULL);
>
>         mutex_lock(&sr_ref_mutex);
>         kref_put(&cd->kref, sr_kref_release);
>
--
To unsubscribe from this list: send the line "unsubscribe linux-scsi" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html



[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [SCSI Target Devel]     [Linux SCSI Target Infrastructure]     [Kernel Newbies]     [IDE]     [Security]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux ATA RAID]     [Linux IIO]     [Samba]     [Device Mapper]
  Powered by Linux