On Wednesday, 27 September 2006 22:55, Rafael J. Wysocki wrote: > On Wednesday, 27 September 2006 22:45, Pavel Machek wrote: > > Hi! > > > > > 1. The name of the SNAPSHOT_SET_SWAP_FILE ioctl is confusing after the > > > support > > > for "real" swap files has been added to swsusp. Change it to > > > SNAPSHOT_SET_SWAP_DEV (the number doesn't change). > > > > I'm not sure this is good idea. Yes, name is confusing, but userland > > parts are already using it... so it may lead to even bigger confusion. > > Okay, no change, then. :-)
Updated: --- kernel/power/power.h | 13 ++++++++++++- kernel/power/user.c | 31 +++++++++++++++++++++++++++++++ 2 files changed, 43 insertions(+), 1 deletion(-) Index: linux-2.6.18-mm1/kernel/power/power.h =================================================================== --- linux-2.6.18-mm1.orig/kernel/power/power.h +++ linux-2.6.18-mm1/kernel/power/power.h @@ -119,7 +119,18 @@ extern int snapshot_image_loaded(struct #define SNAPSHOT_SET_SWAP_FILE _IOW(SNAPSHOT_IOC_MAGIC, 10, unsigned int) #define SNAPSHOT_S2RAM _IO(SNAPSHOT_IOC_MAGIC, 11) #define SNAPSHOT_PMOPS _IOW(SNAPSHOT_IOC_MAGIC, 12, unsigned int) -#define SNAPSHOT_IOC_MAXNR 12 +#define SNAPSHOT_SET_SWAP_AREA _IOW(SNAPSHOT_IOC_MAGIC, 13, void *) +#define SNAPSHOT_IOC_MAXNR 13 + +/* + * This structure is used to pass the values needed for the identification + * of the resume swap area from a user space to the kernel via the + * SNAPSHOT_SET_SWAP_AREA ioctl + */ +struct resume_swap_area { + u_int16_t dev; + loff_t offset; +} __attribute__((packed)); #define PMOPS_PREPARE 1 #define PMOPS_ENTER 2 Index: linux-2.6.18-mm1/kernel/power/user.c =================================================================== --- linux-2.6.18-mm1.orig/kernel/power/user.c +++ linux-2.6.18-mm1/kernel/power/user.c @@ -343,6 +343,37 @@ OutS3: } break; + case SNAPSHOT_SET_SWAP_AREA: + if (data->bitmap) { + error = -EPERM; + } else { + struct resume_swap_area swap_area; + dev_t swdev; + + error = copy_from_user(&swap_area, (void __user *)arg, + sizeof(struct resume_swap_area)); + if (error) { + error = -EFAULT; + break; + } + + /* + * User space encodes device types as two-byte values, + * so we need to recode them + */ + swdev = old_decode_dev(swap_area.dev); + if (swdev) { + offset = swap_area.offset; + data->swap = swap_type_of(swdev, offset); + if (data->swap < 0) + error = -ENODEV; + } else { + data->swap = -1; + error = -EINVAL; + } + } + break; + default: error = -ENOTTY; ------------------------------------------------------------------------- Take Surveys. Earn Cash. Influence the Future of IT Join SourceForge.net's Techsay panel and you'll get the chance to share your opinions on IT & business topics through brief surveys -- and earn cash http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV _______________________________________________ Suspend-devel mailing list Suspend-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/suspend-devel