xref: /illumos-gate/usr/src/test/zfs-tests/cmd/has_unmap/has_unmap.c (revision 084fd14f7c3336eb67ee283cabad2da8998b00d6)
1*084fd14fSBrian Behlendorf /*
2*084fd14fSBrian Behlendorf  * This file and its contents are supplied under the terms of the
3*084fd14fSBrian Behlendorf  * Common Development and Distribution License ("CDDL"), version 1.0.
4*084fd14fSBrian Behlendorf  * You may only use this file in accordance with the terms of version
5*084fd14fSBrian Behlendorf  * 1.0 of the CDDL.
6*084fd14fSBrian Behlendorf  *
7*084fd14fSBrian Behlendorf  * A full copy of the text of the CDDL should have accompanied this
8*084fd14fSBrian Behlendorf  * source.  A copy of the CDDL is also available via the Internet at
9*084fd14fSBrian Behlendorf  * http://www.illumos.org/license/CDDL.
10*084fd14fSBrian Behlendorf  */
11*084fd14fSBrian Behlendorf 
12*084fd14fSBrian Behlendorf /*
13*084fd14fSBrian Behlendorf  * Copyright 2019 Joyent, Inc.
14*084fd14fSBrian Behlendorf  */
15*084fd14fSBrian Behlendorf 
16*084fd14fSBrian Behlendorf #include <sys/types.h>
17*084fd14fSBrian Behlendorf #include <sys/stat.h>
18*084fd14fSBrian Behlendorf #include <fcntl.h>
19*084fd14fSBrian Behlendorf #include <stdio.h>
20*084fd14fSBrian Behlendorf #include <stdlib.h>
21*084fd14fSBrian Behlendorf #include <errno.h>
22*084fd14fSBrian Behlendorf #include <string.h>
23*084fd14fSBrian Behlendorf #include <unistd.h>
24*084fd14fSBrian Behlendorf #include <sys/dkio.h>
25*084fd14fSBrian Behlendorf 
26*084fd14fSBrian Behlendorf int
main(int argc,char ** argv)27*084fd14fSBrian Behlendorf main(int argc, char **argv)
28*084fd14fSBrian Behlendorf {
29*084fd14fSBrian Behlendorf 	int umap, fd;
30*084fd14fSBrian Behlendorf 
31*084fd14fSBrian Behlendorf 	if (argc < 2) {
32*084fd14fSBrian Behlendorf 		fprintf(stderr, "missing disk name\n");
33*084fd14fSBrian Behlendorf 		exit(2);
34*084fd14fSBrian Behlendorf 	}
35*084fd14fSBrian Behlendorf 
36*084fd14fSBrian Behlendorf 	if ((fd = open(argv[1], O_RDONLY)) == -1) {
37*084fd14fSBrian Behlendorf 		fprintf(stderr, "couldn't open %s: %s\n", argv[1],
38*084fd14fSBrian Behlendorf 		    strerror(errno));
39*084fd14fSBrian Behlendorf 		exit(2);
40*084fd14fSBrian Behlendorf 	}
41*084fd14fSBrian Behlendorf 
42*084fd14fSBrian Behlendorf 	if (ioctl(fd, DKIOC_CANFREE, &umap) < 0) {
43*084fd14fSBrian Behlendorf 		fprintf(stderr, "ioctl failed %s: %s\n", argv[1],
44*084fd14fSBrian Behlendorf 		    strerror(errno));
45*084fd14fSBrian Behlendorf 		exit(2);
46*084fd14fSBrian Behlendorf 	}
47*084fd14fSBrian Behlendorf 
48*084fd14fSBrian Behlendorf 	(void) close(fd);
49*084fd14fSBrian Behlendorf 
50*084fd14fSBrian Behlendorf 	return (umap ? 0 : 1);
51*084fd14fSBrian Behlendorf }
52