+
+int nswap, nswdev;
+
+/*
+ * Set up swap devices.
+ * Initialize linked list of free swap
+ * headers. These do not actually point
+ * to buffers, but rather to pages that
+ * are being swapped in and out.
+ */
+swapinit()
+{
+ register int i;
+ register struct buf *sp = swbuf;
+ struct swdevt *swp;
+ int error;
+
+ /*
+ * Count swap devices, and adjust total swap space available.
+ * Some of this space will not be available until a swapon()
+ * system is issued, usually when the system goes multi-user.
+ */
+ nswdev = 0;
+ nswap = 0;
+ for (swp = swdevt; swp->sw_dev; swp++) {
+ nswdev++;
+ if (swp->sw_nblks > nswap)
+ nswap = swp->sw_nblks;
+ }
+ if (nswdev == 0)
+ panic("swapinit");
+ if (nswdev > 1)
+ nswap = ((nswap + dmmax - 1) / dmmax) * dmmax;
+ nswap *= nswdev;
+ if (bdevvp(swdevt[0].sw_dev, &swdevt[0].sw_vp))
+ panic("swapvp");
+ if (error = swfree(&proc0, 0)) {
+ printf("swfree errno %d\n", error); /* XXX */
+ panic("swapinit swfree 0");
+ }
+
+ /*
+ * Now set up swap buffer headers.
+ */
+ bswlist.av_forw = sp;
+ for (i = 0; i < nswbuf - 1; i++, sp++)
+ sp->av_forw = sp + 1;
+ sp->av_forw = NULL;
+}
+