summaryrefslogtreecommitdiffstats
path: root/sys/vm/vm_swap.c
diff options
context:
space:
mode:
authortanimura <tanimura@FreeBSD.org>2000-12-13 10:01:00 +0000
committertanimura <tanimura@FreeBSD.org>2000-12-13 10:01:00 +0000
commita8dbeb3f7b850f093f2892563882b3afcecd5e8e (patch)
tree5cfdc93fb25655fb4c56646dcc64ce1e405c28e8 /sys/vm/vm_swap.c
parent90d90d0c248fbcde27a7d443098c2bf514aaa199 (diff)
downloadFreeBSD-src-a8dbeb3f7b850f093f2892563882b3afcecd5e8e.zip
FreeBSD-src-a8dbeb3f7b850f093f2892563882b3afcecd5e8e.tar.gz
- If swap metadata does not fit into the KVM, reduce the number of
struct swblock entries by dividing the number of the entries by 2 until the swap metadata fits. - Reject swapon(2) upon failure of swap_zone allocation. This is just a temporary fix. Better solutions include: (suggested by: dillon) o reserving swap in SWAP_META_PAGES chunks, and o swapping the swblock structures themselves. Reviewed by: alfred, dillon
Diffstat (limited to 'sys/vm/vm_swap.c')
-rw-r--r--sys/vm/vm_swap.c8
1 files changed, 8 insertions, 0 deletions
diff --git a/sys/vm/vm_swap.c b/sys/vm/vm_swap.c
index 8691c22..fada384 100644
--- a/sys/vm/vm_swap.c
+++ b/sys/vm/vm_swap.c
@@ -53,6 +53,7 @@
#include <sys/stat.h>
#include <vm/vm.h>
#include <vm/vm_extern.h>
+#include <vm/vm_zone.h>
#include <vm/swap_pager.h>
/*
@@ -194,6 +195,13 @@ swapon(p, uap)
if (error)
return (error);
+ /*
+ * Swap metadata may not fit in the KVM if we have physical
+ * memory of >1GB.
+ */
+ if (swap_zone == NULL)
+ return (ENOMEM);
+
NDINIT(&nd, LOOKUP, FOLLOW, UIO_USERSPACE, uap->name, p);
error = namei(&nd);
if (error)
OpenPOWER on IntegriCloud