1*151f4e2bSMauro Carvalho Chehab=============================================== 2*151f4e2bSMauro Carvalho ChehabUsing swap files with software suspend (swsusp) 3*151f4e2bSMauro Carvalho Chehab=============================================== 4*151f4e2bSMauro Carvalho Chehab 5*151f4e2bSMauro Carvalho Chehab (C) 2006 Rafael J. Wysocki <rjw@sisk.pl> 6*151f4e2bSMauro Carvalho Chehab 7*151f4e2bSMauro Carvalho ChehabThe Linux kernel handles swap files almost in the same way as it handles swap 8*151f4e2bSMauro Carvalho Chehabpartitions and there are only two differences between these two types of swap 9*151f4e2bSMauro Carvalho Chehabareas: 10*151f4e2bSMauro Carvalho Chehab(1) swap files need not be contiguous, 11*151f4e2bSMauro Carvalho Chehab(2) the header of a swap file is not in the first block of the partition that 12*151f4e2bSMauro Carvalho Chehabholds it. From the swsusp's point of view (1) is not a problem, because it is 13*151f4e2bSMauro Carvalho Chehabalready taken care of by the swap-handling code, but (2) has to be taken into 14*151f4e2bSMauro Carvalho Chehabconsideration. 15*151f4e2bSMauro Carvalho Chehab 16*151f4e2bSMauro Carvalho ChehabIn principle the location of a swap file's header may be determined with the 17*151f4e2bSMauro Carvalho Chehabhelp of appropriate filesystem driver. Unfortunately, however, it requires the 18*151f4e2bSMauro Carvalho Chehabfilesystem holding the swap file to be mounted, and if this filesystem is 19*151f4e2bSMauro Carvalho Chehabjournaled, it cannot be mounted during resume from disk. For this reason to 20*151f4e2bSMauro Carvalho Chehabidentify a swap file swsusp uses the name of the partition that holds the file 21*151f4e2bSMauro Carvalho Chehaband the offset from the beginning of the partition at which the swap file's 22*151f4e2bSMauro Carvalho Chehabheader is located. For convenience, this offset is expressed in <PAGE_SIZE> 23*151f4e2bSMauro Carvalho Chehabunits. 24*151f4e2bSMauro Carvalho Chehab 25*151f4e2bSMauro Carvalho ChehabIn order to use a swap file with swsusp, you need to: 26*151f4e2bSMauro Carvalho Chehab 27*151f4e2bSMauro Carvalho Chehab1) Create the swap file and make it active, eg.:: 28*151f4e2bSMauro Carvalho Chehab 29*151f4e2bSMauro Carvalho Chehab # dd if=/dev/zero of=<swap_file_path> bs=1024 count=<swap_file_size_in_k> 30*151f4e2bSMauro Carvalho Chehab # mkswap <swap_file_path> 31*151f4e2bSMauro Carvalho Chehab # swapon <swap_file_path> 32*151f4e2bSMauro Carvalho Chehab 33*151f4e2bSMauro Carvalho Chehab2) Use an application that will bmap the swap file with the help of the 34*151f4e2bSMauro Carvalho ChehabFIBMAP ioctl and determine the location of the file's swap header, as the 35*151f4e2bSMauro Carvalho Chehaboffset, in <PAGE_SIZE> units, from the beginning of the partition which 36*151f4e2bSMauro Carvalho Chehabholds the swap file. 37*151f4e2bSMauro Carvalho Chehab 38*151f4e2bSMauro Carvalho Chehab3) Add the following parameters to the kernel command line:: 39*151f4e2bSMauro Carvalho Chehab 40*151f4e2bSMauro Carvalho Chehab resume=<swap_file_partition> resume_offset=<swap_file_offset> 41*151f4e2bSMauro Carvalho Chehab 42*151f4e2bSMauro Carvalho Chehabwhere <swap_file_partition> is the partition on which the swap file is located 43*151f4e2bSMauro Carvalho Chehaband <swap_file_offset> is the offset of the swap header determined by the 44*151f4e2bSMauro Carvalho Chehabapplication in 2) (of course, this step may be carried out automatically 45*151f4e2bSMauro Carvalho Chehabby the same application that determines the swap file's header offset using the 46*151f4e2bSMauro Carvalho ChehabFIBMAP ioctl) 47*151f4e2bSMauro Carvalho Chehab 48*151f4e2bSMauro Carvalho ChehabOR 49*151f4e2bSMauro Carvalho Chehab 50*151f4e2bSMauro Carvalho ChehabUse a userland suspend application that will set the partition and offset 51*151f4e2bSMauro Carvalho Chehabwith the help of the SNAPSHOT_SET_SWAP_AREA ioctl described in 52*151f4e2bSMauro Carvalho ChehabDocumentation/power/userland-swsusp.rst (this is the only method to suspend 53*151f4e2bSMauro Carvalho Chehabto a swap file allowing the resume to be initiated from an initrd or initramfs 54*151f4e2bSMauro Carvalho Chehabimage). 55*151f4e2bSMauro Carvalho Chehab 56*151f4e2bSMauro Carvalho ChehabNow, swsusp will use the swap file in the same way in which it would use a swap 57*151f4e2bSMauro Carvalho Chehabpartition. In particular, the swap file has to be active (ie. be present in 58*151f4e2bSMauro Carvalho Chehab/proc/swaps) so that it can be used for suspending. 59*151f4e2bSMauro Carvalho Chehab 60*151f4e2bSMauro Carvalho ChehabNote that if the swap file used for suspending is deleted and recreated, 61*151f4e2bSMauro Carvalho Chehabthe location of its header need not be the same as before. Thus every time 62*151f4e2bSMauro Carvalho Chehabthis happens the value of the "resume_offset=" kernel command line parameter 63*151f4e2bSMauro Carvalho Chehabhas to be updated. 64