This is mostly the same as O_SYNC, but can potentially skip writing out stuff that isn't required for reading the data back.
From the point of view of a file system, this is reported as the new flag IO_DATASYNC passed to VOP_WRITE(), along with the existing IO_SYNC flag. That means that filesystems that don't know about IO_DATASYNC yet can keep on doing what they're doing, but those that understand IO_DATASYNC can modify their behaviour.
Once D25072 goes in, it should be possible to teach ffs_write() to understand IO_DATASYNC, to avoid unnecesssary inode write-back.
Also, fix up some related outdated comments and man pages: a claim that f_flag is a short (not true for a very long time), some missing flags and a typo in fcntl.2, and some language that makes O_SYNC seem like second fiddle to O_FSYNC, when IMHO it should now be the other way around.
Also, adjust the ZFS macro that redefines FDSYNC not to do that anymore. Even though with this patch it becomes a value distinct from FFSYNC, that's OK because zfs_vnops.c, zfs_log.c, zvol.c, vdev_file.c always test for (FSYNC | FDSYNC) anwyay.
A separate patch will add O_DSYNC support for aio_fsync(2), see D25071.