summaryrefslogtreecommitdiffstats
path: root/mount/swapon.c
diff options
context:
space:
mode:
authorKarel Zak2009-03-03 14:53:27 +0100
committerKarel Zak2009-03-03 15:21:38 +0100
commit0d761944dd1130c81ec770ed318ae7ed3338c702 (patch)
tree955d22b7931c6f83e2e2715bef59ffa6d68fc58d /mount/swapon.c
parentswapon: cleanup man page (diff)
downloadkernel-qcow2-util-linux-0d761944dd1130c81ec770ed318ae7ed3338c702.tar.gz
kernel-qcow2-util-linux-0d761944dd1130c81ec770ed318ae7ed3338c702.tar.xz
kernel-qcow2-util-linux-0d761944dd1130c81ec770ed318ae7ed3338c702.zip
swapon: add -f/--fixpgsz option
The patch: commit 3399a218f4eff4016a22044e7c416521bc37c53c Author: Matthias Koenig <mkoenig@suse.de> Date: Thu Nov 27 12:32:56 2008 +0100 swapon: add swap format detection and pagesize check introduced a new feature. This feature should be optional (disabled by default) to keep happy people who use swap-space bad blocks or nonstandard swap-space size. CC: Hugh Dickins <hugh@veritas.com> CC: Olaf Hering <olh@suse.de> CC: Matthias Koenig <mkoenig@suse.de> Signed-off-by: Karel Zak <kzak@redhat.com>
Diffstat (limited to 'mount/swapon.c')
-rw-r--r--mount/swapon.c29
1 files changed, 20 insertions, 9 deletions
diff --git a/mount/swapon.c b/mount/swapon.c
index b795ba05b..a6726cdb5 100644
--- a/mount/swapon.c
+++ b/mount/swapon.c
@@ -56,6 +56,7 @@ int priority = -1; /* non-prioritized swap by default */
/* If true, don't complain if the device/file doesn't exist */
int ifexists;
+int fixpgsz;
int verbose;
char *progname;
@@ -65,6 +66,7 @@ static struct option longswaponopts[] = {
{ "priority", required_argument, 0, 'p' },
{ "ifexists", 0, 0, 'e' },
{ "summary", 0, 0, 's' },
+ { "fixpgsz", 0, 0, 'f' },
/* also for swapoff */
{ "all", 0, 0, 'a' },
{ "help", 0, 0, 'h' },
@@ -73,7 +75,7 @@ static struct option longswaponopts[] = {
{ NULL, 0, 0, 0 }
};
-static struct option *longswapoffopts = &longswaponopts[3];
+static struct option *longswapoffopts = &longswaponopts[4];
static int cannot_find(const char *special);
@@ -88,8 +90,8 @@ static int cannot_find(const char *special);
static void
swapon_usage(FILE *fp, int n) {
fprintf(fp, _("\nUsage:\n"
- " %1$s -a [-e] [-v] enable all swaps from /etc/fstab\n"
- " %1$s [-p priority] [-v] <special> enable given swap\n"
+ " %1$s -a [-e] [-v] [-f] enable all swaps from /etc/fstab\n"
+ " %1$s [-p priority] [-v] [-f] <special> enable given swap\n"
" %1$s -s display swap usage summary\n"
" %1$s -h display help\n"
" %1$s -V display version\n\n"), progname);
@@ -193,6 +195,8 @@ swap_reinitialize(const char *device) {
char *cmd[7];
int idx=0;
+ warnx(_("%s: reinitializing the swap."), device);
+
switch((pid=fork())) {
case -1: /* fork error */
warn(_("fork failed"));
@@ -407,11 +411,15 @@ swapon_checks(const char *special)
" than actual size of swapspace"),
special, swapsize);
} else if (getpagesize() != pagesize) {
- warn(_("%s: swap format pagesize does not match."
- " Reinitializing the swap."),
- special);
- if (swap_reinitialize(special) < 0)
- goto err;
+ if (fixpgsz) {
+ warn(_("%s: swap format pagesize does not match."),
+ special);
+ if (swap_reinitialize(special) < 0)
+ goto err;
+ } else
+ warn(_("%s: swap format pagesize does not match. "
+ "(may try --fixpgsz to reinitialize)"),
+ special);
}
} else if (sig == SIG_SWSUSPEND) {
/* We have to reinitialize swap with old (=useless) software suspend
@@ -601,7 +609,7 @@ main_swapon(int argc, char *argv[]) {
int status = 0;
int c, i;
- while ((c = getopt_long(argc, argv, "ahep:svVL:U:",
+ while ((c = getopt_long(argc, argv, "ahefp:svVL:U:",
longswaponopts, NULL)) != -1) {
switch (c) {
case 'a': /* all */
@@ -622,6 +630,9 @@ main_swapon(int argc, char *argv[]) {
case 'e': /* ifexists */
ifexists = 1;
break;
+ case 'f':
+ fixpgsz = 1;
+ break;
case 's': /* status report */
status = display_summary();
exit(status);