if (noresume)
                return 0;
 
-       /*
-        * We can't depend on SCSI devices being available after loading one of
-        * their modules if scsi_complete_async_scans() is not called and the
-        * resume device usually is a SCSI one.
-        */
-       scsi_complete_async_scans();
-
        /*
         * name_to_dev_t() below takes a sysfs buffer mutex when sysfs
         * is configured into the kernel. Since the regular hibernate
         * here to avoid lockdep complaining.
         */
        mutex_lock_nested(&pm_mutex, SINGLE_DEPTH_NESTING);
+
+       if (swsusp_resume_device)
+               goto Check_image;
+
+       if (!strlen(resume_file)) {
+               error = -ENOENT;
+               goto Unlock;
+       }
+
+       pr_debug("PM: Checking image partition %s\n", resume_file);
+
+       /* Check if the device is there */
+       swsusp_resume_device = name_to_dev_t(resume_file);
        if (!swsusp_resume_device) {
-               if (!strlen(resume_file)) {
-                       mutex_unlock(&pm_mutex);
-                       return -ENOENT;
-               }
                /*
                 * Some device discovery might still be in progress; we need
                 * to wait for this to finish.
                 */
                wait_for_device_probe();
+               /*
+                * We can't depend on SCSI devices being available after loading
+                * one of their modules until scsi_complete_async_scans() is
+                * called and the resume device usually is a SCSI one.
+                */
+               scsi_complete_async_scans();
+
                swsusp_resume_device = name_to_dev_t(resume_file);
-               pr_debug("PM: Resume from partition %s\n", resume_file);
-       } else {
-               pr_debug("PM: Resume from partition %d:%d\n",
-                               MAJOR(swsusp_resume_device),
-                               MINOR(swsusp_resume_device));
+               if (!swsusp_resume_device) {
+                       error = -ENODEV;
+                       goto Unlock;
+               }
        }
 
-       if (noresume) {
-               /**
-                * FIXME: If noresume is specified, we need to find the
-                * partition and reset it back to normal swap space.
-                */
-               mutex_unlock(&pm_mutex);
-               return 0;
-       }
+ Check_image:
+       pr_debug("PM: Resume from partition %d:%d\n",
+               MAJOR(swsusp_resume_device), MINOR(swsusp_resume_device));
 
        pr_debug("PM: Checking hibernation image.\n");
        error = swsusp_check();