statx: NFS: Return enhanced file attributes

Return enhanced file atrributes from the NFS filesystem.  This includes the
following:

 (1) STATX_ATTR_AUTOMOUNT is set on referral or submount directories that
     are automounted upon.  NFS shows one directory with a different FSID,
     but the local VFS has two: the mountpoint directory (fabricated) and
     the root of the filesystem mounted upon it.

Furthermore, what nfs_getattr() does can be controlled as follows:

 (1) If AT_STATX_DONT_SYNC is indicated then this will suppress the
     flushing of outstanding writes and the rereading of the inode's
     attributes with the server as detailed below.

 (2) Otherwise:

     (a) If AT_STATX_FORCE_SYNC is indicated, or mtime or ctime are
     	 requested then the outstanding writes will be written to the
     	 server first.

     (b) The inode's attributes will be reread from the server:

     	 (i) if AT_STATX_FORCE_SYNC is indicated;

        (ii) if atime is requested (and atime updating is not suppressed by
     	     a mount flag); or

       (iii) if the cached attributes have expired;

If the inode isn't synchronised, then the cached attributes will be used -
even if expired - without reference to the server.

Example output:

	[root@andromeda ~]# /tmp/test-statx /warthog
	statx(/warthog) = 0
	results=7ff
	  Size: 4096            Blocks: 8          IO Block: 1048576  directory
	Device: 00:26           Inode: 2           Links: 21
	Access: (0555/dr-xr-xr-x)  Uid:     0   Gid:     0
	Access: 2016-11-25 11:56:06.460465738+0000
	Modify: 2016-09-08 20:39:46.785788707+0100
	Change: 2016-09-08 20:39:46.785788707+0100

Note that the NFS4 protocol potentially provides a creation time that could
be passed through this interface and system, hidden and archive values that
could be passed as attributes.  There is also a backup time that could be
exposed.

Signed-off-by: David Howells <dhowells@redhat.com>
1 file changed