Index: head/usr.sbin/trim/trim.c =================================================================== --- head/usr.sbin/trim/trim.c (revision 341355) +++ head/usr.sbin/trim/trim.c (nonexistent) @@ -1,210 +0,0 @@ -/*- - * SPDX-License-Identifier: BSD-2-Clause-FreeBSD - * - * Copyright (c) 2018 Eugene Grosbein . - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - */ - -#include -#include -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include -__FBSDID("$FreeBSD$"); - -static off_t getsize(const char *path); -static int opendev(const char *path, int flags); -static int trim(const char *path, off_t offset, off_t length, bool dryrun, bool verbose); -static void usage(const char *name); - -int -main(int argc, char **argv) -{ - off_t offset, length; - uint64_t usz; - int ch, error; - bool dryrun, verbose; - char *fname, *name; - - error = 0; - length = offset = 0; - name = argv[0]; - dryrun = verbose = true; - - while ((ch = getopt(argc, argv, "Nfl:o:qr:v")) != -1) - switch (ch) { - case 'N': - dryrun = true; - verbose = true; - break; - case 'f': - dryrun = false; - break; - case 'l': - case 'o': - if (expand_number(optarg, &usz) == -1 || - (off_t)usz < 0 || (usz == 0 && ch == 'l')) - errx(EX_USAGE, - "invalid %s of the region: %s", - ch == 'o' ? "offset" : "length", - optarg); - if (ch == 'o') - offset = (off_t)usz; - else - length = (off_t)usz; - break; - case 'q': - verbose = false; - break; - case 'r': - if ((length = getsize(optarg)) == 0) - errx(EX_USAGE, - "invalid zero length reference file" - " for the region: %s", optarg); - break; - case 'v': - verbose = true; - break; - default: - usage(name); - /* NOTREACHED */ - } - - argv += optind; - argc -= optind; - - if (argc < 1) - usage(name); - - while ((fname = *argv++) != NULL) - if (trim(fname, offset, length, dryrun, verbose) < 0) - error++; - - return (error ? EXIT_FAILURE : EXIT_SUCCESS); -} - -static int -opendev(const char *path, int flags) -{ - int fd; - char *tstr; - - if ((fd = open(path, flags)) < 0) { - if (errno == ENOENT && path[0] != '/') { - if (asprintf(&tstr, "%s%s", _PATH_DEV, path) < 0) - errx(EX_OSERR, "no memory"); - fd = open(tstr, flags); - free(tstr); - } - } - - if (fd < 0) - err(EX_NOINPUT, "fstat failed: %s", path); - - return (fd); -} - -static off_t -getsize(const char *path) -{ - struct stat sb; - off_t mediasize; - int fd; - - fd = opendev(path, O_RDONLY | O_DIRECT); - - if (fstat(fd, &sb) < 0) - err(EX_IOERR, "fstat failed: %s", path); - - if (S_ISREG(sb.st_mode) || S_ISDIR(sb.st_mode)) { - close(fd); - return (sb.st_size); - } - - if (!S_ISCHR(sb.st_mode) && !S_ISBLK(sb.st_mode)) - errx(EX_DATAERR, - "invalid type of the file " - "(not regular, directory nor special device): %s", - path); - - if (ioctl(fd, DIOCGMEDIASIZE, &mediasize) < 0) - err(EX_UNAVAILABLE, - "ioctl(DIOCGMEDIASIZE) failed, probably not a disk: " - "%s", path); - - close(fd); - return (mediasize); -} - -static int -trim(const char *path, off_t offset, off_t length, bool dryrun, bool verbose) -{ - off_t arg[2]; - int error, fd; - - if (length == 0) - length = getsize(path); - - if (verbose) - printf("trim %s offset %ju length %ju\n", - path, (uintmax_t)offset, (uintmax_t)length); - - if (dryrun) { - printf("dry run: add -f to actually perform the operation\n"); - return (0); - } - - fd = opendev(path, O_WRONLY | O_DIRECT); - arg[0] = offset; - arg[1] = length; - - error = ioctl(fd, DIOCGDELETE, arg); - if (error < 0) - warn("ioctl(DIOCGDELETE) failed: %s", path); - - close(fd); - return (error); -} - -static void -usage(const char *name) -{ - (void)fprintf(stderr, - "usage: %s [-[lo] offset[K|k|M|m|G|g|T|t]] [-r rfile] [-Nfqv] device ...\n", - name); - exit(EX_USAGE); -} Property changes on: head/usr.sbin/trim/trim.c ___________________________________________________________________ Deleted: svn:eol-style ## -1 +0,0 ## -native \ No newline at end of property Deleted: svn:keywords ## -1 +0,0 ## -FreeBSD=%H \ No newline at end of property Deleted: svn:mime-type ## -1 +0,0 ## -text/plain \ No newline at end of property Index: head/usr.sbin/trim/Makefile =================================================================== --- head/usr.sbin/trim/Makefile (revision 341355) +++ head/usr.sbin/trim/Makefile (nonexistent) @@ -1,7 +0,0 @@ -# $FreeBSD$ - -PROG= trim -MAN= trim.8 -LIBADD= util - -.include Property changes on: head/usr.sbin/trim/Makefile ___________________________________________________________________ Deleted: svn:eol-style ## -1 +0,0 ## -native \ No newline at end of property Deleted: svn:keywords ## -1 +0,0 ## -FreeBSD=%H \ No newline at end of property Deleted: svn:mime-type ## -1 +0,0 ## -text/plain \ No newline at end of property Index: head/usr.sbin/trim/trim.8 =================================================================== --- head/usr.sbin/trim/trim.8 (revision 341355) +++ head/usr.sbin/trim/trim.8 (nonexistent) @@ -1,167 +0,0 @@ -.\" -.\" Copyright (c) 2018 Eugene Grosbein . -.\" All rights reserved. -.\" -.\" Redistribution and use in source and binary forms, with or without -.\" modification, are permitted provided that the following conditions -.\" are met: -.\" 1. Redistributions of source code must retain the above copyright -.\" notice, this list of conditions and the following disclaimer. -.\" 2. Redistributions in binary form must reproduce the above copyright -.\" notice, this list of conditions and the following disclaimer in the -.\" documentation and/or other materials provided with the distribution. -.\" -.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND -.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE -.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS -.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT -.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY -.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF -.\" SUCH DAMAGE. -.\" -.\" $FreeBSD$ -.\" -.Dd November 29, 2018 -.Dt TRIM 8 -.Os -.Sh NAME -.Nm trim -.Nd erase device blocks that have no needed contents -.Sh SYNOPSIS -.Nm -.Op Fl Nfqv -.Fl [ [lo] Xo -.Bk -words -.Sm off -.Ar offset -.Op Cm K | k | M | m | G | g | T | t ] -.Sm on -.Xc -.Ek -.Bk -words -.Op Fl r Ar rfile -.Ek -.Ar device ... -.Sh DESCRIPTION -The -.Nm -utility erases specified region of the device. -It is mostly relevant for storage that implement trim (like flash based, -or thinly provisioned storage). -.Sy All erased data is lost. -.Pp -The following options are available: -.Bl -tag -width indent -.It Fl N -Do not actually erase anything but show what it would do (dry run). -Implies -.Fl v . -This is the default. Overrides -.Fl f . -.It Fl f -Perform the operation. Overrides -.Fl N . -.It Fl l Xo -.Sm off -.Ar offset -.Op Cm K | k | M | m | G | g | T | t -.Sm on -.Xc -.It Fl o Xo -.Sm off -.Ar offset -.Op Cm K | k | M | m | G | g | T | t -.Sm on -.Xc -Specify the length -.Fl l -of the region to trim or its offset -.Fl o -from the beginning of the device. -.Sy The whole device is erased by default -unless one or both of these options are presented. -.Pp -The argument may be suffixed with one of -.Cm K , -.Cm M , -.Cm G -or -.Cm T -(either upper or lower case) to indicate a multiple of -Kilobytes, Megabytes, Gigabytes or Terabytes -respectively. -.It Fl q -Do not output anything except of possible error messages (quiet mode). -Overrides -.Fl v . -.It Fl r Ar rfile -Uses the length of given -.Ar rfile -as length of the region to erase. -.Sy The whole device is erased by default. -.It Fl v -Show offset and length of actual region being erased, in bytes. -.El -.Pp -Later options override previous ones. -.Pp -Note that actual success of the operation depends of underlying -device driver such as -.Xr ada 4 , -.Xr da 4 -and others. -Refer to corresponding manual pages for detail on possible caveats -in low level support for ATA TRIM or SCSI UNMAP commands. -.Sh EXIT STATUS -.Ex -std -If the final erase operation fails for an argument, the -.Nm -utility returns exit code 1. -It can also return one of the exit codes defined in -.Xr sysexits 3 , -as follows: -.Bl -tag -width ".Dv EX_UNAVAILABLE" -.It Dv EX_USAGE -The specified offset or length of the region is incorrect. -.It Dv EX_OSERR -There is no enough memory to proceed. -.It Dv EX_NOINPUT -The specified -.Ar rfile -cannot be opened (perhaps, it does not exist). -.It Dv EX_IOERR -The specified -.Ar rfile -cannot be examined for its size due to some system input/output error. -.It Dv EX_DATAERR -The specified -.Ar rfile -is not regular file, directory nor special device, so its size -cannot be examined. -.It Dv EX_UNAVAILABLE -The specified -.Ar rfile -is special device file not supporting DIOCGMEDIASIZE -.Xr ioctl 2 -(probably not a disk), so its size cannot be examined. -.El -.Sh SEE ALSO -.Xr ada 4 , -.Xr da 4 , -.Xr ioctl 2 , -.Xr nda 4 , -.Xr sysexits 3 -.Sh HISTORY -The -.Nm -utility first appeared in -.Fx 12.1 . -.Sh AUTHORS -The -.Nm -utility was written by -.An Eugene Grosbein Aq Mt eugen@FreeBSD.org . Property changes on: head/usr.sbin/trim/trim.8 ___________________________________________________________________ Deleted: svn:eol-style ## -1 +0,0 ## -native \ No newline at end of property Deleted: svn:keywords ## -1 +0,0 ## -FreeBSD=%H \ No newline at end of property Deleted: svn:mime-type ## -1 +0,0 ## -text/plain \ No newline at end of property Index: head/usr.sbin/Makefile =================================================================== --- head/usr.sbin/Makefile (revision 341355) +++ head/usr.sbin/Makefile (revision 341356) @@ -1,226 +1,225 @@ # From: @(#)Makefile 5.20 (Berkeley) 6/12/93 # $FreeBSD$ .include SUBDIR= adduser \ arp \ binmiscctl \ camdd \ cdcontrol \ chkgrp \ chown \ chroot \ ckdist \ clear_locks \ crashinfo \ cron \ ctladm \ ctld \ daemon \ dconschat \ devctl \ devinfo \ diskinfo \ dumpcis \ etcupdate \ extattr \ extattrctl \ fifolog \ fstyp \ fwcontrol \ getfmac \ getpmac \ gstat \ i2c \ ifmcstat \ iostat \ iovctl \ kldxref \ mailwrapper \ makefs \ memcontrol \ mergemaster \ mfiutil \ mixer \ mlxcontrol \ mountd \ mount_smbfs \ mpsutil \ mptutil \ mtest \ newsyslog \ nfscbd \ nfsd \ nfsdumpstate \ nfsrevoke \ nfsuserd \ nmtree \ nologin \ pciconf \ periodic \ pnfsdscopymr \ pnfsdsfile \ pnfsdskill \ powerd \ prometheus_sysctl_exporter \ pstat \ pw \ pwd_mkdb \ quot \ rarpd \ rmt \ rpcbind \ rpc.lockd \ rpc.statd \ rpc.umntall \ rtprio \ rwhod \ service \ services_mkdb \ sesutil \ setfib \ setfmac \ setpmac \ smbmsg \ snapinfo \ spi \ spray \ syslogd \ sysrc \ tcpdrop \ tcpdump \ traceroute \ - trim \ trpt \ tzsetup \ ugidfw \ vigr \ vipw \ wake \ watch \ watchdogd \ zic \ zonectl # NB: keep these sorted by MK_* knobs SUBDIR.${MK_ACCT}+= accton SUBDIR.${MK_ACCT}+= sa SUBDIR.${MK_AMD}+= amd SUBDIR.${MK_AUDIT}+= audit SUBDIR.${MK_AUDIT}+= auditd .if ${MK_OPENSSL} != "no" SUBDIR.${MK_AUDIT}+= auditdistd .endif SUBDIR.${MK_AUDIT}+= auditreduce SUBDIR.${MK_AUDIT}+= praudit SUBDIR.${MK_AUTHPF}+= authpf SUBDIR.${MK_AUTOFS}+= autofs SUBDIR.${MK_BLACKLIST}+= blacklistctl SUBDIR.${MK_BLACKLIST}+= blacklistd SUBDIR.${MK_BLUETOOTH}+= bluetooth SUBDIR.${MK_BOOTPARAMD}+= bootparamd SUBDIR.${MK_BSDINSTALL}+= bsdinstall SUBDIR.${MK_BSNMP}+= bsnmpd SUBDIR.${MK_CTM}+= ctm SUBDIR.${MK_CXGBETOOL}+= cxgbetool SUBDIR.${MK_DIALOG}+= bsdconfig SUBDIR.${MK_EFI}+= efivar efidp efibootmgr .if ${MK_OPENSSL} != "no" SUBDIR.${MK_EFI}+= uefisign .endif SUBDIR.${MK_FLOPPY}+= fdcontrol SUBDIR.${MK_FLOPPY}+= fdformat SUBDIR.${MK_FLOPPY}+= fdread SUBDIR.${MK_FLOPPY}+= fdwrite SUBDIR.${MK_FMTREE}+= fmtree SUBDIR.${MK_FREEBSD_UPDATE}+= freebsd-update SUBDIR.${MK_GSSAPI}+= gssd SUBDIR.${MK_GPIO}+= gpioctl SUBDIR.${MK_INET6}+= ip6addrctl SUBDIR.${MK_INET6}+= mld6query SUBDIR.${MK_INET6}+= ndp SUBDIR.${MK_INET6}+= rip6query SUBDIR.${MK_INET6}+= route6d SUBDIR.${MK_INET6}+= rrenumd SUBDIR.${MK_INET6}+= rtadvctl SUBDIR.${MK_INET6}+= rtadvd SUBDIR.${MK_INET6}+= rtsold SUBDIR.${MK_INET6}+= traceroute6 SUBDIR.${MK_INETD}+= inetd SUBDIR.${MK_IPFW}+= ipfwpcap SUBDIR.${MK_ISCSI}+= iscsid SUBDIR.${MK_JAIL}+= jail SUBDIR.${MK_JAIL}+= jexec SUBDIR.${MK_JAIL}+= jls # XXX MK_SYSCONS SUBDIR.${MK_LEGACY_CONSOLE}+= kbdcontrol SUBDIR.${MK_LEGACY_CONSOLE}+= kbdmap SUBDIR.${MK_LEGACY_CONSOLE}+= moused SUBDIR.${MK_LEGACY_CONSOLE}+= vidcontrol .if ${MK_LIBTHR} != "no" || ${MK_LIBPTHREAD} != "no" SUBDIR.${MK_PPP}+= pppctl SUBDIR.${MK_NS_CACHING}+= nscd .endif SUBDIR.${MK_LPR}+= lpr SUBDIR.${MK_MAN_UTILS}+= manctl SUBDIR.${MK_MLX5TOOL}+= mlx5tool SUBDIR.${MK_NAND}+= nandsim SUBDIR.${MK_NAND}+= nandtool SUBDIR.${MK_NETGRAPH}+= flowctl SUBDIR.${MK_NETGRAPH}+= ngctl SUBDIR.${MK_NETGRAPH}+= nghook SUBDIR.${MK_NIS}+= rpc.yppasswdd SUBDIR.${MK_NIS}+= rpc.ypupdated SUBDIR.${MK_NIS}+= rpc.ypxfrd SUBDIR.${MK_NIS}+= ypbind SUBDIR.${MK_NIS}+= ypldap SUBDIR.${MK_NIS}+= yp_mkdb SUBDIR.${MK_NIS}+= yppoll SUBDIR.${MK_NIS}+= yppush SUBDIR.${MK_NIS}+= ypserv SUBDIR.${MK_NIS}+= ypset SUBDIR.${MK_NTP}+= ntp SUBDIR.${MK_OPENSSL}+= keyserv SUBDIR.${MK_PC_SYSINSTALL}+= pc-sysinstall SUBDIR.${MK_PF}+= ftp-proxy SUBDIR.${MK_PKGBOOTSTRAP}+= pkg .if ${COMPILER_FEATURES:Mc++11} SUBDIR.${MK_PMC}+= pmc .endif SUBDIR.${MK_PMC}+= pmcannotate pmccontrol pmcstat pmcstudy SUBDIR.${MK_PORTSNAP}+= portsnap SUBDIR.${MK_PPP}+= ppp SUBDIR.${MK_QUOTAS}+= edquota SUBDIR.${MK_QUOTAS}+= quotaon SUBDIR.${MK_QUOTAS}+= repquota SUBDIR.${MK_SENDMAIL}+= editmap SUBDIR.${MK_SENDMAIL}+= mailstats SUBDIR.${MK_SENDMAIL}+= makemap SUBDIR.${MK_SENDMAIL}+= praliases SUBDIR.${MK_SENDMAIL}+= sendmail SUBDIR.${MK_TCP_WRAPPERS}+= tcpdchk SUBDIR.${MK_TCP_WRAPPERS}+= tcpdmatch SUBDIR.${MK_TIMED}+= timed SUBDIR.${MK_TOOLCHAIN}+= config SUBDIR.${MK_TOOLCHAIN}+= crunch SUBDIR.${MK_UNBOUND}+= unbound SUBDIR.${MK_USB}+= uathload SUBDIR.${MK_USB}+= uhsoctl SUBDIR.${MK_USB}+= usbconfig SUBDIR.${MK_USB}+= usbdump SUBDIR.${MK_UTMPX}+= ac SUBDIR.${MK_UTMPX}+= lastlogin SUBDIR.${MK_UTMPX}+= utx SUBDIR.${MK_WIRELESS}+= ancontrol SUBDIR.${MK_WIRELESS}+= wlandebug SUBDIR.${MK_WIRELESS}+= wpa SUBDIR.${MK_TESTS}+= tests .include SUBDIR_PARALLEL= .include