170d586c0SPoul-Henning Kamp /* 270d586c0SPoul-Henning Kamp * ---------------------------------------------------------------------------- 370d586c0SPoul-Henning Kamp * "THE BEER-WARE LICENSE" (Revision 42): 470d586c0SPoul-Henning Kamp * <phk@FreeBSD.ORG> wrote this file. As long as you retain this notice you 570d586c0SPoul-Henning Kamp * can do whatever you want with this stuff. If we meet some day, and you think 670d586c0SPoul-Henning Kamp * this stuff is worth it, you can buy me a beer in return. Poul-Henning Kamp 770d586c0SPoul-Henning Kamp * ---------------------------------------------------------------------------- 870d586c0SPoul-Henning Kamp * 970d586c0SPoul-Henning Kamp * $FreeBSD$ 1070d586c0SPoul-Henning Kamp * 1170d586c0SPoul-Henning Kamp */ 1270d586c0SPoul-Henning Kamp #include <sys/param.h> 134bfd989fSWojciech A. Koszek #include <sys/ioctl.h> 1457e9624eSPoul-Henning Kamp #include <sys/linker.h> 1570d586c0SPoul-Henning Kamp #include <sys/mdioctl.h> 164bfd989fSWojciech A. Koszek #include <sys/module.h> 17b830359bSPawel Jakub Dawidek #include <sys/stat.h> 18174b5e9aSPoul-Henning Kamp 194bfd989fSWojciech A. Koszek #include <assert.h> 204bfd989fSWojciech A. Koszek #include <err.h> 214bfd989fSWojciech A. Koszek #include <errno.h> 224bfd989fSWojciech A. Koszek #include <fcntl.h> 234bfd989fSWojciech A. Koszek #include <inttypes.h> 244bfd989fSWojciech A. Koszek #include <libutil.h> 254bfd989fSWojciech A. Koszek #include <stdio.h> 264bfd989fSWojciech A. Koszek #include <stdlib.h> 274bfd989fSWojciech A. Koszek #include <string.h> 284bfd989fSWojciech A. Koszek #include <unistd.h> 2970d586c0SPoul-Henning Kamp 304bfd989fSWojciech A. Koszek static int list(const int); 314bfd989fSWojciech A. Koszek static int query(const int, const int); 324bfd989fSWojciech A. Koszek static void usage(void); 3370d586c0SPoul-Henning Kamp 344bfd989fSWojciech A. Koszek static struct md_ioctl mdio; 354bfd989fSWojciech A. Koszek static enum {UNSET, ATTACH, DETACH, LIST} action = UNSET; 364bfd989fSWojciech A. Koszek static int nflag; 3770d586c0SPoul-Henning Kamp 384bfd989fSWojciech A. Koszek static void 39c2ef0b73SPoul-Henning Kamp usage() 40c2ef0b73SPoul-Henning Kamp { 4178bb1162SRuslan Ermilov fprintf(stderr, 4278bb1162SRuslan Ermilov "usage: mdconfig -a -t type [-n] [-o [no]option] ... [-f file]\n" 4378bb1162SRuslan Ermilov " [-s size] [-S sectorsize] [-u unit]\n" 4478bb1162SRuslan Ermilov " [-x sectors/track] [-y heads/cyl]\n" 4578bb1162SRuslan Ermilov " mdconfig -d -u unit\n" 4678bb1162SRuslan Ermilov " mdconfig -l [-n] [-u unit]\n"); 47c2ef0b73SPoul-Henning Kamp fprintf(stderr, "\t\ttype = {malloc, preload, vnode, swap}\n"); 483f6f9216SPoul-Henning Kamp fprintf(stderr, "\t\toption = {cluster, compress, reserve}\n"); 495d19b2f9SPawel Jakub Dawidek fprintf(stderr, "\t\tsize = %%d (512 byte blocks), %%db (B),\n"); 505d19b2f9SPawel Jakub Dawidek fprintf(stderr, "\t\t %%dk (kB), %%dm (MB), %%dg (GB) or\n"); 515d19b2f9SPawel Jakub Dawidek fprintf(stderr, "\t\t %%dt (TB)\n"); 52c2ef0b73SPoul-Henning Kamp exit(1); 53c2ef0b73SPoul-Henning Kamp } 54c2ef0b73SPoul-Henning Kamp 5570d586c0SPoul-Henning Kamp int 5670d586c0SPoul-Henning Kamp main(int argc, char **argv) 5770d586c0SPoul-Henning Kamp { 5870d586c0SPoul-Henning Kamp int ch, fd, i; 59c2ef0b73SPoul-Henning Kamp char *p; 60c2ef0b73SPoul-Henning Kamp int cmdline = 0; 6170d586c0SPoul-Henning Kamp 62b830359bSPawel Jakub Dawidek bzero(&mdio, sizeof(mdio)); 6388b5b78dSPawel Jakub Dawidek mdio.md_file = malloc(PATH_MAX); 6488b5b78dSPawel Jakub Dawidek if (mdio.md_file == NULL) 6588b5b78dSPawel Jakub Dawidek err(1, "could not allocate memory"); 6688b5b78dSPawel Jakub Dawidek bzero(mdio.md_file, PATH_MAX); 6770d586c0SPoul-Henning Kamp for (;;) { 68f79c46d3SRobert Watson ch = getopt(argc, argv, "ab:df:lno:s:S:t:u:x:y:"); 6970d586c0SPoul-Henning Kamp if (ch == -1) 7070d586c0SPoul-Henning Kamp break; 7170d586c0SPoul-Henning Kamp switch (ch) { 7270d586c0SPoul-Henning Kamp case 'a': 73c2ef0b73SPoul-Henning Kamp if (cmdline != 0) 74c2ef0b73SPoul-Henning Kamp usage(); 7570d586c0SPoul-Henning Kamp action = ATTACH; 76c2ef0b73SPoul-Henning Kamp cmdline = 1; 7770d586c0SPoul-Henning Kamp break; 7870d586c0SPoul-Henning Kamp case 'd': 79c2ef0b73SPoul-Henning Kamp if (cmdline != 0) 80c2ef0b73SPoul-Henning Kamp usage(); 8170d586c0SPoul-Henning Kamp action = DETACH; 828f8def9eSPoul-Henning Kamp mdio.md_options = MD_AUTOUNIT; 838f8def9eSPoul-Henning Kamp cmdline = 3; 84c2ef0b73SPoul-Henning Kamp break; 85174b5e9aSPoul-Henning Kamp case 'l': 86174b5e9aSPoul-Henning Kamp if (cmdline != 0) 87174b5e9aSPoul-Henning Kamp usage(); 88174b5e9aSPoul-Henning Kamp action = LIST; 89174b5e9aSPoul-Henning Kamp mdio.md_options = MD_AUTOUNIT; 90174b5e9aSPoul-Henning Kamp cmdline = 3; 91174b5e9aSPoul-Henning Kamp break; 92f79c46d3SRobert Watson case 'n': 93f79c46d3SRobert Watson nflag = 1; 94f79c46d3SRobert Watson break; 95c2ef0b73SPoul-Henning Kamp case 't': 96c2ef0b73SPoul-Henning Kamp if (cmdline != 1) 97c2ef0b73SPoul-Henning Kamp usage(); 98c2ef0b73SPoul-Henning Kamp if (!strcmp(optarg, "malloc")) { 99c2ef0b73SPoul-Henning Kamp mdio.md_type = MD_MALLOC; 100c2ef0b73SPoul-Henning Kamp mdio.md_options = MD_AUTOUNIT | MD_COMPRESS; 101c2ef0b73SPoul-Henning Kamp } else if (!strcmp(optarg, "preload")) { 102c2ef0b73SPoul-Henning Kamp mdio.md_type = MD_PRELOAD; 103c2ef0b73SPoul-Henning Kamp mdio.md_options = 0; 104c2ef0b73SPoul-Henning Kamp } else if (!strcmp(optarg, "vnode")) { 105c2ef0b73SPoul-Henning Kamp mdio.md_type = MD_VNODE; 106c2ef0b73SPoul-Henning Kamp mdio.md_options = MD_CLUSTER | MD_AUTOUNIT | MD_COMPRESS; 107c2ef0b73SPoul-Henning Kamp } else if (!strcmp(optarg, "swap")) { 108c2ef0b73SPoul-Henning Kamp mdio.md_type = MD_SWAP; 109c2ef0b73SPoul-Henning Kamp mdio.md_options = MD_CLUSTER | MD_AUTOUNIT | MD_COMPRESS; 110c2ef0b73SPoul-Henning Kamp } else { 111c2ef0b73SPoul-Henning Kamp usage(); 112c2ef0b73SPoul-Henning Kamp } 113c2ef0b73SPoul-Henning Kamp cmdline=2; 11470d586c0SPoul-Henning Kamp break; 11570d586c0SPoul-Henning Kamp case 'f': 116ed23a390SMaxim Sobolev if (cmdline != 1 && cmdline != 2) 117c2ef0b73SPoul-Henning Kamp usage(); 118ed23a390SMaxim Sobolev if (cmdline == 1) { 119ed23a390SMaxim Sobolev /* Imply ``-t vnode'' */ 120ed23a390SMaxim Sobolev mdio.md_type = MD_VNODE; 121ed23a390SMaxim Sobolev mdio.md_options = MD_CLUSTER | MD_AUTOUNIT | MD_COMPRESS; 122252bcf45SYaroslav Tykhiy cmdline = 2; 123ed23a390SMaxim Sobolev } 12461a6eb62SPawel Jakub Dawidek if (realpath(optarg, mdio.md_file) == NULL) { 12561a6eb62SPawel Jakub Dawidek err(1, "could not find full path for %s", 12661a6eb62SPawel Jakub Dawidek optarg); 12761a6eb62SPawel Jakub Dawidek } 12861a6eb62SPawel Jakub Dawidek fd = open(mdio.md_file, O_RDONLY); 129e869d377SPoul-Henning Kamp if (fd < 0) 130e869d377SPoul-Henning Kamp err(1, "could not open %s", optarg); 131b830359bSPawel Jakub Dawidek else if (mdio.md_mediasize == 0) { 132b830359bSPawel Jakub Dawidek struct stat sb; 133b830359bSPawel Jakub Dawidek 134b830359bSPawel Jakub Dawidek if (fstat(fd, &sb) == -1) 135b830359bSPawel Jakub Dawidek err(1, "could not stat %s", optarg); 136b830359bSPawel Jakub Dawidek mdio.md_mediasize = sb.st_size; 137b830359bSPawel Jakub Dawidek } 138e869d377SPoul-Henning Kamp close(fd); 13970d586c0SPoul-Henning Kamp break; 14070d586c0SPoul-Henning Kamp case 'o': 141c2ef0b73SPoul-Henning Kamp if (cmdline != 2) 142c2ef0b73SPoul-Henning Kamp usage(); 1437a6b2b64SPoul-Henning Kamp if (!strcmp(optarg, "async")) 1447a6b2b64SPoul-Henning Kamp mdio.md_options |= MD_ASYNC; 1457a6b2b64SPoul-Henning Kamp else if (!strcmp(optarg, "noasync")) 1467a6b2b64SPoul-Henning Kamp mdio.md_options &= ~MD_ASYNC; 1477a6b2b64SPoul-Henning Kamp else if (!strcmp(optarg, "cluster")) 14870d586c0SPoul-Henning Kamp mdio.md_options |= MD_CLUSTER; 14970d586c0SPoul-Henning Kamp else if (!strcmp(optarg, "nocluster")) 15070d586c0SPoul-Henning Kamp mdio.md_options &= ~MD_CLUSTER; 151c2ef0b73SPoul-Henning Kamp else if (!strcmp(optarg, "compress")) 152c2ef0b73SPoul-Henning Kamp mdio.md_options |= MD_COMPRESS; 153c2ef0b73SPoul-Henning Kamp else if (!strcmp(optarg, "nocompress")) 154c2ef0b73SPoul-Henning Kamp mdio.md_options &= ~MD_COMPRESS; 15526a0ee75SDima Dorfman else if (!strcmp(optarg, "force")) 15626a0ee75SDima Dorfman mdio.md_options |= MD_FORCE; 15726a0ee75SDima Dorfman else if (!strcmp(optarg, "noforce")) 15826a0ee75SDima Dorfman mdio.md_options &= ~MD_FORCE; 159d31ba625SJohn-Mark Gurney else if (!strcmp(optarg, "readonly")) 160d31ba625SJohn-Mark Gurney mdio.md_options |= MD_READONLY; 161d31ba625SJohn-Mark Gurney else if (!strcmp(optarg, "noreadonly")) 162d31ba625SJohn-Mark Gurney mdio.md_options &= ~MD_READONLY; 16370d586c0SPoul-Henning Kamp else if (!strcmp(optarg, "reserve")) 16470d586c0SPoul-Henning Kamp mdio.md_options |= MD_RESERVE; 16570d586c0SPoul-Henning Kamp else if (!strcmp(optarg, "noreserve")) 16670d586c0SPoul-Henning Kamp mdio.md_options &= ~MD_RESERVE; 16770d586c0SPoul-Henning Kamp else 168d31ba625SJohn-Mark Gurney errx(1, "Unknown option: %s.", optarg); 16970d586c0SPoul-Henning Kamp break; 170ebe789d6SPoul-Henning Kamp case 'S': 171ebe789d6SPoul-Henning Kamp if (cmdline != 2) 172ebe789d6SPoul-Henning Kamp usage(); 173b830359bSPawel Jakub Dawidek mdio.md_sectorsize = strtoul(optarg, &p, 0); 174ebe789d6SPoul-Henning Kamp break; 17570d586c0SPoul-Henning Kamp case 's': 176c2ef0b73SPoul-Henning Kamp if (cmdline != 2) 177c2ef0b73SPoul-Henning Kamp usage(); 178b830359bSPawel Jakub Dawidek mdio.md_mediasize = (off_t)strtoumax(optarg, &p, 0); 179c2ef0b73SPoul-Henning Kamp if (p == NULL || *p == '\0') 180b830359bSPawel Jakub Dawidek mdio.md_mediasize *= DEV_BSIZE; 1810d79319aSPawel Jakub Dawidek else if (*p == 'b' || *p == 'B') 1820d79319aSPawel Jakub Dawidek ; /* do nothing */ 183c2ef0b73SPoul-Henning Kamp else if (*p == 'k' || *p == 'K') 184b830359bSPawel Jakub Dawidek mdio.md_mediasize <<= 10; 185c2ef0b73SPoul-Henning Kamp else if (*p == 'm' || *p == 'M') 186b830359bSPawel Jakub Dawidek mdio.md_mediasize <<= 20; 187c2ef0b73SPoul-Henning Kamp else if (*p == 'g' || *p == 'G') 188b830359bSPawel Jakub Dawidek mdio.md_mediasize <<= 30; 189b830359bSPawel Jakub Dawidek else if (*p == 't' || *p == 'T') { 190b830359bSPawel Jakub Dawidek mdio.md_mediasize <<= 30; 191b830359bSPawel Jakub Dawidek mdio.md_mediasize <<= 10; 192b830359bSPawel Jakub Dawidek } else 193c2ef0b73SPoul-Henning Kamp errx(1, "Unknown suffix on -s argument"); 19470d586c0SPoul-Henning Kamp break; 19570d586c0SPoul-Henning Kamp case 'u': 1968f8def9eSPoul-Henning Kamp if (cmdline != 2 && cmdline != 3) 197c2ef0b73SPoul-Henning Kamp usage(); 198fb1023d6SPoul-Henning Kamp if (!strncmp(optarg, "/dev/", 5)) 199fb1023d6SPoul-Henning Kamp optarg += 5; 200174b5e9aSPoul-Henning Kamp if (!strncmp(optarg, MD_NAME, sizeof(MD_NAME) - 1)) 20178baea25SDima Dorfman optarg += sizeof(MD_NAME) - 1; 2022885b421SDima Dorfman mdio.md_unit = strtoul(optarg, &p, 0); 2038a50130bSAlexander Kabaev if (mdio.md_unit == (unsigned)ULONG_MAX || *p != '\0') 2042885b421SDima Dorfman errx(1, "bad unit: %s", optarg); 20570d586c0SPoul-Henning Kamp mdio.md_options &= ~MD_AUTOUNIT; 20670d586c0SPoul-Henning Kamp break; 2074e8bfe14SPoul-Henning Kamp case 'x': 2084e8bfe14SPoul-Henning Kamp if (cmdline != 2) 2094e8bfe14SPoul-Henning Kamp usage(); 2104e8bfe14SPoul-Henning Kamp mdio.md_fwsectors = strtoul(optarg, &p, 0); 2114e8bfe14SPoul-Henning Kamp break; 2124e8bfe14SPoul-Henning Kamp case 'y': 2134e8bfe14SPoul-Henning Kamp if (cmdline != 2) 2144e8bfe14SPoul-Henning Kamp usage(); 2154e8bfe14SPoul-Henning Kamp mdio.md_fwheads = strtoul(optarg, &p, 0); 2164e8bfe14SPoul-Henning Kamp break; 21770d586c0SPoul-Henning Kamp default: 218c2ef0b73SPoul-Henning Kamp usage(); 21970d586c0SPoul-Henning Kamp } 22070d586c0SPoul-Henning Kamp } 22153d745bcSDima Dorfman mdio.md_version = MDIOVERSION; 22270d586c0SPoul-Henning Kamp 223a921cb31SPawel Jakub Dawidek if (!kld_isloaded("g_md") && kld_load("geom_md") == -1) 224a921cb31SPawel Jakub Dawidek err(1, "failed to load geom_md module"); 225a921cb31SPawel Jakub Dawidek 226174b5e9aSPoul-Henning Kamp fd = open("/dev/" MDCTL_NAME, O_RDWR, 0); 22770d586c0SPoul-Henning Kamp if (fd < 0) 228174b5e9aSPoul-Henning Kamp err(1, "open(/dev/%s)", MDCTL_NAME); 2292885b421SDima Dorfman if (cmdline == 2 2302885b421SDima Dorfman && (mdio.md_type == MD_MALLOC || mdio.md_type == MD_SWAP)) 231b830359bSPawel Jakub Dawidek if (mdio.md_mediasize == 0) 2322885b421SDima Dorfman errx(1, "must specify -s for -t malloc or -t swap"); 233252bcf45SYaroslav Tykhiy if (cmdline == 2 && mdio.md_type == MD_VNODE) 23488b5b78dSPawel Jakub Dawidek if (mdio.md_file[0] == '\0') 235252bcf45SYaroslav Tykhiy errx(1, "must specify -f for -t vnode"); 236c313f09bSChristian S.J. Peron if (mdio.md_type == MD_VNODE && 237c313f09bSChristian S.J. Peron (mdio.md_options & MD_READONLY) == 0) { 238c313f09bSChristian S.J. Peron if (access(mdio.md_file, W_OK) < 0 && 239c313f09bSChristian S.J. Peron (errno == EACCES || errno == EPERM || errno == EROFS)) { 240c313f09bSChristian S.J. Peron fprintf(stderr, 241c313f09bSChristian S.J. Peron "WARNING: opening backing store: %s readonly\n", 242c313f09bSChristian S.J. Peron mdio.md_file); 243c313f09bSChristian S.J. Peron mdio.md_options |= MD_READONLY; 244c313f09bSChristian S.J. Peron } 245c313f09bSChristian S.J. Peron } 246174b5e9aSPoul-Henning Kamp if (action == LIST) { 247174b5e9aSPoul-Henning Kamp if (mdio.md_options & MD_AUTOUNIT) 248174b5e9aSPoul-Henning Kamp list(fd); 249174b5e9aSPoul-Henning Kamp else 250174b5e9aSPoul-Henning Kamp query(fd, mdio.md_unit); 251174b5e9aSPoul-Henning Kamp } else if (action == ATTACH) { 252252bcf45SYaroslav Tykhiy if (cmdline < 2) 253252bcf45SYaroslav Tykhiy usage(); 25470d586c0SPoul-Henning Kamp i = ioctl(fd, MDIOCATTACH, &mdio); 255174b5e9aSPoul-Henning Kamp if (i < 0) 256174b5e9aSPoul-Henning Kamp err(1, "ioctl(/dev/%s)", MDCTL_NAME); 25783da2a90SPoul-Henning Kamp if (mdio.md_options & MD_AUTOUNIT) 258f79c46d3SRobert Watson printf("%s%d\n", nflag ? "" : MD_NAME, mdio.md_unit); 25983da2a90SPoul-Henning Kamp } else if (action == DETACH) { 2608f8def9eSPoul-Henning Kamp if (mdio.md_options & MD_AUTOUNIT) 2618f8def9eSPoul-Henning Kamp usage(); 262c2ef0b73SPoul-Henning Kamp i = ioctl(fd, MDIOCDETACH, &mdio); 26370d586c0SPoul-Henning Kamp if (i < 0) 264174b5e9aSPoul-Henning Kamp err(1, "ioctl(/dev/%s)", MDCTL_NAME); 26583da2a90SPoul-Henning Kamp } else 26683da2a90SPoul-Henning Kamp usage(); 267174b5e9aSPoul-Henning Kamp close (fd); 268174b5e9aSPoul-Henning Kamp return (0); 269174b5e9aSPoul-Henning Kamp } 270174b5e9aSPoul-Henning Kamp 2717e06d7bcSDima Dorfman static int 2727e06d7bcSDima Dorfman mdunitcmp(const void *a, const void *b) 2737e06d7bcSDima Dorfman { 2747e06d7bcSDima Dorfman return (*(int *)a - *(int *)b); 2757e06d7bcSDima Dorfman } 2767e06d7bcSDima Dorfman 2774bfd989fSWojciech A. Koszek static int 278174b5e9aSPoul-Henning Kamp list(const int fd) 279174b5e9aSPoul-Henning Kamp { 280c894b25aSDima Dorfman int unit; 2817e06d7bcSDima Dorfman int mdcount; 282174b5e9aSPoul-Henning Kamp 283e39eff98SPoul-Henning Kamp if (ioctl(fd, MDIOCLIST, &mdio) < 0) 284e39eff98SPoul-Henning Kamp err(1, "ioctl(/dev/%s)", MDCTL_NAME); 2857e06d7bcSDima Dorfman mdcount = mdio.md_pad[0]; 2867e06d7bcSDima Dorfman assert(mdcount < MDNPAD - 1); 2877e06d7bcSDima Dorfman if (mdcount > 0) 2887e06d7bcSDima Dorfman qsort(&mdio.md_pad[1], mdcount, sizeof(mdio.md_pad[0]), mdunitcmp); 2897e06d7bcSDima Dorfman for (unit = 0; unit < mdcount; unit++) { 290f79c46d3SRobert Watson printf("%s%s%d", unit > 0 ? " " : "", 291f79c46d3SRobert Watson nflag ? "" : MD_NAME, mdio.md_pad[unit + 1]); 292174b5e9aSPoul-Henning Kamp } 2939a777b93SDima Dorfman if (unit > 0) 294e39eff98SPoul-Henning Kamp printf("\n"); 295174b5e9aSPoul-Henning Kamp return (0); 296174b5e9aSPoul-Henning Kamp } 297174b5e9aSPoul-Henning Kamp 298b830359bSPawel Jakub Dawidek static void 299b830359bSPawel Jakub Dawidek prthumanval(int64_t bytes) 300b830359bSPawel Jakub Dawidek { 301b830359bSPawel Jakub Dawidek char buf[6]; 302b830359bSPawel Jakub Dawidek 303b830359bSPawel Jakub Dawidek humanize_number(buf, sizeof(buf) - (bytes < 0 ? 0 : 1), 304b830359bSPawel Jakub Dawidek bytes, "", HN_AUTOSCALE, HN_B | HN_NOSPACE | HN_DECIMAL); 305b830359bSPawel Jakub Dawidek (void)printf("%6s", buf); 306b830359bSPawel Jakub Dawidek } 307b830359bSPawel Jakub Dawidek 3084bfd989fSWojciech A. Koszek static int 309174b5e9aSPoul-Henning Kamp query(const int fd, const int unit) 310174b5e9aSPoul-Henning Kamp { 311174b5e9aSPoul-Henning Kamp 31253d745bcSDima Dorfman mdio.md_version = MDIOVERSION; 313174b5e9aSPoul-Henning Kamp mdio.md_unit = unit; 314174b5e9aSPoul-Henning Kamp 315174b5e9aSPoul-Henning Kamp if (ioctl(fd, MDIOCQUERY, &mdio) < 0) 316174b5e9aSPoul-Henning Kamp err(1, "ioctl(/dev/%s)", MDCTL_NAME); 317174b5e9aSPoul-Henning Kamp 318b830359bSPawel Jakub Dawidek (void)printf("%s%d\t", MD_NAME, mdio.md_unit); 319174b5e9aSPoul-Henning Kamp switch (mdio.md_type) { 320174b5e9aSPoul-Henning Kamp case MD_MALLOC: 321b830359bSPawel Jakub Dawidek (void)printf("malloc"); 322174b5e9aSPoul-Henning Kamp break; 323174b5e9aSPoul-Henning Kamp case MD_PRELOAD: 324b830359bSPawel Jakub Dawidek (void)printf("preload"); 325174b5e9aSPoul-Henning Kamp break; 326174b5e9aSPoul-Henning Kamp case MD_SWAP: 327b830359bSPawel Jakub Dawidek (void)printf("swap"); 328174b5e9aSPoul-Henning Kamp break; 329174b5e9aSPoul-Henning Kamp case MD_VNODE: 330b830359bSPawel Jakub Dawidek (void)printf("vnode"); 331174b5e9aSPoul-Henning Kamp break; 332174b5e9aSPoul-Henning Kamp } 333b830359bSPawel Jakub Dawidek printf("\t"); 334b830359bSPawel Jakub Dawidek prthumanval(mdio.md_mediasize); 33561a6eb62SPawel Jakub Dawidek if (mdio.md_type == MD_VNODE) 33661a6eb62SPawel Jakub Dawidek printf("\t%s", mdio.md_file); 337b830359bSPawel Jakub Dawidek printf("\n"); 338174b5e9aSPoul-Henning Kamp 33970d586c0SPoul-Henning Kamp return (0); 34070d586c0SPoul-Henning Kamp } 341