Lines Matching +full:0 +full:- +full:mdio
1 /*-
2 * SPDX-License-Identifier: BSD-2-Clause
4 * Copyright (c) 2000-2004 Poul-Henning Kamp <phk@FreeBSD.org>
57 static struct md_ioctl mdio; variable
70 #define OPT_VERBOSE 0x01
71 #define OPT_UNIT 0x02
72 #define OPT_DONE 0x04
73 #define OPT_LIST 0x10
82 "usage: mdconfig -a -t type [-n] [-o [no]option] ... [-f file]\n" in usage()
83 " [-s size] [-S sectorsize] [-u unit] [-L label]\n" in usage()
84 " [-x sectors/track] [-y heads/cylinder]\n" in usage()
85 " mdconfig -d -u unit [-o [no]force]\n" in usage()
86 " mdconfig -r -u unit -s size [-o [no]force]\n" in usage()
87 " mdconfig -l [-v] [-n] [-f file] [-u unit]\n" in usage()
106 bzero(&mdio, sizeof(mdio)); in main()
107 mdio.md_file = malloc(PATH_MAX); in main()
108 mdio.md_label = malloc(PATH_MAX); in main()
109 if (mdio.md_file == NULL || mdio.md_label == NULL) in main()
111 vflag = 0; in main()
112 bzero(mdio.md_file, PATH_MAX); in main()
113 bzero(mdio.md_label, PATH_MAX); in main()
118 while ((ch = getopt(argc, argv, "ab:df:lno:rs:S:t:u:vx:y:L:")) != -1) { in main()
122 errx(1, "-a is mutually exclusive " in main()
123 "with -d, -r, and -l"); in main()
128 errx(1, "-d is mutually exclusive " in main()
129 "with -a, -r, and -l"); in main()
131 mdio.md_options |= MD_AUTOUNIT; in main()
135 errx(1, "-r is mutually exclusive " in main()
136 "with -a, -d, and -l"); in main()
138 mdio.md_options |= MD_AUTOUNIT; in main()
142 errx(1, "-l is mutually exclusive " in main()
143 "with -a, -r, and -d"); in main()
145 mdio.md_options |= MD_AUTOUNIT; in main()
152 errx(1, "-t can be passed only once"); in main()
155 mdio.md_type = MD_MALLOC; in main()
156 mdio.md_options |= MD_AUTOUNIT | MD_COMPRESS; in main()
158 mdio.md_type = MD_VNODE; in main()
159 mdio.md_options |= MD_AUTOUNIT | MD_COMPRESS; in main()
161 mdio.md_type = MD_SWAP; in main()
162 mdio.md_options |= MD_AUTOUNIT | MD_COMPRESS; in main()
164 mdio.md_type = MD_NULL; in main()
165 mdio.md_options |= MD_AUTOUNIT | MD_COMPRESS; in main()
171 errx(1, "-f can be passed only once"); in main()
178 mdio.md_options |= MD_ASYNC; in main()
180 mdio.md_options &= ~MD_ASYNC; in main()
182 mdio.md_options |= MD_CACHE; in main()
184 mdio.md_options &= ~MD_CACHE; in main()
186 * For backwards-compatibility, continue to recognize in main()
195 mdio.md_options |= MD_COMPRESS; in main()
197 mdio.md_options &= ~MD_COMPRESS; in main()
199 mdio.md_options |= MD_FORCE; in main()
201 mdio.md_options &= ~MD_FORCE; in main()
203 mdio.md_options |= MD_MUSTDEALLOC; in main()
205 mdio.md_options &= ~MD_MUSTDEALLOC; in main()
207 mdio.md_options |= MD_READONLY; in main()
209 mdio.md_options &= ~MD_READONLY; in main()
211 mdio.md_options |= MD_READONLY; in main()
213 mdio.md_options &= ~MD_READONLY; in main()
215 mdio.md_options |= MD_RESERVE; in main()
217 mdio.md_options &= ~MD_RESERVE; in main()
219 mdio.md_options |= MD_VERIFY; in main()
221 mdio.md_options &= ~MD_VERIFY; in main()
226 mdio.md_sectorsize = strtoul(optarg, &p, 0); in main()
230 errx(1, "-s can be passed only once"); in main()
232 mdio.md_mediasize = (off_t)strtoumax(optarg, &p, 0); in main()
233 if (p == NULL || *p == '\0') in main()
234 mdio.md_mediasize *= DEV_BSIZE; in main()
238 mdio.md_mediasize <<= 10; in main()
240 mdio.md_mediasize <<= 20; in main()
242 mdio.md_mediasize <<= 30; in main()
244 mdio.md_mediasize <<= 30; in main()
245 mdio.md_mediasize <<= 10; in main()
247 mdio.md_mediasize <<= 30; in main()
248 mdio.md_mediasize <<= 20; in main()
250 errx(1, "unknown suffix on -s argument"); in main()
253 if (!strncmp(optarg, _PATH_DEV, sizeof(_PATH_DEV) - 1)) in main()
254 optarg += sizeof(_PATH_DEV) - 1; in main()
255 if (!strncmp(optarg, MD_NAME, sizeof(MD_NAME) - 1)) in main()
256 optarg += sizeof(MD_NAME) - 1; in main()
263 mdio.md_fwsectors = strtoul(optarg, &p, 0); in main()
266 mdio.md_fwheads = strtoul(optarg, &p, 0); in main()
269 strlcpy(mdio.md_label, optarg, PATH_MAX); in main()
276 argc -= optind; in main()
287 if (fflag != NULL || argc > 0) { in main()
288 /* Imply ``-t vnode'' */ in main()
289 mdio.md_type = MD_VNODE; in main()
290 mdio.md_options |= MD_AUTOUNIT | MD_COMPRESS; in main()
292 /* Imply ``-t swap'' */ in main()
293 mdio.md_type = MD_SWAP; in main()
294 mdio.md_options |= MD_AUTOUNIT | MD_COMPRESS; in main()
299 if ((fflag != NULL || argc > 0) && mdio.md_type != MD_VNODE) in main()
300 errx(1, "only -t vnode can be used with file name"); in main()
302 if (mdio.md_type == MD_VNODE) { in main()
304 if (argc != 0) in main()
313 if ((mdio.md_options & MD_READONLY) == 0 && in main()
314 access(mdio.md_file, W_OK) < 0 && in main()
318 "readonly", mdio.md_file); in main()
319 mdio.md_options |= MD_READONLY; in main()
323 if ((mdio.md_type == MD_MALLOC || mdio.md_type == MD_SWAP || in main()
324 mdio.md_type == MD_NULL) && sflag == NULL) in main()
325 errx(1, "must specify -s for -t malloc, -t swap, " in main()
326 "or -t null"); in main()
327 if (mdio.md_type == MD_VNODE && mdio.md_file[0] == '\0') in main()
328 errx(1, "must specify -f for -t vnode"); in main()
330 if (mdio.md_sectorsize != 0) in main()
331 errx(1, "-S can only be used with -a"); in main()
333 errx(1, "-s can only be used with -a and -r"); in main()
334 if (mdio.md_fwsectors != 0) in main()
335 errx(1, "-x can only be used with -a"); in main()
336 if (mdio.md_fwheads != 0) in main()
337 errx(1, "-y can only be used with -a"); in main()
339 errx(1, "-f can only be used with -a and -l"); in main()
341 errx(1, "-t can only be used with -a"); in main()
342 if (argc > 0) in main()
343 errx(1, "file can only be used with -a"); in main()
345 (mdio.md_options & ~MD_AUTOUNIT) != 0) in main()
346 errx(1, "-o can only be used with -a, -d, and -r"); in main()
348 (mdio.md_options & ~(MD_FORCE | MD_AUTOUNIT)) != 0) in main()
349 errx(1, "only -o [no]force can be used with -d"); in main()
351 (mdio.md_options & ~(MD_FORCE | MD_RESERVE | MD_AUTOUNIT)) != 0) in main()
352 errx(1, "only -o [no]force and -o [no]reserve can be used with -r"); in main()
356 errx(1, "must specify -s for -r"); in main()
359 errx(1, "-v can only be used with -l"); in main()
362 mdio.md_unit = strtoul(uflag, &p, 0); in main()
363 if (mdio.md_unit == (unsigned)ULONG_MAX || *p != '\0') in main()
365 mdio.md_options &= ~MD_AUTOUNIT; in main()
368 mdio.md_version = MDIOVERSION; in main()
370 if (!kld_isloaded("g_md") && kld_load("geom_md") == -1) in main()
373 md_fd = open(_PATH_DEV MDCTL_NAME, O_RDWR, 0); in main()
374 if (md_fd < 0) in main()
378 i = ioctl(md_fd, MDIOCATTACH, &mdio); in main()
379 if (i < 0) in main()
381 if (mdio.md_options & MD_AUTOUNIT) in main()
382 printf("%s%d\n", nflag ? "" : MD_NAME, mdio.md_unit); in main()
384 if (mdio.md_options & MD_AUTOUNIT) in main()
385 errx(1, "-d requires -u"); in main()
386 i = ioctl(md_fd, MDIOCDETACH, &mdio); in main()
387 if (i < 0) in main()
390 if (mdio.md_options & MD_AUTOUNIT) in main()
391 errx(1, "-r requires -u"); in main()
392 i = ioctl(md_fd, MDIOCRESIZE, &mdio); in main()
393 if (i < 0) in main()
396 if (mdio.md_options & MD_AUTOUNIT) { in main()
407 return (0); in main()
420 memset(&mdiox, 0, sizeof(mdiox)); in print_options()
423 mdiox.md_file = file[0] == '-' ? NULL : strdup(file); in print_options()
425 if (ioctl(md_fd, MDIOCQUERY, &mdiox) < 0) in print_options()
472 if (realpath(fn, mdio.md_file) == NULL) in md_set_file()
474 fd = open(mdio.md_file, O_RDONLY); in md_set_file()
475 if (fd < 0) in md_set_file()
477 if (fstat(fd, &sb) == -1) in md_set_file()
481 if (mdio.md_mediasize == 0) in md_set_file()
482 mdio.md_mediasize = sb.st_size; in md_set_file()
489 * comma-separated string containing md(4) disk names. 'opt' distinguished
510 if (retcode != 0) in md_list()
511 return (-1); in md_list()
513 if (retcode != 0) in md_list()
514 return (-1); in md_list()
517 return (-1); in md_list()
519 ffound = ufound = 0; in md_list()
521 gid = geom_lookupid(&gm, gsp->id); in md_list()
524 if (gid->lg_what == ISPROVIDER) { in md_list()
525 pp = gid->lg_ptr; in md_list()
526 gg = pp->lg_geom; in md_list()
527 gcl = gg->lg_class; in md_list()
528 if (strcmp(gcl->lg_name, CLASS_NAME_MD) != 0) in md_list()
531 retcode = md_find(units, pp->lg_name); in md_list()
537 gc = &pp->lg_config; in md_list()
539 if (type != NULL && (strcmp(type, "vnode") == 0 || in md_list()
540 strcmp(type, "preload") == 0)) { in md_list()
543 strcmp(fflag, file) != 0) in md_list()
549 if (nflag && strncmp(pp->lg_name, MD_NAME, 2) == 0) in md_list()
550 printf("%s", pp->lg_name + 2); in md_list()
552 printf("%s", pp->lg_name); in md_list()
561 file = "-"; in md_list()
565 label = "-"; in md_list()
567 print_options(pp->lg_name, file); in md_list()
586 return (0); in md_list()
590 return (0); in md_list()
592 return (-1); in md_list()
604 if (strcmp(gce->lg_name, name) == 0) in geom_config_get()
605 return (gce->lg_val); in geom_config_get()
612 * device name we look for. Returns 1 if found and 0
622 ret = 0; in md_find()
625 return (-1); in md_find()
627 if (strncmp(u, _PATH_DEV, sizeof(_PATH_DEV) - 1) == 0) in md_find()
628 u += sizeof(_PATH_DEV) - 1; in md_find()
631 if (strcmp(u, name) == 0 || strcmp(num, name) == 0) { in md_find()
647 errno = 0; in md_prthumanval()
649 if (errno != 0 || *endptr != '\0' || bytes > INT64_MAX) in md_prthumanval()