Skip to content

Commit 1c69d3b

Browse files
firstbreadmartinkpetersen
authored andcommitted
Revert "SCSI: Fix NULL pointer dereference in runtime PM"
This reverts commit 49718f0 ("SCSI: Fix NULL pointer dereference in runtime PM") The old commit may lead to a issue that blk_{pre|post}_runtime_suspend and blk_{pre|post}_runtime_resume may not be called in pairs. Take sr device as example, when sr device goes to runtime suspend, blk_{pre|post}_runtime_suspend will be called since sr device defined pm->runtime_suspend. But blk_{pre|post}_runtime_resume will not be called since sr device doesn't have pm->runtime_resume. so, sr device can not resume correctly anymore. More discussion can be found from below link. http://marc.info/?l=linux-scsi&m=144163730531875&w=2 Signed-off-by: Ken Xue <Ken.Xue@amd.com> Acked-by: Alan Stern <stern@rowland.harvard.edu> Cc: Xiangliang Yu <Xiangliang.Yu@amd.com> Cc: James E.J. Bottomley <JBottomley@odin.com> Cc: Jens Axboe <axboe@kernel.dk> Cc: Michael Terry <Michael.terry@canonical.com> Cc: stable@vger.kernel.org Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
1 parent 527e931 commit 1c69d3b

1 file changed

Lines changed: 10 additions & 10 deletions

File tree

drivers/scsi/scsi_pm.c

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -219,13 +219,13 @@ static int sdev_runtime_suspend(struct device *dev)
219219
struct scsi_device *sdev = to_scsi_device(dev);
220220
int err = 0;
221221

222-
if (pm && pm->runtime_suspend) {
223-
err = blk_pre_runtime_suspend(sdev->request_queue);
224-
if (err)
225-
return err;
222+
err = blk_pre_runtime_suspend(sdev->request_queue);
223+
if (err)
224+
return err;
225+
if (pm && pm->runtime_suspend)
226226
err = pm->runtime_suspend(dev);
227-
blk_post_runtime_suspend(sdev->request_queue, err);
228-
}
227+
blk_post_runtime_suspend(sdev->request_queue, err);
228+
229229
return err;
230230
}
231231

@@ -248,11 +248,11 @@ static int sdev_runtime_resume(struct device *dev)
248248
const struct dev_pm_ops *pm = dev->driver ? dev->driver->pm : NULL;
249249
int err = 0;
250250

251-
if (pm && pm->runtime_resume) {
252-
blk_pre_runtime_resume(sdev->request_queue);
251+
blk_pre_runtime_resume(sdev->request_queue);
252+
if (pm && pm->runtime_resume)
253253
err = pm->runtime_resume(dev);
254-
blk_post_runtime_resume(sdev->request_queue, err);
255-
}
254+
blk_post_runtime_resume(sdev->request_queue, err);
255+
256256
return err;
257257
}
258258

0 commit comments

Comments
 (0)