+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
>
>   


Reply via email to