summaryrefslogtreecommitdiffstats
path: root/perl-install/swap.pm
diff options
context:
space:
mode:
Diffstat (limited to 'perl-install/swap.pm')
-rw-r--r--perl-install/swap.pm35
1 files changed, 17 insertions, 18 deletions
diff --git a/perl-install/swap.pm b/perl-install/swap.pm
index 675c521a7..ed0669f8e 100644
--- a/perl-install/swap.pm
+++ b/perl-install/swap.pm
@@ -1,4 +1,4 @@
-package swap;
+package swap; # $Id$
use diagnostics;
use strict;
@@ -17,13 +17,13 @@ my $signature_page = "\0" x $pagesize;
# the architectures can actually store into the page tables
# and on 32bit architectures it is limited to 2GB at the
# same time.
-# Old swap format keeps the limit of 8*pagesize*(pagesize - 10)
+# Old swap format keeps the limit of 8*pagesize*(pagesize - 10)
my $V0_MAX_PAGES = 8 * $pagesize - 10;
my $V1_OLD_MAX_PAGES = int 0x7fffffff / $pagesize - 1;
-my $V1_MAX_PAGES = $V1_OLD_MAX_PAGES; # (1 << 24) - 1;
+my $V1_MAX_PAGES = $V1_OLD_MAX_PAGES; #- (1 << 24) - 1;
my $MAX_BADPAGES = int ($pagesize - 1024 - 128 * $common::sizeof_int - 10) / $common::sizeof_int;
-my $signature_format_v1 = "x1024 I I I I125"; # bootbits, version, last_page, nr_badpages, padding
+my $signature_format_v1 = "x1024 I I I I125"; #- bootbits, version, last_page, nr_badpages, padding
1;
@@ -39,7 +39,7 @@ sub check_blocks {
my $badpages_field_v1 = \substr($signature_page, psizeof($signature_format_v1));
for (my $i = 0; $i < $nbpages; $i++) {
-
+
$last_read_ok || sysseek($fd, $i * $pagesize, 0) or die "seek failed";
unless ($last_read_ok = sysread($fd, $buffer, $pagesize)) {
@@ -52,8 +52,8 @@ sub check_blocks {
vec($signature_page, $i, 1) = bool($last_read_ok) if $version == 0;
}
- # TODO: add interface
-
+ #- TODO: add interface
+
$badpages and log::l("$badpages bad pages\n");
return $badpages;
}
@@ -64,20 +64,17 @@ sub make($;$) {
my $badpages = 0;
my ($version, $maxpages);
- $devicename or die "nowhere to set up swap on?";
- $::testing and return;
-
$devicename = devices::make($devicename);
my $nbpages = divide(devices::size($devicename), $pagesize);
- if ($nbpages <= $V0_MAX_PAGES || kernel_greater_or_equal(2,1,117) || $pagesize < 2048) {
+ if ($nbpages <= $V0_MAX_PAGES || !kernel_greater_or_equal(2,1,117) || $pagesize < 2048) {
$version = 0;
} else {
$version = 1;
}
- $nbpages >= 10 or die "swap area needs to be at least " . 10 * $pagesize >> 10 . "kB";
+ $nbpages >= 10 or die "swap area needs to be at least " . (10 * $pagesize / 1024) . "kB";
-b $devicename or $checkBlocks = 0;
my $rdev = (stat $devicename)[6];# or log::l("stat of $devicename failed: $!");
@@ -91,15 +88,15 @@ sub make($;$) {
if ($nbpages > $maxpages) {
$nbpages = $maxpages;
- log::l("warning: truncating swap area to " . ($nbpages * $pagesize >> 10) . "kB");
+ log::l("warning: truncating swap area to " . ($nbpages * $pagesize / 1024) . "kB");
}
if ($checkBlocks) {
- $badpages = check_blocks(\*F, $version, $nbpages);
+ $badpages = check_blocks(*F, $version, $nbpages);
} elsif ($version == 0) {
for (my $i = 0; $i < $nbpages; $i++) { vec($signature_page, $i, 1) = 1; }
}
-
+
$version == 0 and !vec($signature_page, 0, 1) and die "bad block on first page";
vec($signature_page, 0, 1) = 0;
@@ -109,7 +106,7 @@ sub make($;$) {
$goodpages > 0 or die "all blocks are bad";
log::l("Setting up swapspace on $devicename version $version, size = " . $goodpages * $pagesize . " bytes");
-
+
strcpy($signature_page, $version == 0 ? "SWAP-SPACE" : "SWAPSPACE2", $pagesize - 10);
my $offset = ($version == 0) ? 0 : 1024;
@@ -117,7 +114,7 @@ sub make($;$) {
syswrite(F, substr($signature_page, $offset)) or die "unable to write signature page: $!";
- # A subsequent swapon() will fail if the signature is not actually on disk. (This is a kernel bug.)
+ #- A subsequent swapon() will fail if the signature is not actually on disk. (This is a kernel bug.)
syscall_('fsync', fileno(F)) or die "fsync failed: $!";
close F;
}
@@ -129,8 +126,10 @@ sub enable($;$) {
}
sub swapon($) {
+ log::l("swapon called with $_[0]");
syscall_('swapon', devices::make($_[0]), 0) or die "swapon($_[0]) failed: $!";
}
+
sub swapoff($) {
- syscall_('swapoff', devices::make($_[0])) or die "swapoff($_[0]) failed: $!";
+ syscall_('swapoff', devices::make($_[0])) or die "swapoff($_[0]) failed: $!";
}