PM: hibernate: factor out a helper to find the resume device
Split the logic to find the resume device out software_resume and into a separate helper to start unwindig the convoluted goto logic. Signed-off-by: Christoph Hellwig <hch@lst.de> Acked-by: Rafael J. Wysocki <rafael@kernel.org> Link: https://lore.kernel.org/r/20230531125535.676098-3-hch@lst.de Signed-off-by: Jens Axboe <axboe@kernel.dk>
This commit is contained in:
Родитель
aa5f6ed8c2
Коммит
02b42d58f3
|
@ -910,6 +910,41 @@ unlock:
|
|||
}
|
||||
EXPORT_SYMBOL_GPL(hibernate_quiet_exec);
|
||||
|
||||
static int find_resume_device(void)
|
||||
{
|
||||
if (!strlen(resume_file))
|
||||
return -ENOENT;
|
||||
|
||||
pm_pr_dbg("Checking hibernation image partition %s\n", resume_file);
|
||||
|
||||
if (resume_delay) {
|
||||
pr_info("Waiting %dsec before reading resume device ...\n",
|
||||
resume_delay);
|
||||
ssleep(resume_delay);
|
||||
}
|
||||
|
||||
/* Check if the device is there */
|
||||
swsusp_resume_device = name_to_dev_t(resume_file);
|
||||
if (swsusp_resume_device)
|
||||
return 0;
|
||||
|
||||
/*
|
||||
* Some device discovery might still be in progress; we need to wait for
|
||||
* this to finish.
|
||||
*/
|
||||
wait_for_device_probe();
|
||||
if (resume_wait) {
|
||||
while (!(swsusp_resume_device = name_to_dev_t(resume_file)))
|
||||
msleep(10);
|
||||
async_synchronize_full();
|
||||
}
|
||||
|
||||
swsusp_resume_device = name_to_dev_t(resume_file);
|
||||
if (!swsusp_resume_device)
|
||||
return -ENODEV;
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* software_resume - Resume from a saved hibernation image.
|
||||
*
|
||||
|
@ -949,45 +984,12 @@ static int software_resume(void)
|
|||
|
||||
snapshot_test = false;
|
||||
|
||||
if (swsusp_resume_device)
|
||||
goto Check_image;
|
||||
|
||||
if (!strlen(resume_file)) {
|
||||
error = -ENOENT;
|
||||
goto Unlock;
|
||||
}
|
||||
|
||||
pm_pr_dbg("Checking hibernation image partition %s\n", resume_file);
|
||||
|
||||
if (resume_delay) {
|
||||
pr_info("Waiting %dsec before reading resume device ...\n",
|
||||
resume_delay);
|
||||
ssleep(resume_delay);
|
||||
}
|
||||
|
||||
/* Check if the device is there */
|
||||
swsusp_resume_device = name_to_dev_t(resume_file);
|
||||
if (!swsusp_resume_device) {
|
||||
/*
|
||||
* Some device discovery might still be in progress; we need
|
||||
* to wait for this to finish.
|
||||
*/
|
||||
wait_for_device_probe();
|
||||
|
||||
if (resume_wait) {
|
||||
while ((swsusp_resume_device = name_to_dev_t(resume_file)) == 0)
|
||||
msleep(10);
|
||||
async_synchronize_full();
|
||||
}
|
||||
|
||||
swsusp_resume_device = name_to_dev_t(resume_file);
|
||||
if (!swsusp_resume_device) {
|
||||
error = -ENODEV;
|
||||
error = find_resume_device();
|
||||
if (error)
|
||||
goto Unlock;
|
||||
}
|
||||
}
|
||||
|
||||
Check_image:
|
||||
pm_pr_dbg("Hibernation image partition %d:%d present\n",
|
||||
MAJOR(swsusp_resume_device), MINOR(swsusp_resume_device));
|
||||
|
||||
|
|
Загрузка…
Ссылка в новой задаче