/* * We need to ensure we use the signature page that's currently on disk, * so as to not remove the image header. Post-atomic-restore, the orig sig * page will be empty, so we can use that as our method of knowing that we * need to load the on-disk signature and not use the non-image sig in * memory. (We're going to powerdown after writing the change, so it's safe. */ int toi_bio_mark_resume_attempted(int flag) { toi_message(TOI_IO, TOI_VERBOSE, 0, "Make resume attempted = %d.", flag); if (!toi_orig_sig_page) { forget_signature_page(); get_signature_page(); } toi_sig_data->resumed_before = flag; return toi_bio_ops.bdev_page_io(WRITE, resume_block_device, resume_firstblock, virt_to_page(toi_cur_sig_page)); }
int toi_bio_scan_for_image(int quiet) { struct block_device *bdev; char default_name[255] = ""; if (!quiet) printk(KERN_DEBUG "Scanning swap devices for TuxOnIce " "signature...\n"); for (bdev = next_bdev_of_type(NULL, "swap"); bdev; bdev = next_bdev_of_type(bdev, "swap")) { int result; char name[255] = ""; sprintf(name, "%u:%u", MAJOR(bdev->bd_dev), MINOR(bdev->bd_dev)); if (!quiet) printk(KERN_DEBUG "- Trying %s.\n", name); resume_block_device = bdev; resume_dev_t = bdev->bd_dev; result = toi_check_for_signature(); resume_block_device = NULL; resume_dev_t = MKDEV(0, 0); if (!default_name[0]) strcpy(default_name, name); if (result == 1) { /* Got one! */ strcpy(resume_file, name); next_bdev_of_type(bdev, NULL); if (!quiet) printk(KERN_DEBUG " ==> Image found on %s.\n", resume_file); return 1; } forget_signature_page(); } if (!quiet) printk(KERN_DEBUG "TuxOnIce scan: No image found.\n"); strcpy(resume_file, default_name); return 0; }