diff options
author | Rafael J. Wysocki <rjw@sisk.pl> | 2006-12-06 23:34:15 -0500 |
---|---|---|
committer | Linus Torvalds <torvalds@woody.osdl.org> | 2006-12-07 11:39:27 -0500 |
commit | 37b2ba12df88f0e29f2d52aaf1ab22789377d5b5 (patch) | |
tree | 38a05add5793bb82be9afdb9fa81d48ccf70da1f /kernel/power/user.c | |
parent | ecbd0da1eced957e0cbb611b4a4cb5b0cf63ba31 (diff) |
[PATCH] swsusp: add ioctl for swap files support
To be able to use swap files as suspend storage from the userland suspend
tools we need an additional ioctl() that will allow us to provide the kernel
with both the swap header's offset and the identification of the resume
partition.
The new ioctl() should be regarded as a replacement for the
SNAPSHOT_SET_SWAP_FILE ioctl() that from now on will be considered as
obsolete, but has to stay for backwards compatibility of the interface.
Signed-off-by: Rafael J. Wysocki <rjw@sisk.pl>
Acked-by: Pavel Machek <pavel@ucw.cz>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Diffstat (limited to 'kernel/power/user.c')
-rw-r--r-- | kernel/power/user.c | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/kernel/power/user.c b/kernel/power/user.c index f0b7ef8bdd74..05c58a2c0dd4 100644 --- a/kernel/power/user.c +++ b/kernel/power/user.c | |||
@@ -343,6 +343,37 @@ OutS3: | |||
343 | } | 343 | } |
344 | break; | 344 | break; |
345 | 345 | ||
346 | case SNAPSHOT_SET_SWAP_AREA: | ||
347 | if (data->bitmap) { | ||
348 | error = -EPERM; | ||
349 | } else { | ||
350 | struct resume_swap_area swap_area; | ||
351 | dev_t swdev; | ||
352 | |||
353 | error = copy_from_user(&swap_area, (void __user *)arg, | ||
354 | sizeof(struct resume_swap_area)); | ||
355 | if (error) { | ||
356 | error = -EFAULT; | ||
357 | break; | ||
358 | } | ||
359 | |||
360 | /* | ||
361 | * User space encodes device types as two-byte values, | ||
362 | * so we need to recode them | ||
363 | */ | ||
364 | swdev = old_decode_dev(swap_area.dev); | ||
365 | if (swdev) { | ||
366 | offset = swap_area.offset; | ||
367 | data->swap = swap_type_of(swdev, offset); | ||
368 | if (data->swap < 0) | ||
369 | error = -ENODEV; | ||
370 | } else { | ||
371 | data->swap = -1; | ||
372 | error = -EINVAL; | ||
373 | } | ||
374 | } | ||
375 | break; | ||
376 | |||
346 | default: | 377 | default: |
347 | error = -ENOTTY; | 378 | error = -ENOTTY; |
348 | 379 | ||