svn commit: r351770 - head/bin/dd

Matt Macy mmacy at FreeBSD.org
Tue Sep 3 18:35:56 UTC 2019


Author: mmacy
Date: Tue Sep  3 18:35:55 2019
New Revision: 351770
URL: https://svnweb.freebsd.org/changeset/base/351770

Log:
  Add conv=fsync flag to dd
  
  The fsync flag performs an fsync(2) on the output file before closing it.
  This will be useful for the ZFS test suite.
  
  Submitted by:	ryan at ixsystems.com
  Reviewed by:	jilles@, imp@
  MFC after:	1 week
  Sponsored by:	iXsystems, Inc.

Modified:
  head/bin/dd/args.c
  head/bin/dd/dd.1
  head/bin/dd/dd.c
  head/bin/dd/dd.h

Modified: head/bin/dd/args.c
==============================================================================
--- head/bin/dd/args.c	Tue Sep  3 18:32:29 2019	(r351769)
+++ head/bin/dd/args.c	Tue Sep  3 18:35:55 2019	(r351770)
@@ -320,6 +320,7 @@ static const struct conv {
 	{ "ascii",	C_ASCII,	C_EBCDIC,	e2a_POSIX },
 	{ "block",	C_BLOCK,	C_UNBLOCK,	NULL },
 	{ "ebcdic",	C_EBCDIC,	C_ASCII,	a2e_POSIX },
+	{ "fsync",	C_FSYNC,	0,		NULL },
 	{ "ibm",	C_EBCDIC,	C_ASCII,	a2ibm_POSIX },
 	{ "lcase",	C_LCASE,	C_UCASE,	NULL },
 	{ "noerror",	C_NOERROR,	0,		NULL },

Modified: head/bin/dd/dd.1
==============================================================================
--- head/bin/dd/dd.1	Tue Sep  3 18:32:29 2019	(r351769)
+++ head/bin/dd/dd.1	Tue Sep  3 18:35:55 2019	(r351770)
@@ -252,6 +252,10 @@ are maps used in historic
 and
 .No pre- Ns Bx 4.3 reno
 systems.
+.It Cm fsync
+Perform an
+.Xr fsync 2
+on the output file before closing it.
 .It Cm lcase
 Transform uppercase characters into lowercase characters.
 .It Cm pareven , parnone , parodd , parset

Modified: head/bin/dd/dd.c
==============================================================================
--- head/bin/dd/dd.c	Tue Sep  3 18:32:29 2019	(r351769)
+++ head/bin/dd/dd.c	Tue Sep  3 18:35:55 2019	(r351770)
@@ -164,6 +164,8 @@ setup(void)
 		errx(1, "files is not supported for non-tape devices");
 
 	cap_rights_set(&rights, CAP_FTRUNCATE, CAP_IOCTL, CAP_WRITE);
+	if (ddflags & C_FSYNC)
+		cap_rights_set(&rights, CAP_FSYNC);
 	if (out.name == NULL) {
 		/* No way to check for read access here. */
 		out.fd = STDOUT_FILENO;
@@ -504,6 +506,11 @@ dd_close(void)
 	if (out.seek_offset > 0 && (out.flags & ISTRUNC)) {
 		if (ftruncate(out.fd, out.seek_offset) == -1)
 			err(1, "truncating %s", out.name);
+	}
+
+	if (ddflags & C_FSYNC) {
+		if (fsync(out.fd) == -1)
+			err(1, "fsyncing %s", out.name);
 	}
 }
 

Modified: head/bin/dd/dd.h
==============================================================================
--- head/bin/dd/dd.h	Tue Sep  3 18:32:29 2019	(r351769)
+++ head/bin/dd/dd.h	Tue Sep  3 18:35:55 2019	(r351770)
@@ -101,6 +101,7 @@ typedef struct {
 #define	C_NOXFER	0x10000000
 #define	C_NOINFO	0x20000000
 #define	C_PROGRESS	0x40000000
+#define	C_FSYNC		0x80000000
 
 #define	C_PARITY	(C_PAREVEN | C_PARODD | C_PARNONE | C_PARSET)
 


More information about the svn-src-head mailing list