From: "Rafael J. Wysocki" Restore the compatibility with the older code and make it possible to suspend if the kernel command line doesn't contain the "resume=" argument. Signed-off-by: Rafael J. Wysocki Acked-by: Pavel Machek Signed-off-by: Andrew Morton --- kernel/power/user.c | 13 +++++++++---- mm/swapfile.c | 6 ++++-- 2 files changed, 13 insertions(+), 6 deletions(-) diff -puN kernel/power/user.c~swsusp-userland-interface-fix-breakage-with-swap-on-lvm kernel/power/user.c --- devel/kernel/power/user.c~swsusp-userland-interface-fix-breakage-with-swap-on-lvm 2006-02-18 15:37:38.000000000 -0800 +++ devel-akpm/kernel/power/user.c 2006-02-18 15:37:38.000000000 -0800 @@ -51,7 +51,7 @@ static int snapshot_open(struct inode *i filp->private_data = data; memset(&data->handle, 0, sizeof(struct snapshot_handle)); if ((filp->f_flags & O_ACCMODE) == O_RDONLY) { - data->swap = swap_type_of(swsusp_resume_device); + data->swap = swsusp_resume_device ? swap_type_of(swsusp_resume_device) : -1; data->mode = O_RDONLY; } else { data->swap = -1; @@ -256,9 +256,14 @@ static int snapshot_ioctl(struct inode * * User space encodes device types as two-byte values, * so we need to recode them */ - data->swap = swap_type_of(old_decode_dev(arg)); - if (data->swap < 0) - error = -ENODEV; + if (old_decode_dev(arg)) { + data->swap = swap_type_of(old_decode_dev(arg)); + if (data->swap < 0) + error = -ENODEV; + } else { + data->swap = -1; + error = -EINVAL; + } } else { error = -EPERM; } diff -puN mm/swapfile.c~swsusp-userland-interface-fix-breakage-with-swap-on-lvm mm/swapfile.c --- devel/mm/swapfile.c~swsusp-userland-interface-fix-breakage-with-swap-on-lvm 2006-02-18 15:37:38.000000000 -0800 +++ devel-akpm/mm/swapfile.c 2006-02-18 15:37:38.000000000 -0800 @@ -428,14 +428,16 @@ int swap_type_of(dev_t device) { int i; - if (!device) - return -EINVAL; spin_lock(&swap_lock); for (i = 0; i < nr_swapfiles; i++) { struct inode *inode; if (!(swap_info[i].flags & SWP_WRITEOK)) continue; + if (!device) { + spin_unlock(&swap_lock); + return i; + } inode = swap_info->swap_file->f_dentry->d_inode; if (S_ISBLK(inode->i_mode) && device == MKDEV(imajor(inode), iminor(inode))) { _