diff options
author | Todd C. Miller <millert@cvs.openbsd.org> | 2003-05-03 17:21:05 +0000 |
---|---|---|
committer | Todd C. Miller <millert@cvs.openbsd.org> | 2003-05-03 17:21:05 +0000 |
commit | c6fd4b53eb683bad26282e9a0adb3fcdd6e7eea5 (patch) | |
tree | b7c8977ead1caf4bea3c68a55ecaa126e6ae7d7a /sbin/newfs/mkfs.c | |
parent | 52c72ab5205d388f2ab1e0c6b079a803ffb14336 (diff) |
The 'memleft' calcuations assume that the data address starts at
0, which is no longer the case. So instead of the hokey private
malloc() implementation, just use mmap. From diffs I ran on
anoncvs.usa 4 years ago.
Diffstat (limited to 'sbin/newfs/mkfs.c')
-rw-r--r-- | sbin/newfs/mkfs.c | 96 |
1 files changed, 7 insertions, 89 deletions
diff --git a/sbin/newfs/mkfs.c b/sbin/newfs/mkfs.c index b290d00fda7..f3fc7a06f89 100644 --- a/sbin/newfs/mkfs.c +++ b/sbin/newfs/mkfs.c @@ -1,4 +1,4 @@ -/* $OpenBSD: mkfs.c,v 1.24 2003/04/16 10:33:16 markus Exp $ */ +/* $OpenBSD: mkfs.c,v 1.25 2003/05/03 17:21:04 millert Exp $ */ /* $NetBSD: mkfs.c,v 1.25 1995/06/18 21:35:38 cgd Exp $ */ /* @@ -38,18 +38,18 @@ #if 0 static char sccsid[] = "@(#)mkfs.c 8.3 (Berkeley) 2/3/94"; #else -static char rcsid[] = "$OpenBSD: mkfs.c,v 1.24 2003/04/16 10:33:16 markus Exp $"; +static char rcsid[] = "$OpenBSD: mkfs.c,v 1.25 2003/05/03 17:21:04 millert Exp $"; #endif #endif /* not lint */ #include <sys/param.h> #include <sys/time.h> -#include <sys/resource.h> #include <ufs/ufs/dinode.h> #include <ufs/ufs/dir.h> #include <ufs/ffs/fs.h> #include <sys/disklabel.h> #include <sys/ioctl.h> +#include <sys/mman.h> #include <string.h> #include <stdlib.h> @@ -108,7 +108,6 @@ extern int sbsize; /* superblock size */ extern int avgfilesize; /* expected average file size */ extern int avgfilesperdir; /* expected number of files per directory */ extern int quiet; /* quiet flag */ -extern u_long memleft; /* virtual memory available */ extern caddr_t membase; /* start address of memory based filesystem */ union fs_u { @@ -172,10 +171,9 @@ mkfs(pp, fsys, fi, fo) time(&utime); #endif if (mfs) { - (void)malloc(0); - if (fssize * sectorsize > memleft) - fssize = (memleft - 16384) / sectorsize; - if ((membase = malloc(fssize * sectorsize)) == 0) + membase = mmap(NULL, fssize * sectorsize, PROT_READ|PROT_WRITE, + MAP_ANON|MAP_PRIVATE, -1, 0); + if (membase == MAP_FAILED) exit(12); } fsi = fi; @@ -1029,8 +1027,7 @@ iput(ip, ino) struct dinode *ip; ino_t ino; { - struct dinode *buf = - (struct dinode *)malloc(MAXINOPB * sizeof (struct dinode)); + struct dinode buf[MAXINOPB]; daddr_t d; int c; @@ -1058,85 +1055,6 @@ iput(ip, ino) rdfs(d, sblock.fs_bsize, buf); buf[ino_to_fsbo(&sblock, ino)] = *ip; wtfs(d, sblock.fs_bsize, buf); - free(buf); -} - -/* - * Replace libc function with one suited to our needs. - */ -static void * -malloc(size) - size_t size; -{ - void *base, *i; - static u_long pgsz; - struct rlimit rlp; - - if (pgsz == 0) { - base = sbrk(0); - pgsz = getpagesize() - 1; - i = (char *)((u_long)(base + pgsz) &~ pgsz); - base = sbrk(i - base); - if (getrlimit(RLIMIT_DATA, &rlp) < 0) - perror("getrlimit"); - rlp.rlim_cur = rlp.rlim_max; - if (setrlimit(RLIMIT_DATA, &rlp) < 0) - perror("setrlimit"); - memleft = rlp.rlim_max - (u_long)base; - } - size = (size + pgsz) &~ pgsz; - if (size > memleft) - size = memleft; - memleft -= size; - if (size == 0) - return (0); - return (sbrk(size)); -} - -/* - * Replace libc function with one suited to our needs. - */ -static void * -realloc(ptr, size) - void *ptr; - size_t size; -{ - void *p; - - if ((p = malloc(size)) == NULL) - return (NULL); - if (ptr) { - memcpy(p, ptr, size); - free(ptr); - } - return (p); -} - -/* - * Replace libc function with one suited to our needs. - */ -static void * -calloc(size, numelm) - size_t size; - size_t numelm; -{ - void *base; - - size *= numelm; - if ((base = malloc(size)) != 0) - memset(base, 0, size); - return (base); -} - -/* - * Replace libc function with one suited to our needs. - */ -static void -free(ptr) - void *ptr; -{ - - /* do not worry about it for now */ } /* |