diff options
| author | Rafael J. Wysocki <rjw@sisk.pl> | 2006-12-06 23:34:13 -0500 |
|---|---|---|
| committer | Linus Torvalds <torvalds@woody.osdl.org> | 2006-12-07 11:39:27 -0500 |
| commit | ecbd0da1eced957e0cbb611b4a4cb5b0cf63ba31 (patch) | |
| tree | c7756453fa284eb1cf27b914be9ea9a8303b87d4 | |
| parent | 9a154d9d95b7b9845938242f5c62505b3cab5bcd (diff) | |
[PATCH] swsusp: document support for swap files
Document the "resume_offset=" command line parameter as well as the way in
which swap files are supported by swsusp.
Signed-off-by: Rafael J. Wysocki <rjw@sisk.pl>
Cc: Pavel Machek <pavel@ucw.cz>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
| -rw-r--r-- | Documentation/kernel-parameters.txt | 6 | ||||
| -rw-r--r-- | Documentation/power/swsusp-and-swap-files.txt | 54 | ||||
| -rw-r--r-- | Documentation/power/swsusp.txt | 18 |
3 files changed, 65 insertions, 13 deletions
diff --git a/Documentation/kernel-parameters.txt b/Documentation/kernel-parameters.txt index 2ddc43ef4ded..1e183bd33d71 100644 --- a/Documentation/kernel-parameters.txt +++ b/Documentation/kernel-parameters.txt | |||
| @@ -1370,6 +1370,12 @@ and is between 256 and 4096 characters. It is defined in the file | |||
| 1370 | resume= [SWSUSP] | 1370 | resume= [SWSUSP] |
| 1371 | Specify the partition device for software suspend | 1371 | Specify the partition device for software suspend |
| 1372 | 1372 | ||
| 1373 | resume_offset= [SWSUSP] | ||
| 1374 | Specify the offset from the beginning of the partition | ||
| 1375 | given by "resume=" at which the swap header is located, | ||
| 1376 | in <PAGE_SIZE> units (needed only for swap files). | ||
| 1377 | See Documentation/power/swsusp-and-swap-files.txt | ||
| 1378 | |||
| 1373 | rhash_entries= [KNL,NET] | 1379 | rhash_entries= [KNL,NET] |
| 1374 | Set number of hash buckets for route cache | 1380 | Set number of hash buckets for route cache |
| 1375 | 1381 | ||
diff --git a/Documentation/power/swsusp-and-swap-files.txt b/Documentation/power/swsusp-and-swap-files.txt new file mode 100644 index 000000000000..e171d11dc656 --- /dev/null +++ b/Documentation/power/swsusp-and-swap-files.txt | |||
| @@ -0,0 +1,54 @@ | |||
| 1 | Using swap files with software suspend (swsusp) | ||
| 2 | (C) 2006 Rafael J. Wysocki <rjw@sisk.pl> | ||
| 3 | |||
| 4 | The Linux kernel handles swap files almost in the same way as it handles swap | ||
| 5 | partitions and there are only two differences between these two types of swap | ||
| 6 | areas: | ||
| 7 | (1) swap files need not be contiguous, | ||
| 8 | (2) the header of a swap file is not in the first block of the partition that | ||
| 9 | holds it. From the swsusp's point of view (1) is not a problem, because it is | ||
| 10 | already taken care of by the swap-handling code, but (2) has to be taken into | ||
| 11 | consideration. | ||
| 12 | |||
| 13 | In principle the location of a swap file's header may be determined with the | ||
| 14 | help of appropriate filesystem driver. Unfortunately, however, it requires the | ||
| 15 | filesystem holding the swap file to be mounted, and if this filesystem is | ||
| 16 | journaled, it cannot be mounted during resume from disk. For this reason to | ||
| 17 | identify a swap file swsusp uses the name of the partition that holds the file | ||
| 18 | and the offset from the beginning of the partition at which the swap file's | ||
| 19 | header is located. For convenience, this offset is expressed in <PAGE_SIZE> | ||
| 20 | units. | ||
| 21 | |||
| 22 | In order to use a swap file with swsusp, you need to: | ||
| 23 | |||
| 24 | 1) Create the swap file and make it active, eg. | ||
| 25 | |||
| 26 | # dd if=/dev/zero of=<swap_file_path> bs=1024 count=<swap_file_size_in_k> | ||
| 27 | # mkswap <swap_file_path> | ||
| 28 | # swapon <swap_file_path> | ||
| 29 | |||
| 30 | 2) Use an application that will bmap the swap file with the help of the | ||
| 31 | FIBMAP ioctl and determine the location of the file's swap header, as the | ||
| 32 | offset, in <PAGE_SIZE> units, from the beginning of the partition which | ||
| 33 | holds the swap file. | ||
| 34 | |||
| 35 | 3) Add the following parameters to the kernel command line: | ||
| 36 | |||
| 37 | resume=<swap_file_partition> resume_offset=<swap_file_offset> | ||
| 38 | |||
| 39 | where <swap_file_partition> is the partition on which the swap file is located | ||
| 40 | and <swap_file_offset> is the offset of the swap header determined by the | ||
| 41 | application in 2). [Of course, this step may be carried out automatically | ||
| 42 | by the same application that determies the swap file's header offset using the | ||
| 43 | FIBMAP ioctl.] | ||
| 44 | |||
| 45 | Now, swsusp will use the swap file in the same way in which it would use a swap | ||
| 46 | partition. [Of course this means that the resume from a swap file cannot be | ||
| 47 | initiated from whithin an initrd of initramfs image.] In particular, the | ||
| 48 | swap file has to be active (ie. be present in /proc/swaps) so that it can be | ||
| 49 | used for suspending. | ||
| 50 | |||
| 51 | Note that if the swap file used for suspending is deleted and recreated, | ||
| 52 | the location of its header need not be the same as before. Thus every time | ||
| 53 | this happens the value of the "resume_offset=" kernel command line parameter | ||
| 54 | has to be updated. | ||
diff --git a/Documentation/power/swsusp.txt b/Documentation/power/swsusp.txt index e635e6f1e316..0761ff6c57ed 100644 --- a/Documentation/power/swsusp.txt +++ b/Documentation/power/swsusp.txt | |||
| @@ -297,20 +297,12 @@ system is shut down or suspended. Additionally use the encrypted | |||
| 297 | suspend image to prevent sensitive data from being stolen after | 297 | suspend image to prevent sensitive data from being stolen after |
| 298 | resume. | 298 | resume. |
| 299 | 299 | ||
| 300 | Q: Why can't we suspend to a swap file? | 300 | Q: Can I suspend to a swap file? |
| 301 | 301 | ||
| 302 | A: Because accessing swap file needs the filesystem mounted, and | 302 | A: Generally, yes, you can. However, it requires you to use the "resume=" and |
| 303 | filesystem might do something wrong (like replaying the journal) | 303 | "resume_offset=" kernel command line parameters, so the resume from a swap file |
| 304 | during mount. | 304 | cannot be initiated from an initrd or initramfs image. See |
| 305 | 305 | swsusp-and-swap-files.txt for details. | |
| 306 | There are few ways to get that fixed: | ||
| 307 | |||
| 308 | 1) Probably could be solved by modifying every filesystem to support | ||
| 309 | some kind of "really read-only!" option. Patches welcome. | ||
| 310 | |||
| 311 | 2) suspend2 gets around that by storing absolute positions in on-disk | ||
| 312 | image (and blocksize), with resume parameter pointing directly to | ||
| 313 | suspend header. | ||
| 314 | 306 | ||
| 315 | Q: Is there a maximum system RAM size that is supported by swsusp? | 307 | Q: Is there a maximum system RAM size that is supported by swsusp? |
| 316 | 308 | ||
