diff options
author | kib <kib@FreeBSD.org> | 2010-12-29 12:31:18 +0000 |
---|---|---|
committer | kib <kib@FreeBSD.org> | 2010-12-29 12:31:18 +0000 |
commit | d69a17ac0a884f83a0d321fb56d071796e6a1568 (patch) | |
tree | 8ab612371e7500ee1c3bac44a09208490c294417 /sbin/newfs | |
parent | 17dccd1898b6a0ddd49fcd77d7314ddc494cbac8 (diff) | |
download | FreeBSD-src-d69a17ac0a884f83a0d321fb56d071796e6a1568.zip FreeBSD-src-d69a17ac0a884f83a0d321fb56d071796e6a1568.tar.gz |
Add support for FS_TRIM to user-mode UFS utilities.
Reviewed by: mckusick, pjd, pho
Tested by: pho
MFC after: 1 month
Diffstat (limited to 'sbin/newfs')
-rw-r--r-- | sbin/newfs/mkfs.c | 2 | ||||
-rw-r--r-- | sbin/newfs/newfs.8 | 12 | ||||
-rw-r--r-- | sbin/newfs/newfs.c | 7 | ||||
-rw-r--r-- | sbin/newfs/newfs.h | 1 |
4 files changed, 19 insertions, 3 deletions
diff --git a/sbin/newfs/mkfs.c b/sbin/newfs/mkfs.c index 8092290..96fa9eb 100644 --- a/sbin/newfs/mkfs.c +++ b/sbin/newfs/mkfs.c @@ -151,6 +151,8 @@ mkfs(struct partition *pp, char *fsys) sblock.fs_flags |= FS_GJOURNAL; if (lflag) sblock.fs_flags |= FS_MULTILABEL; + if (tflag) + sblock.fs_flags |= FS_TRIM; /* * Validate the given file system size. * Verify that its last block can actually be accessed. diff --git a/sbin/newfs/newfs.8 b/sbin/newfs/newfs.8 index 10631f9..b542739 100644 --- a/sbin/newfs/newfs.8 +++ b/sbin/newfs/newfs.8 @@ -28,7 +28,7 @@ .\" @(#)newfs.8 8.6 (Berkeley) 5/3/95 .\" $FreeBSD$ .\" -.Dd September 14, 2010 +.Dd December 9, 2010 .Dt NEWFS 8 .Os .Sh NAME @@ -36,7 +36,7 @@ .Nd construct a new UFS1/UFS2 file system .Sh SYNOPSIS .Nm -.Op Fl EJNUln +.Op Fl EJNUlnt .Op Fl L Ar volname .Op Fl O Ar filesystem-type .Op Fl S Ar sector-size @@ -241,6 +241,14 @@ A valid .Ar size value cannot be larger than the default one, which means that the file system cannot extend into the reserved space. +.It Fl t +Turn on the TRIM enable flag. +If enabled, and if the underlying device supports the BIO_DELETE +command, the file system will send a delete request to the underlying +device for each freed block. +The trim enable flag is typically set when the underlying device +uses flash-memory as the device can use the delete command to +pre-zero or at least avoid copying blocks that have been deleted. .El .Pp The following options override the standard sizes for the disk geometry. diff --git a/sbin/newfs/newfs.c b/sbin/newfs/newfs.c index b66e1ec..0e5b7da 100644 --- a/sbin/newfs/newfs.c +++ b/sbin/newfs/newfs.c @@ -91,6 +91,7 @@ int Xflag = 0; /* exit in middle of newfs for testing */ int Jflag; /* enable gjournal for file system */ int lflag; /* enable multilabel for file system */ int nflag; /* do not create .snap directory */ +int tflag; /* enable TRIM */ intmax_t fssize; /* file system size */ int sectorsize; /* bytes/sector */ int realsectorsize; /* bytes/sector in hardware */ @@ -139,7 +140,7 @@ main(int argc, char *argv[]) part_name = 'c'; reserved = 0; while ((ch = getopt(argc, argv, - "EJL:NO:RS:T:UXa:b:c:d:e:f:g:h:i:lm:no:p:r:s:")) != -1) + "EJL:NO:RS:T:UXa:b:c:d:e:f:g:h:i:lm:no:p:r:s:t")) != -1) switch (ch) { case 'E': Eflag = 1; @@ -279,6 +280,9 @@ main(int argc, char *argv[]) *cp != '\0' || fssize < 0) errx(1, "%s: bad file system size", optarg); break; + case 't': + tflag = 1; + break; case '?': default: usage(); @@ -495,6 +499,7 @@ usage() fprintf(stderr, "\t-p partition name (a..h)\n"); fprintf(stderr, "\t-r reserved sectors at the end of device\n"); fprintf(stderr, "\t-s file system size (sectors)\n"); + fprintf(stderr, "\t-t enable TRIM\n"); exit(1); } diff --git a/sbin/newfs/newfs.h b/sbin/newfs/newfs.h index 9da3226..8c826b1 100644 --- a/sbin/newfs/newfs.h +++ b/sbin/newfs/newfs.h @@ -85,6 +85,7 @@ extern int Xflag; /* exit in middle of newfs for testing */ extern int Jflag; /* enable gjournal for file system */ extern int lflag; /* enable multilabel MAC for file system */ extern int nflag; /* do not create .snap directory */ +extern int tflag; /* enable TRIM */ extern intmax_t fssize; /* file system size */ extern int sectorsize; /* bytes/sector */ extern int realsectorsize; /* bytes/sector in hardware*/ |