.SH SYNOPSIS
.B @SA_LIB_DIR@/sadc [ -C
.I comment
-.B ] [ -D ] [ -F ] [ -L ] [ -V ] [ -S { keyword [,...] | ALL | XALL } ] [
+.B ] [ -D ] [ -F ] [ -L ] [ -V ] [ -f ] [ -S { keyword [,...] | ALL | XALL } ] [
.I interval
.B [
.I count
created by an older version of
.B sadc
and whose format is no longer compatible with current one.
+.IP -f
+fdatasync() will be used to ensure data is written to disk. This differs
+from the normal operation in that a sudden system reset is less likely to
+result in the saDD datafiles being corrupted. However, this is at the
+expense of performance within the sadc process as forward progress will be
+blocked while data is written to underlying disk instead of just to cache.
.IP -L
.B sadc
will try to get an exclusive lock on the
#define S_F_HUMAN_READ 0x01000000
#define S_F_ZERO_OMIT 0x02000000
#define S_F_SVG_SHOW_TOC 0x04000000
+#define S_F_FDATASYNC 0x08000000
#define WANT_SINCE_BOOT(m) (((m) & S_F_SINCE_BOOT) == S_F_SINCE_BOOT)
#define WANT_SA_ROTAT(m) (((m) & S_F_SA_ROTAT) == S_F_SA_ROTAT)
#define PACK_VIEWS(m) (((m) & S_F_SVG_PACKED) == S_F_SVG_PACKED)
#define DISPLAY_HUMAN_READ(m) (((m) & S_F_HUMAN_READ) == S_F_HUMAN_READ)
#define DISPLAY_TOC(m) (((m) & S_F_SVG_SHOW_TOC) == S_F_SVG_SHOW_TOC)
+#define FDATASYNC(m) (((m) & S_F_FDATASYNC) == S_F_FDATASYNC)
#define AO_F_NULL 0x00000000
progname);
fprintf(stderr, _("Options are:\n"
- "[ -C <comment> ] [ -D ] [ -F ] [ -L ] [ -V ]\n"
+ "[ -C <comment> ] [ -D ] [ -F ] [ -L ] [ -V ] [ -f ]\n"
"[ -S { INT | DISK | IPV6 | POWER | SNMP | XDISK | ALL | XALL } ]\n"));
exit(1);
}
/* Flush data */
fflush(stdout);
+ if (FDATASYNC(flags)) {
+ /* If indicated, sync the data to media */
+ if (fdatasync(ofd) < 0) {
+ perror("fdatasync");
+ exit(4);
+ }
+ }
if (count > 0) {
count--;
optz = 1;
}
+ else if (!strcmp(argv[opt], "-f")) {
+ flags |= S_F_FDATASYNC;
+ }
+
else if (!strcmp(argv[opt], "-C")) {
if (!argv[++opt]) {
usage(argv[0]);