+1 on the revised spec. It seems like (not this project) someone ought to pursue getting support for high resolution timestamps into the next NFS specification.
- Garrett Roger A. Faulkner wrote: > In response to the e-mail discussion of this case, > I am submitting this revised specification: > > futimens, utimensat > > 1. Introduction > > This case adds two new functions to the C library, > futimens() and utimensat(), as follows: > > #include <sys/stat.h> > > int futimens(int fd, const struct timespec times[2]); > > int utimensat(int fd, const char *path, > const struct timespec times[2], int flag); > > In addition, in order to query the timestamp resolution for > a given file or directory, fpathconf() and pathconf() will > be extended to accept a new name, _PC_TIMESTAMP_RESOLUTION, > defined in <unistd.h>. The return value of fpathconf() > and pathconf() in this case will be a number in the range > 1 to 1000 million, indicating the number of nanoseconds > of the file's timestamp resolution. Each local file system > will be made to understand this new VOP_PATHCONF operation > and return the appropriate value. > > Finally, the touch(1) utility will be updated to use the > new interfaces and to provide a date_time specification > that includes up to nanosecond resolution. > > The commitment level of these interfaces is Committed. > > The release binding is "patch" > (so it can be back-ported to Solaris 10 if required). > > 2. Discussion > > Problems with, for example, make on ZFS file systems have > emerged because ZFS keeps access and modification times for > its files with nanosecond granularity, while commands such > as touch(1) will only set access and modification times of > its target files to microsecond granularity (rounded down). > See the bugid: > > 6539657 touch(1) does not set the nanosecond timestamp > of a file correctly > > The touch(1) command (and possibly others) need a system call > interface that sets access and modification times of files > with nanosecond granularity. > > Happily, such interfaces have been designed and are specified > in the latest SUSv4 Posix interface specification: > > #include <sys/stat.h> > > int futimens(int fd, const struct timespec times[2]); > > int utimensat(int fd, const char *path, > const struct timespec times[2], int flag); > > Even though Solaris does not (yet) implement the new Posix > standard, there is nothing stopping Solaris from providing > a few of the newly-specified interfaces (provided that the > names are appropriately hidden from view when an old > standards-conforming application is compiled). > > 3. Interface table > > The futimens() and utimensat() functions are Committed. > Both are specified by the latest Posix specification. > > The fpathconf() name _PC_TIMESTAMP_RESOLUTION and operation are > Committed and are specified by the latest Posix specification. > > The updated touch(1) command line interface is Committed > and is specified by the latest Posix specification. > > 4. References > > 6815302 Implement futimens, utimensat(POSIX.1-2008) - > set file modification times with nanosecond granularity > > 5. Manual pages. > > See the materials directory for the new futimens(2) manual page. > This is copied from the Posix specification, with minor changes > such as changing "shall" to "will" in the text. > > See the subdirectories 'oldman' and 'newman' under the > materials directory to view the old and new manual pages for > getconf.1 > touch.1 > pathconf.2 > utime.2 > utimes.2 > stat.h.3head > unistd.h.3head > The 'newman' files contain modifications reflecting the changes > described in this proposal. Use 'diff' to view the differences > between the old and new manual pages. > > Roger Faulkner > >