1 1.7 christos /* $NetBSD: mdconfig.c,v 1.7 2020/08/18 19:26:29 christos Exp $ */ 2 1.1 gwr 3 1.1 gwr /* 4 1.1 gwr * Copyright (c) 1995 Gordon W. Ross 5 1.1 gwr * All rights reserved. 6 1.1 gwr * 7 1.1 gwr * Redistribution and use in source and binary forms, with or without 8 1.1 gwr * modification, are permitted provided that the following conditions 9 1.1 gwr * are met: 10 1.1 gwr * 1. Redistributions of source code must retain the above copyright 11 1.1 gwr * notice, this list of conditions and the following disclaimer. 12 1.1 gwr * 2. Redistributions in binary form must reproduce the above copyright 13 1.1 gwr * notice, this list of conditions and the following disclaimer in the 14 1.1 gwr * documentation and/or other materials provided with the distribution. 15 1.1 gwr * 16 1.1 gwr * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 17 1.1 gwr * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 18 1.1 gwr * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 19 1.1 gwr * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, 20 1.1 gwr * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 21 1.1 gwr * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 22 1.1 gwr * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 23 1.1 gwr * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 24 1.1 gwr * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 25 1.1 gwr * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 26 1.1 gwr */ 27 1.1 gwr 28 1.3 lukem #include <sys/cdefs.h> 29 1.3 lukem #ifndef lint 30 1.7 christos __RCSID("$NetBSD: mdconfig.c,v 1.7 2020/08/18 19:26:29 christos Exp $"); 31 1.3 lukem #endif 32 1.3 lukem 33 1.1 gwr /* 34 1.1 gwr * This program exists for the sole purpose of providing 35 1.2 pk * user-space memory for the new memory-disk driver (md). 36 1.1 gwr * The job done by this is similar to mount_mfs. 37 1.1 gwr * (But this design allows any filesystem format!) 38 1.1 gwr */ 39 1.1 gwr 40 1.7 christos #include <sys/errno.h> 41 1.3 lukem #include <sys/ioctl.h> 42 1.1 gwr #include <sys/mman.h> 43 1.1 gwr #include <sys/param.h> 44 1.7 christos #include <sys/types.h> 45 1.1 gwr 46 1.2 pk #include <dev/md.h> 47 1.1 gwr 48 1.7 christos #include <assert.h> 49 1.7 christos #include <err.h> 50 1.7 christos #include <errno.h> 51 1.3 lukem #include <fcntl.h> 52 1.3 lukem #include <stdio.h> 53 1.3 lukem #include <stdlib.h> 54 1.7 christos #include <util.h> 55 1.3 lukem 56 1.3 lukem int 57 1.6 sevan main(int argc, char *argv[]) 58 1.1 gwr { 59 1.2 pk struct md_conf md; 60 1.7 christos char fname[MAXPATHLEN]; 61 1.7 christos int64_t num; 62 1.7 christos size_t blks, bytes; 63 1.4 chs int fd; 64 1.1 gwr 65 1.7 christos setprogname(argv[0]); 66 1.7 christos 67 1.7 christos if (argc != 3) { 68 1.7 christos (void)fprintf(stderr, "Usage: %s <device> <%d-byte-blocks>\n", 69 1.7 christos getprogname(), DEV_BSIZE); 70 1.7 christos return EXIT_FAILURE; 71 1.1 gwr } 72 1.1 gwr 73 1.7 christos if (dehumanize_number(argv[2], &num) == -1) 74 1.7 christos goto bad_num; 75 1.1 gwr 76 1.7 christos blks = (size_t)num; 77 1.7 christos bytes = blks << DEV_BSHIFT; 78 1.7 christos if (num <= 0 || bytes >> DEV_BSHIFT != blks) { 79 1.7 christos bad_num: err(EXIT_FAILURE, "blocks: `%s'", argv[2]); 80 1.1 gwr } 81 1.7 christos md.md_size = bytes; 82 1.1 gwr 83 1.7 christos fd = opendisk(argv[1], O_RDWR, fname, sizeof(fname), 0); 84 1.7 christos if (fd == -1) 85 1.7 christos err(EXIT_FAILURE, "Can't open `%s'", argv[1]); 86 1.7 christos 87 1.7 christos md.md_addr = mmap(NULL, md.md_size, PROT_READ | PROT_WRITE, 88 1.7 christos MAP_ANON | MAP_PRIVATE, -1, 0); 89 1.7 christos if (md.md_addr == MAP_FAILED) 90 1.7 christos err(EXIT_FAILURE, "mmap"); 91 1.1 gwr 92 1.1 gwr /* Become server! */ 93 1.2 pk md.md_type = MD_UMEM_SERVER; 94 1.7 christos if (ioctl(fd, MD_SETCONF, &md) == -1) 95 1.7 christos err(EXIT_FAILURE, "ioctl"); 96 1.1 gwr 97 1.7 christos return EXIT_SUCCESS; 98 1.1 gwr } 99