[Libguestfs] [PATCH] New APIs: Implement stat calls that return nanosecond timestamps (RHBZ#1144891).

Pino Toscano ptoscano at redhat.com
Mon Sep 22 15:18:27 UTC 2014


On Monday 22 September 2014 13:48:38 Richard W.M. Jones wrote:
> The existing APIs guestfs_stat, guestfs_lstat and guestfs_lstatlist
> return a stat structure that contains atime, mtime and ctime fields
> that store only the timestamp in seconds.
> 
> Modern filesystems can store timestamps down to nanosecond
> granularity, and the ordinary glibc stat(2) wrapper will return these
> in "hidden" stat fields:
> 
>   struct timespec st_atim;            /* Time of last access.  */
>   struct timespec st_mtim;            /* Time of last modification. 
> */ struct timespec st_ctim;            /* Time of last status change.
>  */
> 
> with the following macros defined for backwards compatibility:
> 
>   #define st_atime st_atim.tv_sec
>   #define st_mtime st_mtim.tv_sec
>   #define st_ctime st_ctim.tv_sec
> 
> It is not possible to redefine guestfs_stat to return a longer struct
> guestfs_stat with room for the extra nanosecond fields, because that
> would break the ABI of guestfs_lstatlist as it returns an array
> containing consecutive stat structs (not pointers).  Changing the
> return type of guestfs_stat would break API.  Changing the generator
> to support symbol versioning is judged to be too intrusive.
> 
> Therefore this adds a new struct (guestfs_statns) and new APIs:
> 
>   guestfs_statns
>   guestfs_lstatns
>   guestfs_lstatnslist
> 
> which return the new struct (or array of structs in the last case).
> 
> The old APIs may of course still be used, forever, but are deprecated
> and shouldn't be used in new programs.
> 
> Because virt tools are compiled with -DGUESTFS_WARN_DEPRECATED=1, I
> have updated all the places calling the deprecated functions.  This
> has revealed some areas for improvement: in particular virt-diff and
> virt-ls could be changed to print the nanosecond fields.
> 
> FUSE now returns nanoseconds in stat calls where available, fixing
> https://bugzilla.redhat.com/show_bug.cgi?id=1144891
> 
> Notes about the implementation:
> 
> - guestfs_internal_lstatlist has been removed and replaced by
>   guestfs_internal_lstatnslist.  As the former was an internal API no
>   one should have been calling it, or indeed can call it unless they
>   start defining their own header files.
> 
> - guestfs_stat and guestfs_lstat have been changed into library-side
>   functions.  They, along with guestfs_lstatlist, are now implemented
>   as wrappers around the new functions which just throw away the
>   nanosecond fields.

LGTM.

I guess this would be worth for release notes of 1.28, wouldn't it?

-- 
Pino Toscano




More information about the Libguestfs mailing list